diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 05f23fa0..14a59f6d 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -28,7 +28,7 @@ jobs: run: | for file in docs/examples/*.py; do # Skip batch_convert.py - if [[ "$(basename "$file")" == "batch_convert.py" ]]; then + if [[ "$(basename "$file")" =~ ^(batch_convert|minimal|export_multimodal|custom_convert|develop_picture_enrichment).py ]]; then echo "Skipping $file" continue fi diff --git a/docs/examples/batch_convert.py b/docs/examples/batch_convert.py index 2c61336c..f6ad92bd 100644 --- a/docs/examples/batch_convert.py +++ b/docs/examples/batch_convert.py @@ -106,8 +106,7 @@ def main(): Path("./tests/data/2206.01062.pdf"), Path("./tests/data/2203.01017v2.pdf"), Path("./tests/data/2305.03393v1.pdf"), - Path("./tests/data/redp5110.pdf"), - Path("./tests/data/redp5695.pdf"), + Path("./tests/data/redp5110_sampled.pdf"), ] # buf = BytesIO(Path("./test/data/2206.01062.pdf").open("rb").read()) diff --git a/tests/data/groundtruth/docling_v1/redp5110.doctags.txt b/tests/data/groundtruth/docling_v1/redp5110.doctags.txt deleted file mode 100644 index fe072e47..00000000 --- a/tests/data/groundtruth/docling_v1/redp5110.doctags.txt +++ /dev/null @@ -1,1883 +0,0 @@ - -Front cover -
- -
-Row and Column Access Control Support in IBM DB2 for i -Implement roles and separation of duties -Leverage row permissions on the database -Protect columns by defining column masks -Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan -Redpaper -
- -
-International Technical Support Organization -Row and Column Access Control Support in IBM DB2 for i -November 2014 -Note: Before using this information and the product it supports, read the information in "Notices" on page vii. -First Edition (November 2014) -This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1). -Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. -Contents - - -Notices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii -Trademarks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii -DB2 for i Center of Excellence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix -Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi -Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi -Now you can become a published author, too!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii -Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii -Stay connected to IBM Redbooks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv -Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 -1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 -1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 -1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 -1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 -1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .5 -Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 -2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 -2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .8 -2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .8 -2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .9 -2.1.4 Database Information function: QIBM_DB_SYSMON. . . . . . . . . . . . . . . . . . . . . . 9 -2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .9 -2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 -2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .10 -2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 -Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 -3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .14 -3.1.1 Row permission and column mask definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 -3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 -3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 -3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 -3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 -3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .21 -. . . . . . . . . . . . . . . . . . . . . . . . 22 -3.5 SELECT, INSERT, and UPDATE behavior with RCAC -3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .23 -3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .23 -3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 -3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 -3.6.5 Defining and creating column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 -3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 -3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 -3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .32 -
- - -Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .37 -4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .38 -4.2 Description of the users roles and responsibilities. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 -4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 -4.3.1 Reviewing the tables that are used in this example. . . . . . . . . . . . . . . . . . . . . . . 42 -4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group. . 47 -4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .50 -4.3.4 Creating the CUSTOMER_LOGIN_ID global variable. . . . . . . . . . . . . . . . . . . . . 52 -4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 -4.3.6 Defining and creating column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 -4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .60 -4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 -4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 -4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 -Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 -Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 -5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81 -5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 -5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .82 -82 -5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100 -83 -Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . 89 90 -6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -6.2.1 Effects when RCAC is defined on the source table6.2.1 Effects when RCAC is defined on the source table -88 -6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 -6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 -6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 -6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96 -6.4 Monitoring, analyzing, and debugging with RCAC97 -. . . . . . . . . . . . . . . . . . . . . . . . . . . .Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 -6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99 -6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .102 -6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 -105 -6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -6.6105 -107 -6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 -108 -109 -109 -113 -111 -Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . . -
- - -7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.4 Regenerating. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 -7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .115 -7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 -7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 -7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 -Chapter 8. Designing and planning for success. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 -8.1 Implementing RCAC with good design and proper planning. . . . . . . . . . . . . . . . . . . 120 -8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120 -Appendix A. Database definitions for the RCAC banking example. . . . . . . . . . . . . . 121 -Related publications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 -Other publications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 -Online resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 -Help from IBM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 -
-Notices -This information was developed for products and services offered in the U.S.A. -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: -IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A. -The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. -IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. -Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment. -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. -COPYRIGHT LICENSE: -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. -Trademarks -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or ™), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml -The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: -AS/400fi -DB2fi -DRDAfi -IBMfi -Power Systems™ -Redbooksfi -Redpaper™ -Redbooks (log o) fi System -ifi -The following terms are trademarks of other companies: -Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. -Other company, product, or service names may be trademarks or service marks of others. -
- -
-DB2 for i Center of Excellence -Solution Brief IBM Systems Lab Services and Training -
- -
-Highlights -- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -
- -
-Power Services -DB2 for i Center of Excellence -Expert help to achieve your business requirements -We build confident, satisfied clients -No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. -Because no one else is IBM. -With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. -Who we are, some of what we do -Global CoE engagements cover topics including: -- r Database performance and scalability -- r Advanced SQL knowledge and skills transfer -- r Business intelligence and analytics -- r DB2 Web Query -- r Query/400 modernization for better reporting and analysis capabilities -- r Database modernization and re-engineering -- r Data-centric architecture and design -- r Extremely large database and overcoming limits to growth -- r ISV education and enablement -What you can expect -Depending on the engagement, our team of consultants offer: -- r Briefings, consulting and guidance on demand -- r Illumination of the DB2 for i capabilities and leadership to exploit them -- r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation -- r Configuration of systems, operating system and products to fully leverage database capabilities -Key client benefits -T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes. -For more information -Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit: -ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -
- -
-© Copyright IBM Corporation 2013 -IBM Corporation Route 100 Somers, NY 10589 -Produced in the United States of America March 2013 -IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at www.ibm.com/legal/ copytrade.shtml . -This document is current as of the initial date of publication and may be changed by IBM at any time. -Not all offerings are available in every country in which IBM operates. -
- -
-Please Recycle -QLS12392-USEN-00 -Preface -This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. -This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. -
- -
-
- -
-Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. -Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . -Authors -
- -
-
- -
-
- -
-
- -
-
- -
-Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i. -Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes. -Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services. -Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead "JDE on i" analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i. -Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems™ Lab Services organization. Doug's 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings. -
- -
-
- -
-Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36. -Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester. -Thanks to the following people for their contributions to this project: -Debra Landon -International Technical Support Organization, Rochester Center -Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development -Now you can become a published author, too! -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. -Find out more about the residency program, browse the residency index, and apply online at: -ibm.com /redbooks/residencies.html -Comments welcome -Your comments are important to us! -We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways: -- GLYPH Use the online Contact us review Redbooks form found at: -ibm.com /redbooks -- GLYPH Send your comments in an email to: -redbooks@us.ibm.com -- GLYPH Mail your comments to: -IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400 -Stay connected to IBM Redbooks -- GLYPH Find us on Facebook: -http://www.facebook.com/IBMRedbooks -- GLYPH Follow us on Twitter: -http://twitter.com/ibmredbooks -- GLYPH Look for us on LinkedIn: -http://www.linkedin.com/groups?home=&gid=2130806 -- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: -https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm -- GLYPH Stay current on recent Redbooks publications with RSS Feeds: -http://www.redbooks.ibm.com/rss.html -
- -
-Chapter 1. -1 -Securing and protecting IBM DB2 data -Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. -Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. -This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: -- GLYPH Security fundamentals -- GLYPH Current state of IBM i security -- GLYPH DB2 for i security controls -1.1 Security fundamentals -Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: -- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. -- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. -A security policy is what defines whether the system and its settings are secure (or not). -- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. -With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. -1.2 Current state of IBM i security -Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. -Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. -Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. -Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day. -Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces. -An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level. -1.3 DB2 for i security controls -As described in 1.2, "Current state of IBM i security" on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table. -As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table. -Figure 1-1 All-or-nothing access to the rows of a table -
- -Figure 1-1 All-or-nothing access to the rows of a table -
-Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. -1.3.1 Existing row and column control -Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. -Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. -Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. -Figure 1-2 Existing row and column controls -
- -Figure 1-2 Existing row and column controls -
-1.3.2 New controls: Row and Column Access Control -Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC). -The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place. -
- -
-Chapter 2. -2 -Roles and separation of duties -One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs. -To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks. -This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics: -- GLYPH Roles -- GLYPH Separation of duties -2.1 Roles -Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization's requirements for limiting access to data or separation of duties. -To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service. -Roles are divided among the following DB2 functions and their corresponding function usage IDs: -- GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA -- GLYPH Toolbox application server access: QIBM_DB_ZDA -- GLYPH Database Administrator function: QIBM_DB_SQLADM -- GLYPH Database Information function: QIBM_DB_SYSMON -- GLYPH Security Administrator function: QIBM_DB_SECADM -2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA -The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. -2.1.2 Toolbox application server access: QIBM_DB_ZDA -The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console. -This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. -2.1.3 Database Administrator function: QIBM_DB_SQLADM -The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own. -The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization. -To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM. -Granting QIBM_DB_SQLADM function usage -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions. -2.1.4 Database Information function: QIBM_DB_SYSMON -The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties. -For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization. -Granting QIBM_DB_SYSMON function usage -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions. -2.1.5 Security Administrator function: QIBM_DB_SECADM -The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. -Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization. -Granting QIBM_DB_SECADM function usage -Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group. -2.1.6 Change Function Usage CL command -The following CL commands can be used to work with, display, or change function usage IDs: -- GLYPH Work Function Usage ( WRKFCNUSG ) -- GLYPH Change Function Usage ( CHGFCNUSG ) -- GLYPH Display Function Usage ( DSPFCNUSG ) -For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: -CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) -2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view -The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view. -Table 2-1 FUNCTION_USAGE view - - - -Column nameData typeDescription -FUNCTION_IDVARCHAR(30)ID of the function. -USER_NAMEVARCHAR(10)Name of the user profile that has a usage setting for this function. -USAGEVARCHAR(7)Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. -USER_TYPEVARCHAR(5)Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. -
Table 2-1 FUNCTION_USAGE view
-To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. -Example 2-1 Query to determine who has authority to define and manage RCAC -SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name; -2.2 Separation of duties -Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. -For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. -In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. -QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. -QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. -A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. -Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. -Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority - - - -User action*JOBCTLQIBM_DB_SECADMQIBM_DB_SQLADMQIBM_DB_SYSMONNo Authority -SET CURRENT DEGREE (SQL statement)XX -CHGQRYA command targeting a different user's jobXX -STRDBMON or ENDDBMON commands targeting a different user's jobXX -STRDBMON or ENDDBMON commands targeting a job that matches the current userXXXX -QUSRJOBI() API format 900 or System i Navigator's SQL Details for JobXXX -Visual Explain within Run SQL scriptsXXXX -Visual Explain outside of Run SQL scriptsXX -ANALYZE PLAN CACHE procedureXX -DUMP PLAN CACHE procedureXX -MODIFY PLAN CACHE procedureXX -MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)XX -CHANGE PLAN CACHE SIZE procedure (currently does not check authority)XX -
Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority
- - -User action*JOBCTLQIBM_DB_SECADMQIBM_DB_SQLADMQIBM_DB_SYSMONNo Authority -START PLAN CACHE EVENT MONITOR procedureXX -END PLAN CACHE EVENT MONITOR procedureXX -END ALL PLAN CACHE EVENT MONITORS procedureXX -Work with RCAC row permissions (Create, modify, or delete)X -Work with RCAC column masks (Create, modify, or delete)X -Change Object Owner ( CHGOBJOWN ) CL commandX -Change Object Primary Group ( CHGOBJPGP ) CL commandX -Grant Object Authority ( GRTOBJAUT ) CL commandX -Revoke Object Authority ( RVKOBJAUT ) CL commandX -Edit Object Authority ( EDTOBJAUT ) CL commandX -Display Object Authority ( DSPOBJAUT ) CL commandX -Work with Objects ( WRKOBJ ) CL commandX -Work with Libraries ( WRKLIB ) CL commandX -Add Authorization List Entry ( ADDAUTLE ) CL commandX -Change Authorization List Entry ( CHGAUTLE ) CL commandX -Remove Authorization List Entry ( RMVAUTLE ) CL commandX -Retrieve Authorization List Entry ( RTVAUTLE ) CL commandX -Display Authorization List ( DSPAUTL ) CL commandX -Display Authorization List Objects ( DSPAUTLOBJ ) CL commandX -Edit Authorization List ( EDTAUTL ) CL commandX -Work with Authorization Lists ( WRKAUTL ) CL commandX -
-
- -
-Chapter 3. -3 -Row and Column Access Control -This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example. -The following topics are covered in this chapter: -- GLYPH Explanation of RCAC and the concept of access control -- GLYPH Special registers and built-in global variables -- GLYPH VERIFY_GROUP_FOR_USER function -- GLYPH Establishing and controlling accessibility by using the RCAC rule text -- GLYPH SELECT, INSERT, and UPDATE behavior with RCAC -- GLYPH Human resources example -3.1 Explanation of RCAC and the concept of access control -RCAC limits data access to those users who have a business "need to know". RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called "IBM Advanced Data Security for i", also known as option 47 of IBM i 7.2. -In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms: -- GLYPH Row permissions -- GLYPH Column masks -Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements. -Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data. -RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic. -Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility. -3.1.1 Row permission and column mask definitions -The following sections define row permission and column masks. -Row permission -A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees. -The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules. -Figure 3-1 CREATE PERMISSION SQL statement -
- -The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement -
-Column mask -A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. -Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules. -Figure 3-2 CREATE MASK SQL statement -
- -Figure 3-2 CREATE MASK SQL statement -
-3.1.2 Enabling and activating RCAC -You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17. -Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table. -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. -Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements -
- -Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements -
-You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC. -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. -Figure 3-4 ALTER TABLE SQL statement -
- -Figure 3-4 ALTER TABLE SQL statement -
-When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set. -It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user's ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first. -Note: If a user does not have permission to access the row, the column mask logic is not invoked. -3.2 Special registers and built-in global variables -This section describes how you can use special registers and built-in global variables to implement RCAC. -3.2.1 Special registers -A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server. -IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers: -- GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION . -- GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128). -- GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller's or the owner's user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner's authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128). -- GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128). -In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text. -Table 3-1 summarizes these special registers and their values. -Table 3-1 Special registers and their corresponding values - - - -Special registerCorresponding value -USER or SESSION_USERThe effective user of the thread excluding adopted authority. -CURRENT_USERThe effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. -SYSTEM_USERThe authorization ID that initiated the connection. -
Table 3-1 Special registers and their corresponding values
-Figure 3-5 shows the difference in the special register values when an adopted authority is used: -- GLYPH A user connects to the server using the user profile ALICE. -- GLYPH USER and CURRENT USER initially have the same value of ALICE. -- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. -- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. -- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. -Figure 3-5 Special registers and adopted authority -
- -Figure 3-5 Special registers and adopted authority -
-3.2.2 Built-in global variables -Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. -IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. -Table 3-2 lists the nine built-in global variables. -Table 3-2 Built-in global variables - - - -Global variableTypeDescription -CLIENT_HOSTVARCHAR(255)Host name of the current client as returned by the system -CLIENT_IPADDRVARCHAR(128)IP address of the current client as returned by the system -CLIENT_PORTINTEGERPort used by the current client to communicate with the server -PACKAGE_NAMEVARCHAR(128)Name of the currently running package -PACKAGE_SCHEMAVARCHAR(128)Schema name of the currently running package -PACKAGE_VERSIONVARCHAR(64)Version identifier of the currently running package -ROUTINE_SCHEMAVARCHAR(128)Schema name of the currently running routine -ROUTINE_SPECIFIC_NAMEVARCHAR(128)Name of the currently running routine -ROUTINE_TYPECHAR(1)Type of the currently running routine -
Table 3-2 Built-in global variables
-3.3 VERIFY_GROUP_FOR_USER function -The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. -If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. -Here is an example of using the VERIFY_GROUP_FOR_USER function: -- 1. There are user profiles for MGR, JANE, JUDY, and TONY. -- 2. The user profile JANE specifies a group profile of MGR. -- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: -VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY') -3.4 Establishing and controlling accessibility by using the RCAC rule text -When defining a row permission or column mask, the "magic" of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine. -In the case of a row permission, the rule text is the "test" of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot. -In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value. -For a simple example of implementing row permissions and column masks, see 3.6, "Human resources example" on page 22. -In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause. -For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking. -For more information about what is permitted, see the "Database programming" topic of the IBM i 7.2 Knowledge Center, found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en -One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user's identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques. -More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1. -Example 3-1 Subquery that is used as part of the rule -DATE_MASTER D -D.BUSINESS_DAY = 'Y') -CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE -Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions. -3.5 SELECT, INSERT, and UPDATE behavior with RCAC -RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis. -Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you. -For more information and considerations about data movement in an RCAC environment, see Chapter 6, "Additional considerations" on page 85. -Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data. -3.6 Human resources example -This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users: -- GLYPH Tax_Id information -- GLYPH YEAR of the birth date of the employee (hiding the age of the employee) -In this example, there are four different types of users: -- GLYPH Employees -- GLYPH Managers -- GLYPH Human Resources Manager -- GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.) -The following sections describe step-by-step what is needed to be done to implement RCAC in this environment. -3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants -The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, "Security Administrator function: QIBM_DB_SECADM" on page 9). Complete the following steps: -- 1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority. -Example 3-2 Function ID required to implement RCAC -CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED) -- 2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3. -Example 3-3 Verifying what user profiles have authorization to implement RCAC -SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id ='QIBM_DB_SECADM' ORDER BY user_name; -- 3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database. -Figure 3-6 Result of the function ID query -3.6.2 Creating group profiles for the users and their roles -Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps: -- 1. In this example, there are three group profiles: -- -HR (Human Resource personnel) -- -MGR (Managers) -- -EMP (Employees) -These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles. -Example 3-4 Creating group profiles -CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group') -- 2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS). -Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile. -3.6.3 Demonstrating data access without RCAC -Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps: -- 1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table. -Example 3-5 Counting the number of employees -SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES; -The result of this query is shown in Figure 3-7, which is the total number of employees of the company. -Figure 3-7 Number of employees -
- -Figure 3-7 Number of employees -
-- 2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are. -Example 3-6 Displaying the information of the Employees -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES -The result of this query is shown in Figure 3-8. -Figure 3-8 List of employees without RCAC enabled -3.6.4 Defining and creating row permissions -Implement RCAC on the EMPLOYEES table by completing the following steps: -- 1. Start by defining a row permission. In this example, the rules to enforce include the following ones: -- -Human Resources employees can see all the rows. -- -Managers can see only information for the employees that they manage. -- -Employees can see only their own information. -- -Consultants are not allowed to see any rows in the table. -To implement this row permission, run the SQL statement that is shown in Example 3-7. -Example 3-7 Creating a permission for the EMPLOYEE table -CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ; -- 2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, "Enabling and activating RCAC" on page 16. -Figure 3-9 Row permissions that are shown in System i Navigator -
- -Figure 3-9 Row permissions that are shown in System i Navigator -
-3.6.5 Defining and creating column masks -Define the different masks for the columns that are sensitive by completing the following steps: -- 1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones: -- -Human Resources can see the entire date of birth of the employees. -- -Employees can see only their own date of birth. -- -Managers can see the date of birth of their employees masked with YEAR being 9999. -To implement this column mask, run the SQL statement that is shown in Example 3-8. -Example 3-8 Creation of a mask on the DATE_OF_BIRTH column -CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH -RETURN CASE -WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ; -- 2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones: -- -Human Resources can see the unmasked TAX_ID of the employees. -- -Employees can see only their own unmasked TAX_ID. -- -Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). -- -Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX. -- To implement this column mask, run the SQL statement that is shown in Example 3-9. -Example 3-9 Creating a mask on the TAX_ID column -CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; -- 3. Figure 3-10 shows the masks that are created in the HR_SCHEMA. -Figure 3-10 Column masks shown in System i Navigator -
- -Figure 3-10 Column masks shown in System i Navigator -
-3.6.6 Activating RCAC -Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: -- 1. Run the SQL statements that are shown in Example 3-10. -Example 3-10 Activating RCAC on the EMPLOYEES table -- /* Active Row Access Control (permissions) */ -/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; -*/ -- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . -Figure 3-11 Selecting the EMPLOYEES table from System i Navigator -
- -Figure 3-11 Selecting the EMPLOYEES table from System i Navigator -
-- 3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked. -Figure 3-12 RCAC enabled on the EMPLOYEES table -
- -Figure 3-12 RCAC enabled on the EMPLOYEES table -
-3.6.7 Demonstrating data access with RCAC -You are now ready to start testing RCAC with the four different users. Complete the following steps: -- 1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, "Demonstrating data access without RCAC" on page 24). -Example 3-11 EMPLOYEES count -SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES; -- 2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees). -Figure 3-13 Count of EMPLOYEES by HR -
- -Figure 3-13 Count of EMPLOYEES by HR -
-- 3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6. -Figure 3-14 Count of EMPLOYEES by a manager -
- -Figure 3-14 Count of EMPLOYEES by a manager -
-- 4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row). -Figure 3-15 Count of EMPLOYEES by an employee -
- -Figure 3-15 Count of EMPLOYEES by an employee -
-- 5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all. -Figure 3-16 Count of EMPLOYEES by a consultant -
- -Figure 3-16 Count of EMPLOYEES by a consultant -
-Does the result make sense? Yes, it does because RCAC is enabled. -- 6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, "Demonstrating data access without RCAC" on page 24. It is shown in Example 3-12. -Example 3-12 SELECT statement to test with the different users -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES -- 7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns. -Figure 3-17 SQL statement result by Human Resources user profile -- 8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns. -Figure 3-18 SQL statement result by Manager profile -- 9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all. -Figure 3-19 SQL statement result by an employee profile -- 10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company's employees. -Figure 3-20 SQL statement result by Consultant/DBE profile -3.6.8 Demonstrating data access with a view and RCAC -This section covers data access with a view and RCAC. Complete the following steps: -- 1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave. -Figure 3-21 Employees on leave -- 2. Example 3-13 shows the definition of the view. -Example 3-13 VIew of employees on leave -CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, -TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG ) -AS -SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, -ON_LEAVE_FLAG -FROM -HR_SCHEMA.EMPLOYEES -WHERE -ON_LEAVE_FLAG = 'Y'; -- 3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14: -Example 3-14 SQL statement for employees on leave -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM -HR_SCHEMA.EMPLOYEES_ON_LEAVE; -- 4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22. -Figure 3-22 Employees on leave - Human Resources user -- 5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well. -Figure 3-23 Employee on leave - Manager of Field Reps user -- 6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave. -. -Figure 3-24 Employees on leave - employee user -
- -
-Chapter 4. -4 -Implementing Row and Column Access Control: Banking example -This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. -The following topics are covered in this chapter: -- GLYPH Business requirements for the RCAC banking scenario -- GLYPH Description of the users roles and responsibilities -- GLYPH Implementation of RCAC -4.1 Business requirements for the RCAC banking scenario -As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application: -- GLYPH CUSTOMERS -- GLYPH ACCOUNTS -- GLYPH TRANSACTIONS -RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values. -In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee's personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet. -Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile. -The customer's identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer's login value. This value is compared to the customer's login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table. -Applications that do not use the web interface do not have to be changed because the global variable is NULL by default. -A diagram of the internet banking architecture is shown in Figure 4-1: -- GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested. -- GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent). -- GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent). -Figure 4-1 Internet banking example -
- -Figure 4-1 Internet banking example -
-4.2 Description of the users roles and responsibilities -During the requirements gathering phase, the following groups of users are identified and codified: -- GLYPH SECURITY: Security officer and security administrators -- GLYPH DBE: Database engineers -- GLYPH ADMIN: Bank business administrators -- GLYPH TELLER: Bank tellers -- GLYPH CUSTOMER: Bank customers using the internet -- GLYPH PUBLIC: Anyone not already in a group -Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example. -Figure 4-2 Rules for row and column access -
- -Figure 4-2 Rules for row and column access -
-The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table. -Figure 4-3 Column masks - - - -CUSTOMERSACCOUNTS -SECURITYNo RowsCUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_IDACCOUNT_NUMBER -DBEAll RowsCUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_IDACCOUNT NUMBER ACCOUNT_NUMBER -ADMINAll RowsNoneNone -TELLERAll RowsCUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _None -CUSTOMEROwn RowsNoneNone -PUBLICNo RowsCUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_IDACCOUNT_NUMBER -
Figure 4-3 Column masks
-For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur. -- GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group. -- GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group. -- GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group. -- GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group. -- GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group. -- GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed. -- GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG. -4.3 Implementation of RCAC -Figure 4-4 shows the data model of the banking scenario that is used in this example. -Figure 4-4 Data model of the banking scenario -
- -Figure 4-4 Data model of the banking scenario -
-This section covers the following steps: -- GLYPH Reviewing the tables that are used in this example -- GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group -- GLYPH Creating group profiles for the users and their roles -- GLYPH Creating the CUSTOMER_LOGIN_ID global variable -- GLYPH Defining and creating row permissions -- GLYPH Defining and creating column masks -- GLYPH Restricting the inserting and updating of masked data -- GLYPH Activating row and column access control -- GLYPH Reviewing row permissions -- GLYPH Demonstrating data access with RCAC -- GLYPH Query implementation with RCAC activated -4.3.1 Reviewing the tables that are used in this example -This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers. -Figure 4-5 Tables that are used in the banking example -
- -Figure 4-5 Tables that are used in the banking example -
-Note: Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. -To review the attributes of each table that is used in this banking example, complete the following steps: -- 1. Review the columns of each the tables through System i Navigator. Expand Database  named Database  Schemas  BANK_SCHEMA  Tables . -- 2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented. -Figure 4-6 CUSTOMERS table attributes -
- -Figure 4-6 CUSTOMERS table attributes -
-- 3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7. -Figure 4-7 Column definitions of the CUSTOMERS table -- 4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table. -Figure 4-8 Reviewing the constraints on the CUSTOMERS table -
- -Figure 4-8 Reviewing the constraints on the CUSTOMERS table -
-- 5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet. -Figure 4-9 ACCOUNTS table attributes -
- -Figure 4-9 ACCOUNTS table attributes -
-- 6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10. -Figure 4-10 Column definitions of the ACCOUNTS table -- 7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table. -Figure 4-11 Reviewing the constraints on the ACCOUNTS table -
- -Figure 4-11 Reviewing the constraints on the ACCOUNTS table -
-- 8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet. -Figure 4-12 TRANSACTIONS table attributes -
- -Figure 4-12 TRANSACTIONS table attributes -
-- 9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13. -Figure 4-13 Column definitions of the TRANSACTIONS table -- 10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table. -Figure 4-14 Reviewing the constraints on the TRANSACTIONS table -
- -Figure 4-14 Reviewing the constraints on the TRANSACTIONS table -
-Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario. -4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group -The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, "Roles" on page 8. In this example, the DBEs are users MCAIN and HBEDOYA. -Complete the following steps: -- 1. Right-click the database connection and select Application Administration , as shown in Figure 4-15. -Figure 4-15 Application administration -
- -Figure 4-15 Application administration -
-- 2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i  Database and select the function usage ID of Database Security Administrator . -Figure 4-16 Application administration for IBM i -
- -Figure 4-16 Application administration for IBM i -
-- 3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17. -Figure 4-17 Customizing the Database Security Administrator function usage ID -
- -Figure 4-17 Customizing the Database Security Administrator function usage ID -
-- 4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK . -Figure 4-18 Customize Access window -
- -Figure 4-18 Customize Access window -
-- 5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19. -Figure 4-19 Function usage ID Database Security Administrator customized -
- -Figure 4-19 Function usage ID Database Security Administrator customized -
-- 6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20. -Figure 4-20 Query to display user profiles with function usage ID for RCAC -
- -Figure 4-20 Query to display user profiles with function usage ID for RCAC -
-4.3.3 Creating group profiles for the users and their roles -The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, "Description of the users roles and responsibilities" on page 39. -Complete the following steps: -- 1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21. -Figure 4-21 Creating group profiles -
- -Figure 4-21 Creating group profiles -
-- 2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add . -Figure 4-22 shows adding user TQSPENCER to the TELLER group profile. -Figure 4-22 Creating group profiles and adding users -
- -Figure 4-22 Creating group profiles and adding users -
-- 3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups  Groups , as shown in Figure 4-23. -Figure 4-23 Newly created group profiles -
- -Figure 4-23 Newly created group profiles -
-4.3.4 Creating the CUSTOMER_LOGIN_ID global variable -In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, "Built-in global variables" on page 19. -Complete the following steps: -- 1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New  Global Variable , as shown in Figure 4-24. -Figure 4-24 Creating a global variable -
- -Figure 4-24 Creating a global variable -
-- 2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK . -Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID -
- -Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID -
-- 3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26. -Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable -
- -Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable -
-- 4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable. -Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable -
- -Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable -
-4.3.5 Defining and creating row permissions -You now ready to define the row permissions of the tables. Complete the following steps: -- 1. From the navigation pane of System i Navigator, click Schemas  BANK_SCHEMA , right-click Row Permissions , and select New  Row Permission , as shown in Figure 4-28. -Figure 4-28 Selecting new row permissions -
- -Figure 4-28 Selecting new row permissions -
-- 2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy: -- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows. -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. -- -Any other user profile cannot see any rows at all. -Select the Enabled option. Click OK . -Figure 4-29 New row permissions on the CUSTOMERS table -
- -Figure 4-29 New row permissions on the CUSTOMERS table -
-- 3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy: -- -User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows. -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. -- -Any other user profile cannot see any rows at all. -Select the Enabled option. Click OK . -Figure 4-30 New row permissions on the ACCOUNTS table -
- -Figure 4-30 New row permissions on the ACCOUNTS table -
-- 4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy: -- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows. -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. -Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored. -- -Any other user profile cannot see any rows at all. -Select the Enabled option. Click OK . -Figure 4-31 New row permissions on the TRANSACTIONS table -
- -Figure 4-31 New row permissions on the TRANSACTIONS table -
-- 5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled. -Figure 4-32 List of row permissions on BANK_SCHEMA -
- -Figure 4-32 List of row permissions on BANK_SCHEMA -
-4.3.6 Defining and creating column masks -This section defines the masks on the columns. Complete the following steps: -- 1. From the main navigation pane of System i Navigator, click Schemas  BANK_SCHEMA , right-click Column Masks , and select New  Column Mask , as shown in Figure 4-33. -Figure 4-33 Creating a column mask -
- -Figure 4-33 Creating a column mask -
-- 2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information: -- -Select the CUSTOMERS table on which to create the column mask. -- -Select the Column to mask; in this example, it is CUSTOMER_EMAIL. -- -Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****. -Select the Enabled option. Click OK . -Figure 4-34 Defining a column mask on the CUSTOMERS table -
- -Figure 4-34 Defining a column mask on the CUSTOMERS table -
-- 3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns: -- -MASK_DRIVERS_LICENSE_ON_CUSTOMERS -- -MASK_LOGIN_ID_ON_CUSTOMERS -- -MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS -- -MASK_ACCOUNT_NUMBER_ON_ACCOUNTS -- -MASK_SECURITY_QUESTION_ON_CUSTOMERS -- -MASK_TAX_ID_ON_CUSTOMERS -- 4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled. -Figure 4-35 List of column masks on BANK_SCHEMA -
- -Figure 4-35 List of column masks on BANK_SCHEMA -
-4.3.7 Restricting the inserting and updating of masked data -This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, "Avoiding propagation of masked data" on page 108. -Complete the following steps: -- 1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36 -Figure 4-36 Definition of the CUSTOMERS table -
- -Figure 4-36 Definition of the CUSTOMERS table -
-- 2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37. -Figure 4-37 Adding a check constraint -
- -Figure 4-37 Adding a check constraint -
-- 3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps: -- a. Select the CUSTOMER_EMAIL column. -- b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value. -- c. Select the On update violation, preserve column value option and click OK . -Figure 4-38 Specifying a new check constraint on the CUSTOMERS table -
- -Figure 4-38 Specifying a new check constraint on the CUSTOMERS table -
-- 4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column. -Figure 4-39 Check constraint on the CUSTOMERS table -
- -Figure 4-39 Check constraint on the CUSTOMERS table -
-- 5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40. -Figure 4-40 List of check constraints on the CUSTOMERS table -
- -Figure 4-40 List of check constraints on the CUSTOMERS table -
-4.3.8 Activating row and column access control -You are now ready to activate RCAC on all three tables in this example. Complete the following steps: -- 1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK . -Figure 4-41 Enabling RCAC on the CUSTOMERS table -
- -Figure 4-41 Enabling RCAC on the CUSTOMERS table -
-- 2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK . -Figure 4-42 Enabling RCAC on ACCOUNTS -
- -Figure 4-42 Enabling RCAC on ACCOUNTS -
-- 3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK . -Figure 4-43 Enabling RCAC on TRANSACTIONS -
- -Figure 4-43 Enabling RCAC on TRANSACTIONS -
-4.3.9 Reviewing row permissions -This section displays all the row permissions after enabling RCAC. Complete the following steps: -- 1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission. -Figure 4-44 Row permissions after enabling RCAC -
- -Figure 4-44 Row permissions after enabling RCAC -
-- 2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45. -Figure 4-45 Selecting row permission definition -
- -Figure 4-45 Selecting row permission definition -
-- 3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied. -Figure 4-46 Search condition of the QIBM_DEFAULT row permission -
- -Figure 4-46 Search condition of the QIBM_DEFAULT row permission -
-4.3.10 Demonstrating data access with RCAC -You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER): -- GLYPH A SELECT statement that returns the SESSION_USER. -- GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table. -- GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name: -- -c u s t o m e r _ i d -- -customer_name -- -customer_email -- -c u s t o m e r _ t a x _ i d -- -customer_drivers_license_number -Data access for a DBE user with RCAC -To test a DBE (MCAIN) user, complete the following steps: -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user. -Figure 4-47 DBE session user -
- -Figure 4-47 DBE session user -
-- 2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48. -Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table -
- -Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table -
-- 3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked. -Figure 4-49 SQL statement that is run by the DBE user with masked columns -Data access for SECURITY user with RCAC -To test a SECURITY user, complete the following steps: -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer. -Figure 4-50 SECURITY session user -
- -Figure 4-50 SECURITY session user -
-- 2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all. -Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table -
- -Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table -
-- 3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer. -Figure 4-52 SQL statement that is run by the SECURITY user - no results -
- -Figure 4-52 SQL statement that is run by the SECURITY user - no results -
-Data access for TELLER user with RCAC -To test a Teller (TQSPENCER) user, complete the following steps: -- 1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user. -Figure 4-53 TELLER session user -
- -Figure 4-53 TELLER session user -
-- 2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows. -Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table -
- -Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table -
-- 3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked. -Figure 4-55 SQL statement that is run by the TELLER user with masked columns -
- -Figure 4-55 SQL statement that is run by the TELLER user with masked columns -
-Data access for ADMIN user with RCAC -To test an ADMIN (VGLUCCHESS) user, complete the following steps: -- 1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user. -Figure 4-56 ADMIN session user -
- -Figure 4-56 ADMIN session user -
-- 2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows. -Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table -
- -Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table -
-- 3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns. -Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns -Data access for WEBUSER user with RCAC -To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps: -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user. -Figure 4-59 WEBUSER session user -
- -Figure 4-59 WEBUSER session user -
-- 2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID. -Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID -
- -Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID -
-- 3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61. -Figure 4-61 Viewing the global variable value -
- -Figure 4-61 Viewing the global variable value -
-- 4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID. -Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table -
- -Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table -
-- 5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user's own row. -Figure 4-63 SQL statement that is run by WEBUSER - no masked columns -
- -Figure 4-63 SQL statement that is run by WEBUSER - no masked columns -
-Other examples of data access with RCAC -To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps: -- 1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts. -Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile -- 2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions. -Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile -- 3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table. -Figure 4-66 List of accounts and current balance by customer using a TELLER user profile -4.3.11 Query implementation with RCAC activated -This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer. -Complete the following steps: -- 1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing. -Figure 4-67 Visual Explain with no RCAC enabled -
- -Figure 4-67 Visual Explain with no RCAC enabled -
-- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. -Figure 4-68 Visual Explain with RCAC enabled -
- -Figure 4-68 Visual Explain with RCAC enabled -
-- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. -Figure 4-69 Index advice with no RCAC -
- -Figure 4-69 Index advice with no RCAC -
-- 4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, "Index advisor" on page 99. -Figure 4-70 Index advice with RCAC enabled -
- -Figure 4-70 Index advice with RCAC enabled -
-
- -
-Chapter 5. -5 -RCAC and non-SQL interfaces -A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF ). -This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter. -The following topics are covered in this chapter in this chapter: -- GLYPH Unsupported interfaces -- GLYPH Native query result differences -- GLYPH Accidental updates with masked values -- GLYPH System CL commands considerations -5.1 Unsupported interfaces -It is not possible to create a row permission or column mask on a distributed table or a program-described file. -After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message: -- GLYPH A logical file with multiple formats if the open attempt requests more than one format. -- GLYPH A table or query that specifies an ICU 2.6.1 sort sequence. -- GLYPH A table with read triggers. -This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated. -For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1. -Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC. -5.2 Native query result differences -The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items: -- GLYPH Query/400 -- GLYPH QQQQRY API -- GLYPH Open Query File ( OPNQRYF ) command -- GLYPH Run Query ( RUNQRY ) command -- GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view -Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default. -The following list documents some of the query output differences that can occur when native query requests are processed by CQE: -- GLYPH Different ordering in the result set -- GLYPH Different values for null columns or columns with errors -- GLYPH Suppression of some mapping error messages -- GLYPH Loss of RRN positioning capabilities -- GLYPH Duplicate key processing behavior differences -- GLYPH Missing key feedback -For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm -In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance. -Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces. -5.3 Accidental updates with masked values -The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access. -For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program's record buffer, as shown Figure 5-1. -In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value. -Figure 5-1 Accidental update with masked values scenario -
- -Figure 5-1 Accidental update with masked values scenario -
-Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values. -DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, "Check constraint solution" on page 108. -5.4 System CL commands considerations -As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC. -5.4.1 Create Duplicate Object (CRTDUPOBJ) command -The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL . -If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error. -When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object. -5.4.2 Copy File (CPYF) command -The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table. -When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command. -If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received. -5.4.3 Copy Library (CPYLIB) command -The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, "Create Duplicate Object (CRTDUPOBJ) command" on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL . -
- -
-Chapter 6. -Additional considerations -This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions: -- GLYPH Timing of column masking -- GLYPH Data movement -- GLYPH Joins -- GLYPH Views -- GLYPH Materialized query tables -- GLYPH Index advisor -- GLYPH Monitoring, analysis, and debugging -- GLYPH Performance and scalability -The following topics are covered in this chapter: -- GLYPH Timing of column masking -- GLYPH RCAC effects on data movement -- GLYPH RCAC effects on joins -- GLYPH Monitoring, analyzing, and debugging with RCAC -- GLYPH Views, materialized query tables, and query rewrite with RCAC -- GLYPH RCAC effects on performance and scalability -- GLYPH Exclusive lock to implement RCAC (availability issues) -- GLYPH Avoiding propagation of masked data -- GLYPH Triggers and functions (SECURED) -- GLYPH RCAC is only one part of the solution -6 -6.1 Timing of column masking -An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking. -An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values. -SELECT -CREDIT_CARD_NUMBER, -FROM -GROUP BY -CREDIT_CARD_NUMBER -ORDER BY -CREDIT_CARD_NUMBER; -Without RCAC Masking -With RCAC Masking - - -CREDIT CARD NUMBER _ _TOTAL -3785 0000 0000 1234233.50 -3785 1111 1111 1234105.10 -3785 2222 2222 1234300 00 300.00 -3785 3333 3333 12341,775.00 -5466 4444 4444 1234601.70 -5466 5555 5555 123437.80 -5466 6666 6666 1234490.45 -6011 7777 7777 12341005.00 -6011 8888 8888 1234750.33 -6011 9999 9999 000110.00 -
-Figure 6-1 Timing of column masking - - - -CREDIT CARD NUMBER _ _TOTAL -**** **** **** 1234233.50 -**** **** **** 1234105.10 -**** **** **** 1234300 00 300.00 -**** **** **** 12341,775.00 -**** **** **** 1234601.70 -**** **** **** 123437.80 -**** **** **** 1234490.45 -**** **** **** 1234 12341005.00 -**** **** **** 1234750.33 -**** **** **** 000110.00 -
Figure 6-1 Timing of column masking
-SUM(AMOUNT) AS TOTAL TRANSACTIONS -Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query's final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2. -Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask. -Figure 6-2 Masking differences between Fieldproc and RCAC -
- -Figure 6-2 Masking differences between Fieldproc and RCAC -
-6.2 RCAC effects on data movement -As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss. -Figure 6-3 RCAC and data movement -
- -Figure 6-3 RCAC and data movement -
-The "user" that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization's object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC. -Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data. -This section covers in detail the following three examples: -- GLYPH Effects when RCAC is defined on the source table -- GLYPH Effects when RCAC is defined on the target table -- GLYPH Effects when RCAC is defined on both source and target tables -6.2.1 Effects when RCAC is defined on the source table -Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table. -Example 6-1 INSERT INTO TARGET statement -INSERT INTO TARGET (SELECT * FROM SOURCE); -For example, given a "source" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4. -Figure 6-4 RCAC effects on data movement from SOURCE -
- -Figure 6-4 RCAC effects on data movement from SOURCE -
-6.2.2 Effects when RCAC is defined on the target table -Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table. -Example 6-2 INSERT INTO TARGET statement -INSERT INTO TARGET (SELECT * FROM SOURCE); -Given a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the "target", and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table's permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read. -Figure 6-5 RCAC effects on data movement on TARGET -
- -Figure 6-5 RCAC effects on data movement on TARGET -
-6.2.3 Effects when RCAC is defined on both source and target tables -Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables. -Example 6-3 INSERT INTO TARGET statement -INSERT INTO TARGET (SELECT * FROM SOURCE); -Given a "source" table and a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned. -Although the source rows where NAME <> 'CAIN' do satisfy the target table's permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data. -Figure 6-6 RCAC effects on data movement on SOURCE and TARGET -
- -Figure 6-6 RCAC effects on data movement on SOURCE and TARGET -
-6.3 RCAC effects on joins -As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled. -Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation. -As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see. -Figure 6-7 Set A and set B with row permissions -
- -Figure 6-7 Set A and set B with row permissions -
-6.3.1 Inner joins -Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8. -Figure 6-8 Inner join without RCAC permission -
- -Figure 6-8 Inner join without RCAC permission -
-Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9. -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. -Figure 6-9 Inner join with RCAC permission -
- -Figure 6-9 Inner join with RCAC permission -
-6.3.2 Outer joins -Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default. -Figure 6-10 Outer join without RCAC permission -
- -Figure 6-10 Outer join without RCAC permission -
-Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11. -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. -Figure 6-11 Outer join with RCAC permission -
- -Figure 6-11 Outer join with RCAC permission -
-6.3.3 Exception joins -Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default. -Figure 6-12 Exception join without RCAC permission -
- -Figure 6-12 Exception join without RCAC permission -
-Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. -Figure 6-13 Exception join with RCAC permission -
- -Figure 6-13 Exception join with RCAC permission -
-6.4 Monitoring, analyzing, and debugging with RCAC -It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques. -The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences: -- GLYPH The underlying data access plan can be different and more complex based on the rule text. -- GLYPH The database results can be reduced or modified based on the rule text and user profile. -- GLYPH The run time of the request can be affected either positively or negatively based on the rule text. -- GLYPH For high-level language record level access, query plans must be considered, and not just program code. -During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different. -RCAC is designed and implemented to be transparent to the user. It is possible for user "Mike" and user "Hernando" to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user "Mike" and user "Hernando" have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query. -When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the "variables" the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different. -To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of "database engineer" becomes even more important. -6.4.1 Query monitoring and analysis tools -When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor. -Figure 6-14 shows how Visual Explain externalizes RCAC. -Figure 6-14 Visual Explain indicating that RCAC is applied -
- -Figure 6-14 Visual Explain indicating that RCAC is applied -
-Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary . -Figure 6-15 SQL Performance Monitor -
- -Figure 6-15 SQL Performance Monitor -
-Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied. -Figure 6-16 SQL Performance Monitor indicating that RCAC is applied -
- -Figure 6-16 SQL Performance Monitor indicating that RCAC is applied -
-Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized. -Figure 6-17 SQL Performance Monitor showing statements and RCAC -
- -Figure 6-17 SQL Performance Monitor showing statements and RCAC -
-When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer's policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows: -WHERE CUSTOMER_TAX_ID = '123-45-7890' -The literal value of '123-45-7890' is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure. -The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain. -6.4.2 Index advisor -Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point. -The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised. -For example, the query that is shown in Figure 6-18 produces index advice for the user's predicate and the RCAC predicate. -Figure 6-18 Index advice and RCAC -
- -Figure 6-18 Index advice and RCAC -
-In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text. -Figure 6-19 Index advisor based on the RCAC rule -
- -Figure 6-19 Index advisor based on the RCAC rule -
-For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at: -http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies -6.4.3 Metadata using catalogs -To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively. -Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view. -Figure 6-20 RCAC and catalogs -The SYSCONTROLS catalog view contains the following columns: -- GLYPH COLUMN_NAME -- GLYPH CONTROL_TYPE -- GLYPH CREATE_TIME -- GLYPH ENABLE -- GLYPH ENFORCED -- GLYPH ASP_NUMBER -- GLYPH IMPLICIT -- GLYPH LABEL -- GLYPH LAST_ALTERED -- GLYPH LONG_COMMENT -- GLYPH RCAC_NAME -- GLYPH RCAC_OWNER -- GLYPH RCAC_SCHEMA -- GLYPH RULETEXT -- GLYPH SYSTEM_COLUMN_NAME -- GLYPH SYSTEM_TABLE_NAME -- GLYPH SYSTEM_TABLE_SCHEMA -- GLYPH TABLE_NAME -- GLYPH TABLE_SCHEMA -- GLYPH TBCORRELATION -The SYSCONTROLSDEP catalog view contains the following columns: -- GLYPH COLUMN_NAME -- GLYPH CONTROL_TYPE -- GLYPH IASP_NUMBER -- GLYPH OBJECT_NAME -- GLYPH OBJECT_SCHEMA -- GLYPH OBJECT_TYPE -- GLYPH PARM_SIGNATURE -- GLYPH RCAC_NAME -- GLYPH RCAC_SCHEMA -- GLYPH SYSTEM_TABLE_NAME -- GLYPH SYSTEM_TABLE_SCHEMA -For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en -6.5 Views, materialized query tables, and query rewrite with RCAC -This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table. -6.5.1 Views -Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query. -Figure 6-21 View definition and user query -
- -Figure 6-21 View definition and user query -
-What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22. -Figure 6-22 Query rewrite with RCAC -
- -Figure 6-22 Query rewrite with RCAC -
-6.5.2 Materialized query tables -When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data. -Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried. -When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks. -The following example illustrates this scenario: -- 1. Create schema and tables: -CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER); -- 2. Create a row permission that allows the employees to see only rows from the region they work in: -/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE; -- 3. Create an MQT to summarize sales by location: --- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; -- 4. Populate the MQT (permission is not applied): -/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT -The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission: -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; -- 5. Create an MQT to summarize by region and location: --- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; -- 6. Populate the Region_location_Sales_MQT (permission not applied): -/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT -The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission: -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; -This example has the following additional implications: -- GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables. -- GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results. -- GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT. -6.5.3 Query rewrite -Query rewrite is a technique that the optimizer can use to change the original request to improve performance. -For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1. -As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC. -6.6 RCAC effects on performance and scalability -As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a "query", and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user's query, much like a query referencing a view. -For native record level access, this RCAC "query" is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user's permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned. -A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original "random read" request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of "not found" if the user is not entitled to any of the records. -For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the "next record" in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23. -Figure 6-23 Native record access with no RCAC -
- -Figure 6-23 Native record access with no RCAC -
-Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24. -Figure 6-24 Native record level access with RCAC -
- -Figure 6-24 Native record level access with RCAC -
-After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended. -6.7 Exclusive lock to implement RCAC (availability issues) -When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC. -Consider the following scenarios: -- GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table: -- -Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data. -- -Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data. -- -Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data. -- -Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data. -The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table. -- GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table. -- GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message: -SQ20471] INSERT or UPDATE does not satisfy row permissions. -To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission. -6.8 Avoiding propagation of masked data -Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control. -For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error: -INSERT INTO TABLE1 SELECT * FROM TABLE2 -The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint. -There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger. -6.8.1 Check constraint solution -One way to prevent this problem is to define a check constraint. -As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements. -In the Example 6-4, the mask is defined to return a value of 'XXX-XX-nnnn' for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value. -Example 6-4 Check constraint to avoid masked data -CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn -ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value. -6.8.2 Before trigger solution -The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5. -Example 6-5 Before trigger to avoid masked data -CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END -6.9 Triggers and functions (SECURED) -There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see. -6.9.1 Triggers -Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission. -Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over. -Example 6-6 Trigger SECURED -/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END -6.9.2 Functions -Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7. -Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED -The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure. -Consider the following examples: -- GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1. -- MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED. -- NOT SECURED is the default on the create function unless SECURED is explicitly selected. -This same rule applies for any function that might be invoked with a masked column specified as an argument. -- GLYPH Table2 column SSN has a column mask that is defined on it. -- SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute. -6.10 RCAC is only one part of the solution -When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges. -Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files. -Figure 6-25 Object-level security and RCAC permissions -
- -Figure 6-25 Object-level security and RCAC permissions -
-To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test. -The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver. -Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements. -The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of "restricting access to data", and "needing access to data". -
- -
-Chapter 7. -7 -Row and Column Access Control management -After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered. -The following topics are covered in this chapter: -- GLYPH Managing row permissions and column masks -- GLYPH Managing tables with row permissions and column masks -- GLYPH Monitoring and auditing function usage -7.1 Managing row permissions and column masks -This section focuses on the management of the RCAC row permissions and column masks. -7.1.1 Source management -The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions. -If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table. -7.1.2 Modifying definitions -After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition. -This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process. -7.1.3 Turning on and off -As described in 3.1.2, "Enabling and activating RCAC" on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table. -Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages. -7.1.4 Regenerating -DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects. -For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table. -Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error. -7.2 Managing tables with row permissions and column masks -This section examines the object management considerations after RCAC is added to a DB2 table. -7.2.1 Save and restore -Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC. -Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging. -For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, "Regenerating" on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (… SELECT C.CUSTOMER_ID FROM CUSTOMERS C …). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1. -Figure 7-1 Restoring tables to different schemas -
- -Figure 7-1 Restoring tables to different schemas -
-The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the "Schema qualify names for objects" and select the "OR REPLACE clause", and then run the generated script. -7.2.2 Table migration -There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes. -The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing. -Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas. -7.3 Monitoring and auditing function usage -While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events. -The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization's data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed. -A new journal entry type of "AX" for journal entry code "T" (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents: -- GLYPH IBM i Version 7.2 Journal Management Guide , found at: -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en -- GLYPH IBM i Version 7.2 Security Reference Guide , found at: -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en -
- -
-Chapter 8. -Designing and planning for success -Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing. -The following topics are covered in this chapter: -- GLYPH Implementing RCAC with good design and proper planning -- GLYPH DB2 for i Center of Excellence -8 -8.1 Implementing RCAC with good design and proper planning -By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i. -RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility. -This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read. -This paper has described the following pervasive power and advantages of RCAC: -- GLYPH Access can be controlled through simple or sophisticated logic. -- GLYPH Virtually no application changes are required. -- GLYPH The implementation of the access policy is part of the DB2 data access layer. -- GLYPH Table data is protected regardless of the interface that is used. -- GLYPH No user is inherently exempted from the access control policies. -- GLYPH Groups of users can share policies and permissions. -A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance. -With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown. -8.2 DB2 for i Center of Excellence -To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design. -If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com . -
- -
-Appendix A. -Database definitions for the RCAC banking example -This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, "Implementing Row and Column Access Control: Banking example" on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example. -Example A-1 DDL script to implement the RCAC banking example -/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , -A -CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); -ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 -THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; -CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */ -Related publications -The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper. -Other publications -These publications are relevant as further information sources: -- GLYPH IBM DB2 for i indexing methods and strategies white paper: -- http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies -- GLYPH IBM i Memo to Users Version 7.2 : -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm -- GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide : -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en -- GLYPH IBM i Version 7.2 Journal Management Guide : -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en -- GLYPH IBM i Version 7.2 Security Reference Guide : -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en -Online resources -These websites are relevant as further information sources: -- GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center: -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en -- GLYPH Identity Theft Resource Center -- http://www.idtheftcenter.org -- GLYPH Ponemon Institute -- http://www.ponemon.org/ -Help from IBM -IBM Support and downloads -ibm.com /support -IBM Global Services -ibm.com /services -Back cover -Row and Column Access Control Support in IBM DB2 for i -Implement roles and separation of duties -Leverage row permissions on the database -Protect columns by defining column masks -This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. -
- -
-
- -
-INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION -BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE -IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. -For more information: ibm.com /redbooks -
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5110.json b/tests/data/groundtruth/docling_v1/redp5110.json deleted file mode 100644 index 6780142d..00000000 --- a/tests/data/groundtruth/docling_v1/redp5110.json +++ /dev/null @@ -1 +0,0 @@ -{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "redp5110.pdf", "filename-prov": null, "document-hash": "3f8b6f0cb6d21ff16bdd7254c47ba72984b7ed1b70114e833c30f19be5366ad6", "#-pages": 146, "collection-name": null, "description": null, "page-hashes": [{"hash": "042dcdd712c3671577114114227f75ce1b5fe22a78e589c60b27d3c414ca914e", "model": "default", "page": 1}, {"hash": "19c7033f317f569819298dcaf98d4fd119632b01b323f3e244b6c14cd46b27b0", "model": "default", "page": 2}, {"hash": "1650a40ffe39a2240d05bdf5a7297a9e7de9c2564373213b732eb2009de23fd5", "model": "default", "page": 3}, {"hash": "fd0e00135169f317b2e2ab993cc64383dca2511f4a9e954563050a69dbefc35f", "model": "default", "page": 4}, {"hash": "dd607eefa7f279633dce503515463003c0167d6e1480e41daf39d95a03b02156", "model": "default", "page": 5}, {"hash": "69724844504d443f2f7dabc9d6cc912e26f1aba1fc51ddb2f248aa6f8da70505", "model": "default", "page": 6}, {"hash": "3ca620d960ef23d3419b3de71eb985eaa9bd54b7c1463116d4d11f64ab6515a8", "model": "default", "page": 7}, {"hash": "f360d9c1a29f5d9cc38f7a149b5e82ae9c177dedf534141f5d96d41792ccca01", "model": "default", "page": 8}, {"hash": "aaee7dcc87c982f44b3311ea587d9fee5d510de9567f84832e8b2effbf5e4c49", "model": "default", "page": 9}, {"hash": "f54ad5009578acd50e29ddf9e764f3894aef129245709bdda6695aca35080ef1", "model": "default", "page": 10}, {"hash": "35f70e10a2408e0395dfa9e894c5173186ac4481f414e41666e0be54f194accd", "model": "default", "page": 11}, {"hash": "64e97a3d553d9443178aae195f16f327cf503bb9c6930fe13af66b9fed277578", "model": "default", "page": 12}, {"hash": "995809366f67a29d338e5d08064a21a5bcda880bb0fe9d31085a3361059cf9ca", "model": "default", "page": 13}, {"hash": "b33a9cb89864b8461e994bc178c0f348722a75445a176a0ff059a1f1c6013c38", "model": "default", "page": 14}, {"hash": "37b17e27e1e6d405ed9c79a1282703930b1e8e1bff6b849a19ce614e5f874577", "model": "default", "page": 15}, {"hash": "ed6d8cc30effd85fb3a8b189732a80dd1d56dbc7fa4f079cd6d16f6084f4545a", "model": "default", "page": 16}, {"hash": "a355435891596f80e1ea7f3feef6b93a4f82caf62044e09a86e9ce2e02236715", "model": "default", "page": 17}, {"hash": "1d071bfa86d2d97bc7251f5f837deb4b3b72f422b79f76a83457210d40125b2a", "model": "default", "page": 18}, {"hash": "a74e58c9cd8ff01b37e4fe7df505cf495b9c1892db449b93e9076bb71fbd2ef2", "model": "default", "page": 19}, {"hash": "e83cbcc9e475190599ffc079b9266548d97fe0de76a0cb33c9fd50ef25237242", "model": "default", "page": 20}, {"hash": "c52304c295fd7f20396f82ab2bad8f0a085f067afc5692772fb9391ea880bcde", "model": "default", "page": 21}, {"hash": "86497e2615bb82251139e933e8e64153814e4ba46a499195083de8da6f5b89f9", "model": "default", "page": 22}, {"hash": "925398aa64327096c129a383e4bbec2eb083163878227c2d4e3166b44207fc03", "model": "default", "page": 23}, {"hash": "9d4e3d06a5f05410069b2b9486ec876c0e749fc8287c5d2c89940f4c44af96b5", "model": "default", "page": 24}, {"hash": "3956d5e714edf8547117687948339cc61c0727eaea2e2ad3b81e87963c1b73f0", "model": "default", "page": 25}, {"hash": "0bb0e09bd6e39cfc3da30376daecd1ad025ac38727078fd57ed04ab76e6dc8f3", "model": "default", "page": 26}, {"hash": "45005581d511136999fbc537f9465bb0b068b312ece0b9dcffe8f47a2af795fd", "model": "default", "page": 27}, {"hash": "4250019942cd107c8068cdf7c0c40c32f1735b6cd39e83eebd6b88f15f7af945", "model": "default", "page": 28}, {"hash": "d932d7afb19cda22b09acd96262695d080061df5f6f61323bbf3151b44707b0f", "model": "default", "page": 29}, {"hash": "bf6eb386ea506279669df237b54e8d789fa70b12d2830a42649632e5b057343f", "model": "default", "page": 30}, {"hash": "5dea54e30c89afe307a397ed24e083324991a1ddb17b94119f149183c1592cd7", "model": "default", "page": 31}, {"hash": "40fac6dd979f00f24fdcd1f07afad352b233f6926b8dfc8315e47c5304df1009", "model": "default", "page": 32}, {"hash": "40378b24c9b151d146ccd959a701dddfc8d9bac79a2075706c34d22dc185afd1", "model": "default", "page": 33}, {"hash": "935989acb8f1108365160d6428516b2b5cca95e12c75fb33818a33ad20730014", "model": "default", "page": 34}, {"hash": "570c8b11193a5b9e26d2b5a680c137cc6acbbb3c4c8dbfd02e96410f67444fab", "model": "default", "page": 35}, {"hash": "9f21fc6a00cee78376ee9fc31eb93ae5f0cde918f78b361f1ff0d2a1db7dfc01", "model": "default", "page": 36}, {"hash": "0e68f946bcdf7f573d88eed366216b5ba0ed470fcab1a783bcfb894802bf284e", "model": "default", "page": 37}, {"hash": "6ca7e5139b0a1993e0dd093698a9df1c1201091e509ec715d25c871c05a0863e", "model": "default", "page": 38}, {"hash": "c441267b99ad21ec04958ba35dcd465ce775b2c51c03ba67a4cfbb76f9955907", "model": "default", "page": 39}, {"hash": "aa16dbe8fa7fcd0634cf4930aa82a13c4f2d8621e759cec9c3097c15975551d2", "model": "default", "page": 40}, {"hash": "a1994f1ff203311afdc2424fedfad6f0429ccefb39ef62f7107ff75934404093", "model": "default", "page": 41}, {"hash": "92f8bad908b6a17adb727f822d8f77b673f79db90763faa32a648d89de97a0ae", "model": "default", "page": 42}, {"hash": "7cde568961d0f4ab1186b75a8d4f024a56b5065814f2050e7deda89fcb940064", "model": "default", "page": 43}, {"hash": "2d6e9fa06bae3a81449a646b629af6332dfc5780e5787e89a1eb491e60a8b95f", "model": "default", "page": 44}, {"hash": "c3c1468d8e9bbca1ac57cb97b7d6e191e3138cd98c919473a3deab89982d46fa", "model": "default", "page": 45}, {"hash": "3efc7b8e4918efef458011a9d564a062ba25e10f1b1998db385c746404995af2", "model": "default", "page": 46}, {"hash": "c96cd910329a52e1c256c61bafef7551e838ffe55cfc8de60ab8d1770a614d2a", "model": "default", "page": 47}, {"hash": "ed43a8e94b831c81406d263c7e72cb18279ff682bf82ca21d26bc8eaf58939b7", "model": "default", "page": 48}, {"hash": "beaba63670852ef3937e53edfd9c65e8381ccad289cf377ea1819ed4499649a5", "model": "default", "page": 49}, {"hash": "029387a73b937661bd354c45643d77243aae30a9e1dd692c26cadab54b33f630", "model": "default", "page": 50}, {"hash": "96cee9e611cde6da9b28630ae44aa4dddfb372bec1ad1400a4e5e0c641c18e9b", "model": "default", "page": 51}, {"hash": "d5f7a2c44833429eec81845b03adc589ed3fa9dbacfb90cbe3ac733cfb86306c", "model": "default", "page": 52}, {"hash": "0e398142d223dfaf46ad1d76702b89aa208b23fdc9f5fb7aaba1472a9db53b7b", "model": "default", "page": 53}, {"hash": "59664e9cadd6da670dd867311b1c5d9789cd944186e8ff42375b9719ddc43cf9", "model": "default", "page": 54}, {"hash": "5e4e6eaeafaf43a18590db6079f775401f7689d694cda14516fb000f7d85885c", "model": "default", "page": 55}, {"hash": "68496b0fe32a5149c0d6e70fef47ac02544a1db8176b6fa31c2c4bc59b35f933", "model": "default", "page": 56}, {"hash": "ac1bffe2a57f4b9f610dac9745f85bf8029c04e6279bae1fd942b030ca7e3635", "model": "default", "page": 57}, {"hash": "42616e9b91f856e761cf994d852d7c913e50b2fc00ce04e71cd28d51a4c88bf1", "model": "default", "page": 58}, {"hash": "4e9917d93adf25e36c0eeb37beb7881df8d8de40b23fdcde3f8c35e8867b4f7b", "model": "default", "page": 59}, {"hash": "7a484f738feda7e2327ce3bae87e5989b008d1309008f5fc237a681be7b4780c", "model": "default", "page": 60}, {"hash": "2957be6c48ca15c71ae2d63191e3ec999a65771e444c197828a2efe54aad7dee", "model": "default", "page": 61}, {"hash": "81d885ff0652b16f490f2bdf49bf5b2f85bdea4ea7dc85f98de238b437812522", "model": "default", "page": 62}, {"hash": "c0a9752603b861a7c13d678d1c89174f140ae5ef1fc4af32a872ae99bd09b494", "model": "default", "page": 63}, {"hash": "9fa129577bad65520977b6742108edd287a8413c1f002a0fcde9e8d4649e5ca3", "model": "default", "page": 64}, {"hash": "720722b50e586615b5a55451ec49b89048aecbb7450b7bf952ab7b8cab856b63", "model": "default", "page": 65}, {"hash": "91c76d552d29f2d09c34608319dd7729bd1309ccfadd56f22a00d25e8bbce771", "model": "default", "page": 66}, {"hash": "d9a6a973665fd160fb9cf52d6444cd4be6bf5a977666b625f58858ba507b0ee2", "model": "default", "page": 67}, {"hash": "dcc11d3809231dfdbe15f28126c3c6c7016f0d239c48829860133e645f0b4e9e", "model": "default", "page": 68}, {"hash": "18f5746455a39ff66f0d83bf5dcc45151e5313ccf038da38b25195a135445d23", "model": "default", "page": 69}, {"hash": "6f150521a19ebcc1dc711a861d26a1447ee33c01d770b6e985ed23ac4c3bce0b", "model": "default", "page": 70}, {"hash": "2675ed680861667ca9a8eb01fffa6b1ffc5c682d1217a7ee211ee1a14f066301", "model": "default", "page": 71}, {"hash": "cc1b3ad555bc13b0266cc1dd1646f6703b96043a17865254191fb28200897100", "model": "default", "page": 72}, {"hash": "d69dc0543126dbc6d00e1e8ce512bbf99efcda00f45cae9ab93877fc9e833308", "model": "default", "page": 73}, {"hash": "3afbdd3081b903b7941e16a1b3e0feebb23b70fa6a850e3b1119172763263fdb", "model": "default", "page": 74}, {"hash": "9ab6f9e4fd7c147650dbf4b3226a4805d3e3a86af0be0496be4cbd7eb2fe38dc", "model": "default", "page": 75}, {"hash": "3cd1d3fe8ed3a77aeaf1b68c9faa81fdc1209f44b20dd695826bfb009497af91", "model": "default", "page": 76}, {"hash": "3e0d46cb61ec6ec6ba1aa5f21e61d8988b7c531c3928c1cfa2ea5a35c5f7556f", "model": "default", "page": 77}, {"hash": "1d2d26c6366591fa7103e6920121f20b7d47e252f8e5598bc9b0d10d88b0a876", "model": "default", "page": 78}, {"hash": "6b74896cf6d9d79d6eea588138972973314a1e883e4a92eb39533e096e5fea4c", "model": "default", "page": 79}, {"hash": "2b53410a79b04ddd9d95ca46742e1916b631d56c91e67426449a2f48303233c9", "model": "default", "page": 80}, {"hash": "1cad2f44f63e2c43c0950ba8863f3a3d0f2f4afa1ae6f9ca2ceb992a34061d98", "model": "default", "page": 81}, {"hash": "1fd53dcb8bd415d94cbebe26f4938b10551f29603658e5d92b9932d2179878ba", "model": "default", "page": 82}, {"hash": "4ef9b11fb0f67f1227d7241f38a68b1e7d12cccb90802424b6fc139e84e73241", "model": "default", "page": 83}, {"hash": "1c2ea11640d6d0298f383f42acc541cee1d082453dc6c201fbd0dfe2c3583a6d", "model": "default", "page": 84}, {"hash": "fe89905acb289f8126f56f0fa57b0032cf459757a285a28e18a4fa79d0f37ff5", "model": "default", "page": 85}, {"hash": "897bc2fcbbd0147b2ad32d7130836346100dd1f483bb904be454bddee79032d3", "model": "default", "page": 86}, {"hash": "c8e638b82bad37d6d6528852ca8f58d16aa6de3ae113f9f59cc061591bbe36d4", "model": "default", "page": 87}, {"hash": "c8b4dcf9ac58518dfd7a0030612750ef310992ecfa1352cc501a3183eddc63ac", "model": "default", "page": 88}, {"hash": "311e4dab810a715c0dd964b03c57ef59105b844638789454a5a31285bb20b6c5", "model": "default", "page": 89}, {"hash": "bcc127d2a49aaeb213cddec0bef6623f19a01d5ea42b6f7495b4f803405c42f6", "model": "default", "page": 90}, {"hash": "bb0ab5360776e0488e57ac48e39d6e0df6200c2570723dcb807ad3f679c09534", "model": "default", "page": 91}, {"hash": "6fd7cdacf0d19eda989b99c3b1e02ef6d6643dbc6cfa6f10037bd0ebb7cd10b5", "model": "default", "page": 92}, {"hash": "d33f0c4ae60d66663fa25b1f7675c11437badaa8a8fa7e51daeebc6141df12ed", "model": "default", "page": 93}, {"hash": "315310a543a8ecc45c434d0e0b8aa54c6566d53d61acb74820a6649e583f9cb2", "model": "default", "page": 94}, {"hash": "38d412966dfe997ab9448d2df046448e5ebbedd2531b8527bd744c8bb5440508", "model": "default", "page": 95}, {"hash": "08d37d1668223a1a7194cf811cd594cfe30e422dd1695df02a8b73a7b735084b", "model": "default", "page": 96}, {"hash": "31d9ea5f81342dbfdc72492243a2e7f0aa9817d84d61eab0181aeaa71d75d7f5", "model": "default", "page": 97}, {"hash": "1cb53ff64bc87e1939f8b45a89a00a6267a02e718ec0c634cf7e20936ffdd4f2", "model": "default", "page": 98}, {"hash": "1245402b982e1a9d1065ac0c0cad30336aa14ecdc2cb3ef4a5c36bc55e9bbd10", "model": "default", "page": 99}, {"hash": "c38f21714819257f54186f075bf6b9446113e03dd6d40e5fd1319fd5cd3c359c", "model": "default", "page": 100}, {"hash": "9bb82caef77080aa11554e67ab1f214e5cf5e8fe2415663d128ba541cf314d5b", "model": "default", "page": 101}, {"hash": "714f390df026d13c65dea02894cf3d91496fd2ae3a94073d90f7714df79d47ee", "model": "default", "page": 102}, {"hash": "f19f8a6e418fdf2a42d8ede7c788f9f8cf33b907e3bb606e9c829320dff3bb5f", "model": "default", "page": 103}, {"hash": "2b15ecb09a734a16ed9804314a6cc9f03a12af63a904fac62a97ea21b1d2ecef", "model": "default", "page": 104}, {"hash": "8b15d46f01007cf63e5bad57b8cd889275c11e6b58bebe48ffec8842d67e7277", "model": "default", "page": 105}, {"hash": "f20a188209524e8fd1692faa3d3450cd075bb45f2962693371867cf166456dc1", "model": "default", "page": 106}, {"hash": "2d4dbf9c96c18bffaeb3b1bd321acea187066e968dd034c585a81a547f4c93c1", "model": "default", "page": 107}, {"hash": "0ef40f53d56676acaf1aef17676d06262391f04c8277eb1ba32ab7ca5d97e875", "model": "default", "page": 108}, {"hash": "25dbff770b7e10a2a2e2668b2f2977d99ed53ed37d3390e1f89d9245abf83e72", "model": "default", "page": 109}, {"hash": "2572c0b17f240729b504355e11e0d2009a92925a1faaa7b66aea649dc59d7905", "model": "default", "page": 110}, {"hash": "a3e79679ca89ec169e9967808ff8b3f9c2c2db25c113cb68c3f3a993eef15408", "model": "default", "page": 111}, {"hash": "5a47310eb886fad70101ea30ef05dee49cbda1d8a7e2446c3c61b66b3f634039", "model": "default", "page": 112}, {"hash": "992b747ebf8d366fcc11d36599c33ed004584f000855942db59e5a30dd625c7c", "model": "default", "page": 113}, {"hash": "f0bb099090288d2d8c2dad45a22598a924b5c8c3b739206496022a8985d56e25", "model": "default", "page": 114}, {"hash": "5d4e2ca3c369a87ae1732a86f0553fe650005db4637a792963f02fee28a3f1dd", "model": "default", "page": 115}, {"hash": "d23e9d367ce0fa476a6c89009c6fc6c8dd8e15dac6c21b1457a87c8ea89fc6ab", "model": "default", "page": 116}, {"hash": "2ed8bcad41539c0196738efdced854e4c0c11736a062c2bb382517307308315f", "model": "default", "page": 117}, {"hash": "a6d6fd7589a6dddaea1ae0ee683f34ba67d229ad1489d43cd55ab4bfa0a09e48", "model": "default", "page": 118}, {"hash": "4373bdfba2b9cb9f431054a081bcdbb9fde02a2a7c555237105645fc7c4300c6", "model": "default", "page": 119}, {"hash": "b9ba9a2d9c6e8fae2ae668710eb75f4e32a1debfca93371c7d2b12c849bd22da", "model": "default", "page": 120}, {"hash": "f0ac55799e80466c2f68c00232e96f16c893b304c5af92380071564bfd79cc2f", "model": "default", "page": 121}, {"hash": "a619cca5375467d6cbf87c25836da41e5a09dcab342c685b34539dd82fe86989", "model": "default", "page": 122}, {"hash": "d5eb13189c1badbc8317352c3077a84871640f1c42ba8d544f2b66e9788940b4", "model": "default", "page": 123}, {"hash": "5328248231376143041b9f94792b736e39d597c55126949b59362f6464ea0a04", "model": "default", "page": 124}, {"hash": "5201845b41de7b7c02c15934aa48093d9c3b7dd783a32f1f6887d16ab27736fd", "model": "default", "page": 125}, {"hash": "53ef8bd7beea5d3619cc02586077a54911c327d5b912872da834d7e26cbddda7", "model": "default", "page": 126}, {"hash": "eb5a30dbe63c79925f80db77000a9ae325904111ec3a76d12f0eabe9ea8184b5", "model": "default", "page": 127}, {"hash": "ea0c7446fc6d2d362e73d4581e7b8ad4608d1a569eaf7728b2565e9a62bfacc2", "model": "default", "page": 128}, {"hash": "ce7040d1ddf6c4ad312a07c56ce385cc338cb6dad98a350a3145fa651df24e10", "model": "default", "page": 129}, {"hash": "a59661e9111d2f306b39d51a1d1c2b60fafa5a0053a15e5c4df080974b4b9c8e", "model": "default", "page": 130}, {"hash": "e0eebbd57c73414b07cd40507f8b0dc3e30b7621a4da103a1b11b98178d614da", "model": "default", "page": 131}, {"hash": "663d5c537942f854d04a288e7cddc273cb931a1671b07345cf6fbd87593e6960", "model": "default", "page": 132}, {"hash": "ee15d566c88e74395f5c9cf500a25235527c226a22ac85bd940113a29690fcd3", "model": "default", "page": 133}, {"hash": "16dcf411e2a595080c73aa2c3aac658c7ea34947642e9f5d74b30637a8232ba0", "model": "default", "page": 134}, {"hash": "d06b834379d4d7edede6ad45cab9324d8ed03f6553a6ace9eef8ee2911517eae", "model": "default", "page": 135}, {"hash": "f39abd05ea9ae74cdd31f3fe7fc2cafb94364c90ff8f85b38fd763e0b4f00492", "model": "default", "page": 136}, {"hash": "c8cc8d0266caeb8d3547582e443238d020cc2b89b9b0a27881fa53a2d53eb373", "model": "default", "page": 137}, {"hash": "5df7c7769a47c31ede50376223cd8c64a630f146185eabfd69e6def4904d11e9", "model": "default", "page": 138}, {"hash": "752a8ff175ffefd5467eb28072d1ae016e4f2d121a42de192874c1314d8782af", "model": "default", "page": 139}, {"hash": "80196ef5402921f88f9a620eecc70cd40660a88bc53f0d7b41932ef750af8cf8", "model": "default", "page": 140}, {"hash": "e0675b1f0bfe007f57df25c89b6606a7fb711a9a2aea0b6ab3ed7f0c344938d9", "model": "default", "page": 141}, {"hash": "34c60aca3232bf01b5bcc0d4f745ecba5742a056e7cd56e78e733d27165319f5", "model": "default", "page": 142}, {"hash": "8add7158d438c17581bf11a58d377832b87438adddd357fc1df9627a01bb050c", "model": "default", "page": 143}, {"hash": "c6bfbf013724102c875b7177a50d9eeebd48325dc2c1ff163e018a5d86b4b638", "model": "default", "page": 144}, {"hash": "6272edb80b7baf8c345cdc69fd8b613712da5cca430baeee8b2bf74383b20940", "model": "default", "page": 145}, {"hash": "637ac3e09c925390e82504f989601641999e308491f5cd0cd8db2a22021a5412", "model": "default", "page": 146}]}, "main-text": [{"prov": [{"bbox": [287.82000732421875, 741.251953125, 418.83355712890625, 763.4519653320312], "page": 1, "span": [0, 11], "__ref_s3_data": null}], "text": "Front cover", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/0"}, {"prov": [{"bbox": [35.68840408325195, 625.594482421875, 584.6428833007812, 709.605712890625], "page": 1, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [35.0073127746582, 466.4394226074219, 216.00064086914062, 497.2061767578125], "page": 1, "span": [0, 40], "__ref_s3_data": null}], "text": "Implement roles and separation of duties", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [34.56448745727539, 412.4388732910156, 202.45404052734375, 443.0459289550781], "page": 1, "span": [0, 40], "__ref_s3_data": null}], "text": "Leverage row permissions on the database", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [35.171409606933594, 358.4383239746094, 195.27529907226562, 389.3459167480469], "page": 1, "span": [0, 40], "__ref_s3_data": null}], "text": "Protect columns by defining column masks", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [36.894657135009766, 26.895000457763672, 164.45849609375, 42.1337890625], "page": 1, "span": [0, 17], "__ref_s3_data": null}], "text": "ibm.com /redbooks", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [497.0279846191406, 92.828369140625, 581.8246459960938, 218.1163330078125], "page": 1, "span": [0, 115], "__ref_s3_data": null}], "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [314.70001220703125, 18.227041244506836, 580.52001953125, 80.49143981933594], "page": 1, "span": [0, 8], "__ref_s3_data": null}], "text": "Redpaper", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/1"}, {"prov": [{"bbox": [192.0, 706.8116455078125, 468.1595153808594, 721.0047607421875], "page": 3, "span": [0, 44], "__ref_s3_data": null}], "text": "International Technical Support Organization", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [191.42994689941406, 659.2655639648438, 551.7711181640625, 688.5792236328125], "page": 3, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [191.8452911376953, 629.265869140625, 290.98956298828125, 642.7902221679688], "page": 3, "span": [0, 13], "__ref_s3_data": null}], "text": "November 2014", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [479.1854553222656, 27.93828010559082, 547.263671875, 38.04693603515625], "page": 3, "span": [0, 12], "__ref_s3_data": null}], "text": "REDP-5110-00", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [70.31981658935547, 680.7681884765625, 511.2250671386719, 703.502685546875], "page": 4, "span": [0, 111], "__ref_s3_data": null}], "text": "Note: Before using this information and the product it supports, read the information in \"Notices\" on page vii.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.49017333984375, 96.25506591796875, 206.09754943847656, 106.751953125], "page": 4, "span": [0, 29], "__ref_s3_data": null}], "text": "First Edition (November 2014)", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [63.900901794433594, 73.747314453125, 422.2424621582031, 84.0731201171875], "page": 4, "span": [0, 80], "__ref_s3_data": null}], "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.55229949951172, 45.16082763671875, 426.39117431640625, 54.7935791015625], "page": 4, "span": [0, 82], "__ref_s3_data": null}], "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.10758972167969, 23.57710075378418, 547.2008666992188, 44.3375244140625], "page": 4, "span": [0, 136], "__ref_s3_data": null}], "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.6857681274414, 695.9519653320312, 168.73440551757812, 718.98193359375], "page": 5, "span": [0, 8], "__ref_s3_data": null}], "text": "Contents", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/0"}, {"prov": [{"bbox": [63.751060485839844, 27.8984375, 257.24334716796875, 37.30303955078125], "page": 5, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [538.3257446289062, 27.93828010559082, 547.25927734375, 37.91693115234375], "page": 5, "span": [0, 3], "__ref_s3_data": null}], "text": "iii", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.4805679321289, 27.93828010559082, 75.64199829101562, 37.88385009765625], "page": 6, "span": [0, 2], "__ref_s3_data": null}], "text": "iv", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [90.44805145263672, 28.0523681640625, 331.7034606933594, 37.39471435546875], "page": 6, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/1"}, {"name": "Table", "type": "table", "$ref": "#/tables/2"}, {"prov": [{"bbox": [488.2200012207031, 28.136999130249023, 529.1115112304688, 37.1326904296875], "page": 7, "span": [0, 8], "__ref_s3_data": null}], "text": "Contents", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [540.8323974609375, 27.93828010559082, 547.3976440429688, 37.15127944946289], "page": 7, "span": [0, 1], "__ref_s3_data": null}], "text": "v", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.35196685791016, 27.93828010559082, 75.64199829101562, 37.79052734375], "page": 8, "span": [0, 2], "__ref_s3_data": null}], "text": "vi", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [90.52510833740234, 27.85345458984375, 331.7355651855469, 37.53863525390625], "page": 8, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.80000305175781, 695.9519653320312, 151.5048065185547, 719.0535888671875], "page": 9, "span": [0, 7], "__ref_s3_data": null}], "text": "Notices", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [63.85922622680664, 650.037109375, 413.7007141113281, 660.0452880859375], "page": 9, "span": [0, 78], "__ref_s3_data": null}], "text": "This information was developed for products and services offered in the U.S.A.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.08584594726562, 579.486572265625, 547.235595703125, 640.2033081054688], "page": 9, "span": [0, 625], "__ref_s3_data": null}], "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.23300170898438, 540.159912109375, 547.2992553710938, 570.0869140625], "page": 9, "span": [0, 232], "__ref_s3_data": null}], "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.32848358154297, 529.6168212890625, 489.1996154785156, 540.1092529296875], "page": 9, "span": [0, 92], "__ref_s3_data": null}], "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.91102600097656, 459.743408203125, 547.1917114257812, 520.1630249023438], "page": 9, "span": [0, 541], "__ref_s3_data": null}], "text": "The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.85258865356445, 410.14208984375, 547.2783813476562, 449.9327087402344], "page": 9, "span": [0, 345], "__ref_s3_data": null}], "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.01903533935547, 369.8486633300781, 539.7974243164062, 400.0287780761719], "page": 9, "span": [0, 286], "__ref_s3_data": null}], "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.25189208984375, 339.6141662597656, 547.1986694335938, 359.9352111816406], "page": 9, "span": [0, 135], "__ref_s3_data": null}], "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.00050354003906, 270.11480712890625, 544.1587524414062, 329.7486267089844], "page": 9, "span": [0, 526], "__ref_s3_data": null}], "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.13472747802734, 219.73095703125, 547.231689453125, 259.93731689453125], "page": 9, "span": [0, 408], "__ref_s3_data": null}], "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.89973449707031, 169.85992431640625, 545.7865600585938, 209.7525634765625], "page": 9, "span": [0, 359], "__ref_s3_data": null}], "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.30471801757812, 150.16415405273438, 172.49951171875, 160.33880615234375], "page": 9, "span": [0, 18], "__ref_s3_data": null}], "text": "COPYRIGHT LICENSE:", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [63.98580551147461, 79.4564208984375, 547.2437744140625, 140.032958984375], "page": 9, "span": [0, 619], "__ref_s3_data": null}], "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.6475715637207, 27.83892822265625, 257.24334716796875, 37.2679443359375], "page": 9, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.3445434570312, 27.93828010559082, 547.250244140625, 37.6517333984375], "page": 9, "span": [0, 3], "__ref_s3_data": null}], "text": "vii", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.09756469726562, 706.0162963867188, 154.14569091796875, 721.870849609375], "page": 10, "span": [0, 10], "__ref_s3_data": null}], "text": "Trademarks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [64.14087677001953, 629.2591552734375, 547.2604370117188, 689.2691040039062], "page": 10, "span": [0, 591], "__ref_s3_data": null}], "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.81353759765625, 599.2596435546875, 546.6150512695312, 619.277587890625], "page": 10, "span": [0, 133], "__ref_s3_data": null}], "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.01971435546875, 581.1570434570312, 112.14369201660156, 591.0765380859375], "page": 10, "span": [0, 8], "__ref_s3_data": null}], "text": "AS/400fi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.20001220703125, 570.1167602539062, 100.03594970703125, 580.0547485351562], "page": 10, "span": [0, 5], "__ref_s3_data": null}], "text": "DB2fi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.27558898925781, 559.1367797851562, 107.95845794677734, 568.40380859375], "page": 10, "span": [0, 6], "__ref_s3_data": null}], "text": "DRDAfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [235.85794067382812, 581.1571044921875, 259.61248779296875, 590.7225341796875], "page": 10, "span": [0, 5], "__ref_s3_data": null}], "text": "IBMfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [235.99562072753906, 570.1168212890625, 307.14569091796875, 579.8333129882812], "page": 10, "span": [0, 14], "__ref_s3_data": null}], "text": "Power Systems\u2122", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [236.1086883544922, 559.1368408203125, 283.57794189453125, 568.2393798828125], "page": 10, "span": [0, 10], "__ref_s3_data": null}], "text": "Redbooksfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [396.9049377441406, 581.1571655273438, 445.7533874511719, 590.8819580078125], "page": 10, "span": [0, 9], "__ref_s3_data": null}], "text": "Redpaper\u2122", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [397.0493469238281, 569.7461547851562, 464.00567626953125, 579.3828735351562], "page": 10, "span": [0, 26], "__ref_s3_data": null}], "text": "Redbooks (log o) fi System", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [396.6751708984375, 558.4414672851562, 438.42291259765625, 568.2816162109375], "page": 10, "span": [0, 3], "__ref_s3_data": null}], "text": "ifi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.997196197509766, 537.2783203125, 311.9006652832031, 547.1436157226562], "page": 10, "span": [0, 54], "__ref_s3_data": null}], "text": "The following terms are trademarks of other companies:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.95560073852539, 507.27880859375, 509.53704833984375, 527.1810302734375], "page": 10, "span": [0, 117], "__ref_s3_data": null}], "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.17562103271484, 486.9937438964844, 464.51568603515625, 497.43646240234375], "page": 10, "span": [0, 86], "__ref_s3_data": null}], "text": "Other company, product, or service names may be trademarks or service marks of others.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.85106658935547, 26.91827964782715, 81.16200256347656, 36.138671875], "page": 10, "span": [0, 4], "__ref_s3_data": null}], "text": "viii", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [95.8013916015625, 26.6639404296875, 337.0337829589844, 36.20538330078125], "page": 10, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/2"}, {"prov": [{"bbox": [64.80000305175781, 706.416015625, 235.86239624023438, 717.5160522460938], "page": 11, "span": [0, 30], "__ref_s3_data": null}], "text": "DB2 for i Center of Excellence", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [93.67039489746094, 636.66357421875, 233.99972534179688, 654.3631591796875], "page": 11, "span": [0, 52], "__ref_s3_data": null}], "text": "Solution Brief IBM Systems Lab Services and Training", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/3"}, {"prov": [{"bbox": [144.19781494140625, 454.64495849609375, 188.74681091308594, 464.93798828125], "page": 11, "span": [0, 10], "__ref_s3_data": null}], "text": "Highlights", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [144.4553985595703, 433.3105773925781, 242.87388610839844, 447.962890625], "page": 11, "span": [0, 532], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [144.40879821777344, 402.7626953125, 259.22869873046875, 425.3538513183594], "page": 11, "span": [0, 876], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [144.23313903808594, 379.6138916015625, 249.8356170654297, 394.8355407714844], "page": 11, "span": [0, 672], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [144.35208129882812, 357.3323669433594, 234.2516326904297, 371.82550048828125], "page": 11, "span": [0, 613], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/4"}, {"prov": [{"bbox": [460.8193359375, 646.5781860351562, 506.26177978515625, 653.661376953125], "page": 11, "span": [0, 14], "__ref_s3_data": null}], "text": "Power Services", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [280.07391357421875, 515.3794555664062, 463.8094177246094, 554.2871704101562], "page": 11, "span": [0, 30], "__ref_s3_data": null}], "text": "DB2 for i Center of Excellence", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [279.51953125, 503.36505126953125, 483.7276916503906, 514.842529296875], "page": 11, "span": [0, 49], "__ref_s3_data": null}], "text": "Expert help to achieve your business requirements", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.468994140625, 467.1043395996094, 443.375732421875, 476.9213562011719], "page": 11, "span": [0, 37], "__ref_s3_data": null}], "text": "We build confident, satisfied clients", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [279.530517578125, 446.4922790527344, 488.1546630859375, 464.73529052734375], "page": 11, "span": [0, 122], "__ref_s3_data": null}], "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [280.0453186035156, 427.2699890136719, 367.8602294921875, 435.4290466308594], "page": 11, "span": [0, 27], "__ref_s3_data": null}], "text": "Because no one else is IBM.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.70794677734375, 366.6907958984375, 500.321044921875, 415.73895263671875], "page": 11, "span": [0, 318], "__ref_s3_data": null}], "text": "With combined experiences and direct access to development groups, we're the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.6336669921875, 345.1319274902344, 435.1236572265625, 354.8772277832031], "page": 11, "span": [0, 30], "__ref_s3_data": null}], "text": "Who we are, some of what we do", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [279.4736328125, 334.5338134765625, 434.56317138671875, 342.7397766113281], "page": 11, "span": [0, 46], "__ref_s3_data": null}], "text": "Global CoE engagements cover topics including:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.74200439453125, 315.4241027832031, 402.1675109863281, 323.6339416503906], "page": 11, "span": [0, 38], "__ref_s3_data": null}], "text": "- r Database performance and scalability", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.7657165527344, 305.21771240234375, 424.9964599609375, 313.35101318359375], "page": 11, "span": [0, 44], "__ref_s3_data": null}], "text": "- r Advanced SQL knowledge and skills transfer", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.9660339355469, 294.8087158203125, 392.2996520996094, 302.5164489746094], "page": 11, "span": [0, 37], "__ref_s3_data": null}], "text": "- r Business intelligence and analytics", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.9432067871094, 284.7392272949219, 339.94354248046875, 292.4297180175781], "page": 11, "span": [0, 15], "__ref_s3_data": null}], "text": "- r DB2 Web Query", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.68328857421875, 274.50201416015625, 504.21795654296875, 282.5703125], "page": 11, "span": [0, 72], "__ref_s3_data": null}], "text": "- r Query/400 modernization for better reporting and analysis capabilities", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.66998291015625, 263.96942138671875, 423.002197265625, 271.96844482421875], "page": 11, "span": [0, 43], "__ref_s3_data": null}], "text": "- r Database modernization and re-engineering", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.7203674316406, 254.12164306640625, 400.07391357421875, 262.03643798828125], "page": 11, "span": [0, 38], "__ref_s3_data": null}], "text": "- r Data-centric architecture and design", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.7815856933594, 244.1992645263672, 467.2125549316406, 252.1336669921875], "page": 11, "span": [0, 58], "__ref_s3_data": null}], "text": "- r Extremely large database and overcoming limits to growth", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.89080810546875, 234.0165557861328, 382.3631591796875, 241.97698974609375], "page": 11, "span": [0, 30], "__ref_s3_data": null}], "text": "- r ISV education and enablement", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [93.356689453125, 624.11572265625, 193.95431518554688, 633.7283935546875], "page": 12, "span": [0, 19], "__ref_s3_data": null}], "text": "What you can expect", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [93.58877563476562, 614.1285400390625, 283.61541748046875, 621.952392578125], "page": 12, "span": [0, 59], "__ref_s3_data": null}], "text": "Depending on the engagement, our team of consultants offer:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [93.6685562133789, 593.9907836914062, 243.1177520751953, 602.1696166992188], "page": 12, "span": [0, 46], "__ref_s3_data": null}], "text": "- r Briefings, consulting and guidance on demand", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [93.72789001464844, 574.0993041992188, 282.7251281738281, 592.1357421875], "page": 12, "span": [0, 75], "__ref_s3_data": null}], "text": "- r Illumination of the DB2 for i capabilities and leadership to exploit them", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [93.56942749023438, 543.554443359375, 274.4058532714844, 571.7151489257812], "page": 12, "span": [0, 121], "__ref_s3_data": null}], "text": "- r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [93.60421752929688, 522.5653076171875, 285.813232421875, 541.5523681640625], "page": 12, "span": [0, 97], "__ref_s3_data": null}], "text": "- r Configuration of systems, operating system and products to fully leverage database capabilities", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [93.41441345214844, 499.38623046875, 179.16822814941406, 509.0904541015625], "page": 12, "span": [0, 19], "__ref_s3_data": null}], "text": "Key client benefits", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [93.23255920410156, 438.4472961425781, 282.49176025390625, 503.74200439453125], "page": 12, "span": [0, 316], "__ref_s3_data": null}], "text": "T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [93.40412902832031, 416.9537353515625, 192.24819946289062, 426.29229736328125], "page": 12, "span": [0, 20], "__ref_s3_data": null}], "text": "For more information", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [93.551025390625, 386.4068603515625, 274.9092102050781, 415.04736328125], "page": 12, "span": [0, 165], "__ref_s3_data": null}], "text": "Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [93.61650085449219, 367.145751953125, 216.61273193359375, 374.6022033691406], "page": 12, "span": [0, 298], "__ref_s3_data": null}], "text": "ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/5"}, {"prov": [{"bbox": [309.5291748046875, 576.0010375976562, 409.8566589355469, 583.289794921875], "page": 12, "span": [0, 32], "__ref_s3_data": null}], "text": "\u00a9 Copyright IBM Corporation 2013", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [309.4497985839844, 545.79736328125, 361.2178039550781, 568.1546020507812], "page": 12, "span": [0, 42], "__ref_s3_data": null}], "text": "IBM Corporation Route 100 Somers, NY 10589", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [309.4351501464844, 522.8818969726562, 420.7811584472656, 537.5772094726562], "page": 12, "span": [0, 51], "__ref_s3_data": null}], "text": "Produced in the United States of America March 2013", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [309.1927795410156, 471.18280029296875, 505.15802001953125, 516.8470458984375], "page": 12, "span": [0, 367], "__ref_s3_data": null}], "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \"Copyright and trademark information\" at www.ibm.com/legal/ copytrade.shtml .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [309.322998046875, 450.140869140625, 500.2719421386719, 464.77276611328125], "page": 12, "span": [0, 101], "__ref_s3_data": null}], "text": "This document is current as of the initial date of publication and may be changed by IBM at any time.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [309.2567138671875, 436.7710266113281, 494.2681884765625, 444.02313232421875], "page": 12, "span": [0, 71], "__ref_s3_data": null}], "text": "Not all offerings are available in every country in which IBM operates.", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/6"}, {"prov": [{"bbox": [333.32159423828125, 421.76727294921875, 375.9523010253906, 428.4759826660156], "page": 12, "span": [0, 14], "__ref_s3_data": null}], "text": "Please Recycle", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [446.00567626953125, 118.24281311035156, 504.98651123046875, 125.18218994140625], "page": 12, "span": [0, 16], "__ref_s3_data": null}], "text": "QLS12392-USEN-00", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.80000305175781, 695.9519653320312, 151.46160888671875, 718.8968505859375], "page": 13, "span": [0, 7], "__ref_s3_data": null}], "text": "Preface", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.75503540039062, 590.1392822265625, 547.3082275390625, 660.085693359375], "page": 13, "span": [0, 469], "__ref_s3_data": null}], "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.94647216796875, 531.8143310546875, 546.4656982421875, 577.9362182617188], "page": 13, "span": [0, 309], "__ref_s3_data": null}], "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.71319580078125, 449.8482971191406, 547.2366943359375, 472.1881408691406], "page": 13, "span": [0, 172], "__ref_s3_data": null}], "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/7"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/8"}, {"prov": [{"bbox": [63.724002838134766, 27.89178466796875, 257.24334716796875, 37.29620361328125], "page": 13, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [538.058349609375, 27.93828010559082, 547.2503051757812, 37.60198974609375], "page": 13, "span": [0, 2], "__ref_s3_data": null}], "text": "xi", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [262.6522521972656, 275.06854248046875, 541.2507934570312, 417.312744140625], "page": 13, "span": [0, 684], "__ref_s3_data": null}], "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [262.4736328125, 111.162841796875, 541.2737426757812, 265.49169921875], "page": 13, "span": [0, 726], "__ref_s3_data": null}], "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.22550201416016, 488.9364013671875, 125.36660766601562, 504.8105773925781], "page": 13, "span": [0, 7], "__ref_s3_data": null}], "text": "Authors", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [64.18641662597656, 27.93828010559082, 78.4020004272461, 37.57574462890625], "page": 14, "span": [0, 3], "__ref_s3_data": null}], "text": "xii", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.32842254638672, 28.0654296875, 334.4214172363281, 37.28607177734375], "page": 14, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/9"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/10"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/11"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/12"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/13"}, {"prov": [{"bbox": [262.9671630859375, 656.8482666015625, 541.2052612304688, 715.4261474609375], "page": 14, "span": [0, 271], "__ref_s3_data": null}], "text": "Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [262.94354248046875, 457.7811279296875, 541.171630859375, 600.0166015625], "page": 14, "span": [0, 671], "__ref_s3_data": null}], "text": "Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [262.7120666503906, 341.8028259277344, 541.3219604492188, 447.94219970703125], "page": 14, "span": [0, 494], "__ref_s3_data": null}], "text": "Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [262.76617431640625, 187.7853546142578, 541.2412719726562, 329.9665832519531], "page": 14, "span": [0, 702], "__ref_s3_data": null}], "text": "Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead \"JDE on i\" analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [262.9361877441406, 83.7471923828125, 541.1943969726562, 177.96636962890625], "page": 14, "span": [0, 420], "__ref_s3_data": null}], "text": "Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems\u2122 Lab Services organization. Doug's 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings.", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/14"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/15"}, {"prov": [{"bbox": [262.7662658691406, 585.0075073242188, 541.1551513671875, 715.326416015625], "page": 15, "span": [0, 608], "__ref_s3_data": null}], "text": "Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [262.6918029785156, 481.3031005859375, 541.2665405273438, 575.589111328125], "page": 15, "span": [0, 436], "__ref_s3_data": null}], "text": "Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6240234375, 443.1976013183594, 432.1602478027344, 453.2672119140625], "page": 15, "span": [0, 71], "__ref_s3_data": null}], "text": "Thanks to the following people for their contributions to this project:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3055877685547, 421.29852294921875, 200.390869140625, 431.54791259765625], "page": 15, "span": [0, 12], "__ref_s3_data": null}], "text": "Debra Landon", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.32855224609375, 408.6701965332031, 439.0932312011719, 419.5627136230469], "page": 15, "span": [0, 62], "__ref_s3_data": null}], "text": "International Technical Support Organization, Rochester Center", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.09214782714844, 375.0718078613281, 457.729736328125, 397.3418884277344], "page": 15, "span": [0, 97], "__ref_s3_data": null}], "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.71363067626953, 331.68011474609375, 413.1525573730469, 348.17987060546875], "page": 15, "span": [0, 43], "__ref_s3_data": null}], "text": "Now you can become a published author, too!", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.805419921875, 233.25941467285156, 547.232666015625, 315.3446960449219], "page": 15, "span": [0, 551], "__ref_s3_data": null}], "text": "Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.59922790527344, 210.92303466796875, 546.8164672851562, 221.3204345703125], "page": 15, "span": [0, 91], "__ref_s3_data": null}], "text": "Find out more about the residency program, browse the residency index, and apply online at:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.80001831054688, 194.49908447265625, 301.6778259277344, 204.01422119140625], "page": 15, "span": [0, 34], "__ref_s3_data": null}], "text": "ibm.com /redbooks/residencies.html", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.52783966064453, 151.01637268066406, 219.43165588378906, 166.65826416015625], "page": 15, "span": [0, 16], "__ref_s3_data": null}], "text": "Comments welcome", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9565887451172, 124.1328125, 294.74969482421875, 134.02044677734375], "page": 15, "span": [0, 34], "__ref_s3_data": null}], "text": "Your comments are important to us!", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8791961669922, 90.2786636352539, 547.25244140625, 112.6141357421875], "page": 15, "span": [0, 152], "__ref_s3_data": null}], "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.62045288085938, 73.23909759521484, 412.55645751953125, 83.194091796875], "page": 15, "span": [0, 72], "__ref_s3_data": null}], "text": "- GLYPH Use the online Contact us review Redbooks form found at:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.20013427734375, 56.498329162597656, 231.11917114257812, 65.59039306640625], "page": 15, "span": [0, 17], "__ref_s3_data": null}], "text": "ibm.com /redbooks", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [485.1000061035156, 28.136999130249023, 520.88134765625, 37.24951171875], "page": 15, "span": [0, 7], "__ref_s3_data": null}], "text": "Preface", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [532.5994262695312, 27.93828010559082, 547.1934204101562, 37.7366943359375], "page": 15, "span": [0, 4], "__ref_s3_data": null}], "text": "xiii", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.0907974243164, 27.93828010559082, 81.16200256347656, 37.40447998046875], "page": 16, "span": [0, 3], "__ref_s3_data": null}], "text": "xiv", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [95.71053314208984, 28.02490234375, 337.0337829589844, 37.3270263671875], "page": 16, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.5431365966797, 710.7161254882812, 310.3739318847656, 721.2905883789062], "page": 16, "span": [0, 50], "__ref_s3_data": null}], "text": "- GLYPH Send your comments in an email to:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.99362182617188, 694.5873413085938, 246.22007751464844, 704.1723022460938], "page": 16, "span": [0, 19], "__ref_s3_data": null}], "text": "redbooks@us.ibm.com", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.64413452148438, 677.0240478515625, 254.27020263671875, 687.05322265625], "page": 16, "span": [0, 38], "__ref_s3_data": null}], "text": "- GLYPH Mail your comments to:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.4449005126953, 624.0880126953125, 426.992431640625, 671.0802001953125], "page": 16, "span": [0, 134], "__ref_s3_data": null}], "text": "IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.44961547851562, 581.0363159179688, 317.6510925292969, 597.390625], "page": 16, "span": [0, 30], "__ref_s3_data": null}], "text": "Stay connected to IBM Redbooks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.58946228027344, 554.25830078125, 246.8371124267578, 564.1651611328125], "page": 16, "span": [0, 36], "__ref_s3_data": null}], "text": "- GLYPH Find us on Facebook:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.674072265625, 537.0848388671875, 326.0977478027344, 547.1090087890625], "page": 16, "span": [0, 35], "__ref_s3_data": null}], "text": "http://www.facebook.com/IBMRedbooks", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.61866760253906, 520.2987060546875, 241.52239990234375, 530.5045166015625], "page": 16, "span": [0, 37], "__ref_s3_data": null}], "text": "- GLYPH Follow us on Twitter:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.70498657226562, 503.5311279296875, 301.0782165527344, 513.2252197265625], "page": 16, "span": [0, 30], "__ref_s3_data": null}], "text": "http://twitter.com/ibmredbooks", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6381072998047, 486.2793273925781, 257.426513671875, 496.593017578125], "page": 16, "span": [0, 40], "__ref_s3_data": null}], "text": "- GLYPH Look for us on LinkedIn:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.5355224609375, 469.3290710449219, 391.0767822265625, 479.2994079589844], "page": 16, "span": [0, 48], "__ref_s3_data": null}], "text": "http://www.linkedin.com/groups?home=&gid=2130806", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.53648376464844, 439.63250732421875, 546.2178955078125, 461.9305419921875], "page": 16, "span": [0, 118], "__ref_s3_data": null}], "text": "- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.64300537109375, 423.1323547363281, 451.45623779296875, 433.2305908203125], "page": 16, "span": [0, 60], "__ref_s3_data": null}], "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8739471435547, 406.300537109375, 429.3480529785156, 416.6739501953125], "page": 16, "span": [0, 76], "__ref_s3_data": null}], "text": "- GLYPH Stay current on recent Redbooks publications with RSS Feeds:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.6341552734375, 389.47064208984375, 331.0777282714844, 399.0984802246094], "page": 16, "span": [0, 36], "__ref_s3_data": null}], "text": "http://www.redbooks.ibm.com/rss.html", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/16"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 17, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 699.3392333984375], "page": 17, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.68006896972656, 482.1217956542969, 547.3047485351562, 538.7101440429688], "page": 17, "span": [0, 36], "__ref_s3_data": null}], "text": "Securing and protecting IBM DB2 data", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.15219116210938, 361.62640380859375, 547.2540283203125, 444.024658203125], "page": 17, "span": [0, 648], "__ref_s3_data": null}], "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.05917358398438, 303.55853271484375, 527.206298828125, 349.8846435546875], "page": 17, "span": [0, 304], "__ref_s3_data": null}], "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.5961456298828, 270.1002197265625, 547.1551513671875, 291.9596862792969], "page": 17, "span": [0, 122], "__ref_s3_data": null}], "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.86915588378906, 252.9566650390625, 250.23167419433594, 263.29638671875], "page": 17, "span": [0, 37], "__ref_s3_data": null}], "text": "- GLYPH Security fundamentals", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.742431640625, 240.626708984375, 282.98114013671875, 251.2857666015625], "page": 17, "span": [0, 47], "__ref_s3_data": null}], "text": "- GLYPH Current state of IBM i security", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.86570739746094, 229.06103515625, 264.8818664550781, 239.55108642578125], "page": 17, "span": [0, 43], "__ref_s3_data": null}], "text": "- GLYPH DB2 for i security controls", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7418975830078, 66.45916748046875, 258.362548828125, 75.71832275390625], "page": 17, "span": [0, 35], "__ref_s3_data": null}], "text": "$^{1 }$http://www.idtheftcenter.org", "type": "footnote", "name": "Footnote", "font": null}, {"prov": [{"bbox": [136.19522094726562, 56.73187255859375, 234.42526245117188, 66.703857421875], "page": 17, "span": [0, 31], "__ref_s3_data": null}], "text": "$^{2 }$http://www.ponemon.org /", "type": "footnote", "name": "Footnote", "font": null}, {"prov": [{"bbox": [63.68400573730469, 27.85699462890625, 257.24334716796875, 37.3408203125], "page": 17, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [541.2396240234375, 27.93828010559082, 547.2176513671875, 37.7130126953125], "page": 17, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.33735656738281, 702.3842163085938, 267.40582275390625, 718.60302734375], "page": 18, "span": [0, 25], "__ref_s3_data": null}], "text": "1.1 Security fundamentals", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.23556518554688, 664.178466796875, 545.0048217773438, 685.97265625], "page": 18, "span": [0, 133], "__ref_s3_data": null}], "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.66490173339844, 610.8453369140625, 547.1642456054688, 657.3309326171875], "page": 18, "span": [0, 361], "__ref_s3_data": null}], "text": "- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.2132110595703, 521.4625244140625, 547.2608642578125, 604.0206298828125], "page": 18, "span": [0, 587], "__ref_s3_data": null}], "text": "- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.1995086669922, 504.9290466308594, 541.9920043945312, 515.2373657226562], "page": 18, "span": [0, 90], "__ref_s3_data": null}], "text": "A security policy is what defines whether the system and its settings are secure (or not).", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.4777374267578, 415.4546203613281, 547.1582641601562, 498.18560791015625], "page": 18, "span": [0, 573], "__ref_s3_data": null}], "text": "- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.90879821777344, 381.6918640136719, 535.3616943359375, 403.87713623046875], "page": 18, "span": [0, 179], "__ref_s3_data": null}], "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.44733428955078, 338.3087158203125, 323.3839111328125, 354.5881042480469], "page": 18, "span": [0, 35], "__ref_s3_data": null}], "text": "1.2 Current state of IBM i security", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1368408203125, 275.52197265625, 547.3182373046875, 322.23028564453125], "page": 18, "span": [0, 306], "__ref_s3_data": null}], "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.79974365234375, 206.1400604248047, 547.284423828125, 264.12274169921875], "page": 18, "span": [0, 405], "__ref_s3_data": null}], "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8997802734375, 111.57879638671875, 547.2832641601562, 193.8753662109375], "page": 18, "span": [0, 640], "__ref_s3_data": null}], "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.92394256591797, 27.93828010559082, 72.8219985961914, 37.713134765625], "page": 18, "span": [0, 1], "__ref_s3_data": null}], "text": "2", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.81553649902344, 28.03179931640625, 328.7253723144531, 37.31463623046875], "page": 18, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.11676025390625, 626.8720092773438, 546.4398193359375, 721.186279296875], "page": 19, "span": [0, 688], "__ref_s3_data": null}], "text": "Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7813262939453, 520.8560791015625, 547.2666015625, 615.1084594726562], "page": 19, "span": [0, 723], "__ref_s3_data": null}], "text": "Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8739471435547, 462.8641662597656, 546.2266235351562, 509.3145446777344], "page": 19, "span": [0, 331], "__ref_s3_data": null}], "text": "An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.80000305175781, 419.7867126464844, 295.2049255371094, 435.8830261230469], "page": 19, "span": [0, 31], "__ref_s3_data": null}], "text": "1.3 DB2 for i security controls", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9359893798828, 333.2792053222656, 547.1688842773438, 403.39501953125], "page": 19, "span": [0, 511], "__ref_s3_data": null}], "text": "As described in 1.2, \"Current state of IBM i security\" on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.52011108398438, 311.0404052734375, 466.3186340332031, 321.39666748046875], "page": 19, "span": [0, 78], "__ref_s3_data": null}], "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.93324279785156, 80.60284423828125, 354.8916015625, 89.82525634765625], "page": 19, "span": [0, 55], "__ref_s3_data": null}], "text": "Figure 1-1 All-or-nothing access to the rows of a table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/17"}, {"prov": [{"bbox": [328.2245788574219, 27.9105224609375, 529.1063232421875, 37.203857421875], "page": 19, "span": [0, 47], "__ref_s3_data": null}], "text": "Chapter 1. Securing and protecting IBM DB2 data", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [540.928466796875, 27.93828010559082, 547.2176513671875, 37.6522216796875], "page": 19, "span": [0, 1], "__ref_s3_data": null}], "text": "3", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.09014129638672, 27.93828010559082, 72.8219985961914, 37.92034912109375], "page": 20, "span": [0, 1], "__ref_s3_data": null}], "text": "4", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.84030151367188, 28.01824951171875, 328.7253723144531, 37.3697509765625], "page": 20, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.9996337890625, 638.906982421875, 544.3033447265625, 721.3639526367188], "page": 20, "span": [0, 589], "__ref_s3_data": null}], "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.4480209350586, 606.2725830078125, 301.4690246582031, 619.7714233398438], "page": 20, "span": [0, 37], "__ref_s3_data": null}], "text": "1.3.1 Existing row and column control", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.77957153320312, 534.8919677734375, 541.5673828125, 593.479248046875], "page": 20, "span": [0, 377], "__ref_s3_data": null}], "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9119110107422, 477.10101318359375, 547.4407958984375, 523.368896484375], "page": 20, "span": [0, 340], "__ref_s3_data": null}], "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0379638671875, 430.80120849609375, 547.232666015625, 465.39056396484375], "page": 20, "span": [0, 247], "__ref_s3_data": null}], "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.23910522460938, 91.83807373046875, 317.073486328125, 101.11260986328125], "page": 20, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 1-2 Existing row and column controls", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/18"}, {"prov": [{"bbox": [64.52648162841797, 708.67724609375, 394.39227294921875, 721.6258544921875], "page": 21, "span": [0, 49], "__ref_s3_data": null}], "text": "1.3.2 New controls: Row and Column Access Control", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.02708435058594, 648.8173828125, 539.9359130859375, 695.4644165039062], "page": 21, "span": [0, 270], "__ref_s3_data": null}], "text": "Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC).", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.92579650878906, 566.8125, 542.2587280273438, 637.4297485351562], "page": 21, "span": [0, 514], "__ref_s3_data": null}], "text": "The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [328.2296447753906, 27.9176025390625, 529.1063232421875, 37.23065185546875], "page": 21, "span": [0, 47], "__ref_s3_data": null}], "text": "Chapter 1. Securing and protecting IBM DB2 data", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [541.1834716796875, 27.93828010559082, 547.2176513671875, 37.7110595703125], "page": 21, "span": [0, 1], "__ref_s3_data": null}], "text": "5", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.46890258789062, 27.93828010559082, 72.8219985961914, 37.845947265625], "page": 22, "span": [0, 1], "__ref_s3_data": null}], "text": "6", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.84030151367188, 27.92205810546875, 328.78973388671875, 37.47662353515625], "page": 22, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/19"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 23, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 2.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 698.85400390625], "page": 23, "span": [0, 1], "__ref_s3_data": null}], "text": "2", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 512.5958862304688, 515.1311645507812, 538.9207763671875], "page": 23, "span": [0, 30], "__ref_s3_data": null}], "text": "Roles and separation of duties", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.93650817871094, 440.9854431152344, 547.3323974609375, 475.45037841796875], "page": 23, "span": [0, 266], "__ref_s3_data": null}], "text": "One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.88510131835938, 383.07965087890625, 547.2574462890625, 429.3551330566406], "page": 23, "span": [0, 290], "__ref_s3_data": null}], "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7690887451172, 349.0602722167969, 547.2655029296875, 371.40936279296875], "page": 23, "span": [0, 115], "__ref_s3_data": null}], "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8439483642578, 332.0804748535156, 176.71270751953125, 342.1582946777344], "page": 23, "span": [0, 21], "__ref_s3_data": null}], "text": "- GLYPH Roles", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7147674560547, 319.5862121582031, 239.9706268310547, 329.8328552246094], "page": 23, "span": [0, 36], "__ref_s3_data": null}], "text": "- GLYPH Separation of duties", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.7032470703125, 27.83447265625, 257.24334716796875, 37.3309326171875], "page": 23, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [540.8427734375, 27.93828010559082, 547.2176513671875, 37.8079833984375], "page": 23, "span": [0, 1], "__ref_s3_data": null}], "text": "7", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.00420379638672, 702.8963012695312, 139.42576599121094, 718.5374755859375], "page": 24, "span": [0, 9], "__ref_s3_data": null}], "text": "2.1 Roles", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.84288024902344, 615.6285400390625, 547.2965087890625, 686.0313720703125], "page": 24, "span": [0, 543], "__ref_s3_data": null}], "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization's requirements for limiting access to data or separation of duties.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.82821655273438, 569.6303100585938, 547.2587890625, 604.0189819335938], "page": 24, "span": [0, 282], "__ref_s3_data": null}], "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.2572479248047, 536.1390380859375, 547.3123779296875, 557.9967651367188], "page": 24, "span": [0, 95], "__ref_s3_data": null}], "text": "Roles are divided among the following DB2 functions and their corresponding function usage IDs:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.83023071289062, 519.1592407226562, 474.0260009765625, 529.70947265625], "page": 24, "span": [0, 77], "__ref_s3_data": null}], "text": "- GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.586669921875, 507.1470642089844, 376.04473876953125, 517.5133056640625], "page": 24, "span": [0, 62], "__ref_s3_data": null}], "text": "- GLYPH Toolbox application server access: QIBM_DB_ZDA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.70936584472656, 495.15960693359375, 391.5639953613281, 505.62322998046875], "page": 24, "span": [0, 63], "__ref_s3_data": null}], "text": "- GLYPH Database Administrator function: QIBM_DB_SQLADM", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.47157287597656, 483.1597900390625, 384.0774841308594, 493.7165832519531], "page": 24, "span": [0, 61], "__ref_s3_data": null}], "text": "- GLYPH Database Information function: QIBM_DB_SYSMON", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6302947998047, 471.05413818359375, 385.5570983886719, 481.74273681640625], "page": 24, "span": [0, 63], "__ref_s3_data": null}], "text": "- GLYPH Security Administrator function: QIBM_DB_SECADM", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.82975387573242, 438.3501281738281, 501.0556335449219, 451.798095703125], "page": 24, "span": [0, 61], "__ref_s3_data": null}], "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.88975524902344, 366.8034362792969, 547.2295532226562, 425.7085266113281], "page": 24, "span": [0, 392], "__ref_s3_data": null}], "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7061767578125, 333.08551025390625, 534.9490356445312, 355.357421875], "page": 24, "span": [0, 121], "__ref_s3_data": null}], "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.88609313964844, 300.5189514160156, 413.2720031738281, 313.75762939453125], "page": 24, "span": [0, 52], "__ref_s3_data": null}], "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.62423706054688, 229.11941528320312, 543.151123046875, 287.4773864746094], "page": 24, "span": [0, 350], "__ref_s3_data": null}], "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.72520446777344, 170.85626220703125, 546.2078247070312, 217.471435546875], "page": 24, "span": [0, 289], "__ref_s3_data": null}], "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.83445739746094, 137.03271484375, 534.9490966796875, 159.5340576171875], "page": 24, "span": [0, 121], "__ref_s3_data": null}], "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.24457550048828, 27.93828010559082, 72.8219985961914, 37.793212890625], "page": 24, "span": [0, 1], "__ref_s3_data": null}], "text": "8", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.8071517944336, 28.02972412109375, 328.7253723144531, 37.302001953125], "page": 24, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.0216293334961, 708.67724609375, 433.47052001953125, 721.53125], "page": 25, "span": [0, 53], "__ref_s3_data": null}], "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.77142333984375, 636.6917114257812, 547.0184326171875, 695.2532958984375], "page": 25, "span": [0, 363], "__ref_s3_data": null}], "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.78330993652344, 591.0904541015625, 547.3245239257812, 625.3063354492188], "page": 25, "span": [0, 274], "__ref_s3_data": null}], "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.86964416503906, 532.985595703125, 541.2985229492188, 579.1475830078125], "page": 25, "span": [0, 352], "__ref_s3_data": null}], "text": "To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.13877868652344, 505.5359802246094, 392.7084045410156, 517.5679931640625], "page": 25, "span": [0, 38], "__ref_s3_data": null}], "text": "Granting QIBM_DB_SQLADM function usage", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1097412109375, 480.2784729003906, 532.0657348632812, 502.6596374511719], "page": 25, "span": [0, 132], "__ref_s3_data": null}], "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.01083374023438, 447.6772766113281, 419.47637939453125, 460.90020751953125], "page": 25, "span": [0, 51], "__ref_s3_data": null}], "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8494873046875, 400.29864501953125, 547.1928100585938, 434.6439514160156], "page": 25, "span": [0, 190], "__ref_s3_data": null}], "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.19979858398438, 354.2794494628906, 547.2994384765625, 388.66790771484375], "page": 25, "span": [0, 229], "__ref_s3_data": null}], "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.31793212890625, 326.24853515625, 392.7384033203125, 338.39239501953125], "page": 25, "span": [0, 38], "__ref_s3_data": null}], "text": "Granting QIBM_DB_SYSMON function usage", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.06344604492188, 301.23870849609375, 532.0657348632812, 323.30474853515625], "page": 25, "span": [0, 129], "__ref_s3_data": null}], "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.14019775390625, 268.63739013671875, 427.0501403808594, 281.6142272949219], "page": 25, "span": [0, 53], "__ref_s3_data": null}], "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.73634338378906, 209.25897216796875, 538.3322143554688, 255.36358642578125], "page": 25, "span": [0, 290], "__ref_s3_data": null}], "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.88818359375, 139.040283203125, 547.2896118164062, 197.62176513671875], "page": 25, "span": [0, 380], "__ref_s3_data": null}], "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.17408752441406, 111.33062744140625, 392.72161865234375, 123.54425048828125], "page": 25, "span": [0, 38], "__ref_s3_data": null}], "text": "Granting QIBM_DB_SECADM function usage", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1047821044922, 85.6243896484375, 460.46807861328125, 108.106201171875], "page": 25, "span": [0, 117], "__ref_s3_data": null}], "text": "Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [360.4371643066406, 27.8848876953125, 529.1567993164062, 37.116455078125], "page": 25, "span": [0, 41], "__ref_s3_data": null}], "text": "Chapter 2. Roles and separation of duties", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [540.8857421875, 27.93828010559082, 547.2386474609375, 37.69683837890625], "page": 25, "span": [0, 1], "__ref_s3_data": null}], "text": "9", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.09011840820312, 708.0057373046875, 335.4955139160156, 721.8206787109375], "page": 26, "span": [0, 38], "__ref_s3_data": null}], "text": "2.1.6 Change Function Usage CL command", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.83584594726562, 684.7753295898438, 547.284423828125, 695.3712768554688], "page": 26, "span": [0, 90], "__ref_s3_data": null}], "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6907196044922, 667.4461669921875, 301.5174865722656, 678.259765625], "page": 26, "span": [0, 49], "__ref_s3_data": null}], "text": "- GLYPH Work Function Usage ( WRKFCNUSG )", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7242889404297, 655.3120727539062, 313.39776611328125, 666.0692138671875], "page": 26, "span": [0, 51], "__ref_s3_data": null}], "text": "- GLYPH Change Function Usage ( CHGFCNUSG )", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.71124267578125, 643.400390625, 310.8171081542969, 654.0370483398438], "page": 26, "span": [0, 52], "__ref_s3_data": null}], "text": "- GLYPH Display Function Usage ( DSPFCNUSG )", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.30247497558594, 610.2994995117188, 512.5380249023438, 632.781494140625], "page": 26, "span": [0, 126], "__ref_s3_data": null}], "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3306427001953, 593.1199951171875, 441.59686279296875, 604.0092163085938], "page": 26, "span": [0, 61], "__ref_s3_data": null}], "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.9356689453125, 559.875732421875, 544.4754638671875, 573.8617553710938], "page": 26, "span": [0, 72], "__ref_s3_data": null}], "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.84828186035156, 525.2785034179688, 519.5179443359375, 547.4229736328125], "page": 26, "span": [0, 130], "__ref_s3_data": null}], "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 504.11700439453125, 284.9328308105469, 513.490478515625], "page": 26, "span": [0, 29], "__ref_s3_data": null}], "text": "Table 2-1 FUNCTION_USAGE view", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/3"}, {"prov": [{"bbox": [135.81077575683594, 318.2784729003906, 547.2803955078125, 340.671142578125], "page": 26, "span": [0, 112], "__ref_s3_data": null}], "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.28225708007812, 296.11798095703125, 462.98095703125, 306.23565673828125], "page": 26, "span": [0, 74], "__ref_s3_data": null}], "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 207.56837463378906, 331.67730712890625, 288.34197998046875], "page": 26, "span": [0, 122], "__ref_s3_data": null}], "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.18024444580078, 156.3486328125, 249.59605407714844, 172.6075439453125], "page": 26, "span": [0, 24], "__ref_s3_data": null}], "text": "2.2 Separation of duties", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1588592529297, 81.817626953125, 547.2234497070312, 140.1129150390625], "page": 26, "span": [0, 463], "__ref_s3_data": null}], "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.4488525390625, 27.93828010559082, 78.4020004272461, 37.581298828125], "page": 26, "span": [0, 2], "__ref_s3_data": null}], "text": "10", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.35774993896484, 28.04144287109375, 334.4214172363281, 37.31072998046875], "page": 26, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.92747497558594, 650.9638671875, 542.6943359375, 721.3446044921875], "page": 27, "span": [0, 516], "__ref_s3_data": null}], "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.04833984375, 593.2598266601562, 547.303955078125, 639.4869384765625], "page": 27, "span": [0, 285], "__ref_s3_data": null}], "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.00685119628906, 558.9195556640625, 538.6507568359375, 581.5885009765625], "page": 27, "span": [0, 129], "__ref_s3_data": null}], "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.68702697753906, 513.281005859375, 545.7960205078125, 547.4618530273438], "page": 27, "span": [0, 204], "__ref_s3_data": null}], "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.86065673828125, 455.2619934082031, 539.80712890625, 501.3948669433594], "page": 27, "span": [0, 285], "__ref_s3_data": null}], "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7205352783203, 421.3023681640625, 543.067138671875, 443.39068603515625], "page": 27, "span": [0, 136], "__ref_s3_data": null}], "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.80000305175781, 399.74505615234375, 392.4624328613281, 409.4712829589844], "page": 27, "span": [0, 78], "__ref_s3_data": null}], "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/4"}, {"prov": [{"bbox": [354.4815673828125, 27.89447021484375, 523.5407104492188, 37.05841064453125], "page": 27, "span": [0, 41], "__ref_s3_data": null}], "text": "Chapter 2. Roles and separation of duties", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [536.0808715820312, 27.93828010559082, 547.2591552734375, 37.7674560546875], "page": 27, "span": [0, 2], "__ref_s3_data": null}], "text": "11", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/5"}, {"prov": [{"bbox": [64.58246612548828, 27.93828010559082, 78.4020004272461, 37.58502197265625], "page": 28, "span": [0, 2], "__ref_s3_data": null}], "text": "12", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.4140625, 27.99273681640625, 334.4214172363281, 37.4124755859375], "page": 28, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/20"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 29, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 3.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 698.8939819335938], "page": 29, "span": [0, 1], "__ref_s3_data": null}], "text": "3", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 513.0821533203125, 546.0291748046875, 539.2265014648438], "page": 29, "span": [0, 29], "__ref_s3_data": null}], "text": "Row and Column Access Control", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7134552001953, 453.0984802246094, 536.1522827148438, 475.3383483886719], "page": 29, "span": [0, 133], "__ref_s3_data": null}], "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.12974548339844, 431.07891845703125, 347.4121398925781, 441.3373107910156], "page": 29, "span": [0, 49], "__ref_s3_data": null}], "text": "The following topics are covered in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.65553283691406, 413.7755432128906, 397.1086730957031, 424.01177978515625], "page": 29, "span": [0, 69], "__ref_s3_data": null}], "text": "- GLYPH Explanation of RCAC and the concept of access control", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7020721435547, 401.86920166015625, 348.458984375, 411.87139892578125], "page": 29, "span": [0, 63], "__ref_s3_data": null}], "text": "- GLYPH Special registers and built-in global variables", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.77047729492188, 389.711669921875, 327.0360107421875, 400.1288146972656], "page": 29, "span": [0, 46], "__ref_s3_data": null}], "text": "- GLYPH VERIFY_GROUP_FOR_USER function", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8464813232422, 377.66046142578125, 454.0877990722656, 387.9523010253906], "page": 29, "span": [0, 86], "__ref_s3_data": null}], "text": "- GLYPH Establishing and controlling accessibility by using the RCAC rule text", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.77333068847656, 365.84466552734375, 385.73236083984375, 376.19525146484375], "page": 29, "span": [0, 61], "__ref_s3_data": null}], "text": "- GLYPH SELECT, INSERT, and UPDATE behavior with RCAC", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60595703125, 354.0252990722656, 270.3636169433594, 363.9985046386719], "page": 29, "span": [0, 39], "__ref_s3_data": null}], "text": "- GLYPH Human resources example", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.7396240234375, 27.91595458984375, 257.24334716796875, 37.2548828125], "page": 29, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.8259887695312, 27.93828010559082, 547.2591552734375, 37.642333984375], "page": 29, "span": [0, 2], "__ref_s3_data": null}], "text": "13", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.3137435913086, 702.7252807617188, 518.7757568359375, 718.4672241210938], "page": 30, "span": [0, 57], "__ref_s3_data": null}], "text": "3.1 Explanation of RCAC and the concept of access control", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.03993225097656, 639.732177734375, 547.24267578125, 685.975341796875], "page": 30, "span": [0, 340], "__ref_s3_data": null}], "text": "RCAC limits data access to those users who have a business \"need to know\". RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called \"IBM Advanced Data Security for i\", also known as option 47 of IBM i 7.2.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.07485961914062, 605.9139404296875, 505.92376708984375, 628.0799560546875], "page": 30, "span": [0, 141], "__ref_s3_data": null}], "text": "In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7504425048828, 589.1548461914062, 227.34536743164062, 599.06494140625], "page": 30, "span": [0, 31], "__ref_s3_data": null}], "text": "- GLYPH Row permissions", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5780487060547, 577.1798095703125, 217.25091552734375, 586.911865234375], "page": 30, "span": [0, 28], "__ref_s3_data": null}], "text": "- GLYPH Column masks", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8238983154297, 507.16094970703125, 547.2017822265625, 565.3846435546875], "page": 30, "span": [0, 419], "__ref_s3_data": null}], "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0462646484375, 449.1419372558594, 547.2973022460938, 495.2445983886719], "page": 30, "span": [0, 270], "__ref_s3_data": null}], "text": "Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.23114013671875, 390.89093017578125, 535.672119140625, 437.2736511230469], "page": 30, "span": [0, 331], "__ref_s3_data": null}], "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [141.94046020507812, 314.51959228515625, 541.2496337890625, 373.60089111328125], "page": 30, "span": [0, 438], "__ref_s3_data": null}], "text": "Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.24093627929688, 277.25274658203125, 383.4799499511719, 290.3779602050781], "page": 30, "span": [0, 48], "__ref_s3_data": null}], "text": "3.1.1 Row permission and column mask definitions", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.77207946777344, 253.60382080078125, 423.5354309082031, 263.9635009765625], "page": 30, "span": [0, 62], "__ref_s3_data": null}], "text": "The following sections define row permission and column masks.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.47561645507812, 226.1007080078125, 229.260009765625, 238.14508056640625], "page": 30, "span": [0, 14], "__ref_s3_data": null}], "text": "Row permission", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9830322265625, 189.069091796875, 544.5714721679688, 223.29058837890625], "page": 30, "span": [0, 261], "__ref_s3_data": null}], "text": "A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.47321319580078, 27.93828010559082, 78.4020004272461, 37.66790771484375], "page": 30, "span": [0, 2], "__ref_s3_data": null}], "text": "14", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.28377532958984, 28.06536865234375, 334.4214172363281, 37.28033447265625], "page": 30, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.73501586914062, 699.0009765625, 528.7305908203125, 721.5136108398438], "page": 31, "span": [0, 135], "__ref_s3_data": null}], "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.", "type": "caption", "name": "Caption", "font": null}, {"prov": [{"bbox": [136.3166961669922, 369.1156921386719, 342.55548095703125, 378.73248291015625], "page": 31, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 3-1 CREATE PERMISSION SQL statement", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/21"}, {"prov": [{"bbox": [136.24984741210938, 340.95599365234375, 215.88082885742188, 353.2656555175781], "page": 31, "span": [0, 11], "__ref_s3_data": null}], "text": "Column mask", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.803466796875, 291.6988525390625, 542.7664794921875, 338.0789489746094], "page": 31, "span": [0, 297], "__ref_s3_data": null}], "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [344.5666809082031, 27.9176025390625, 523.6016235351562, 37.281982421875], "page": 31, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [536.0999755859375, 27.93828010559082, 547.2591552734375, 37.689697265625], "page": 31, "span": [0, 2], "__ref_s3_data": null}], "text": "15", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.44506072998047, 27.93828010559082, 78.4020004272461, 37.52349853515625], "page": 32, "span": [0, 2], "__ref_s3_data": null}], "text": "16", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31855010986328, 28.0611572265625, 334.4214172363281, 37.286865234375], "page": 32, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.0411376953125, 687.2786865234375, 546.5693359375, 721.397216796875], "page": 32, "span": [0, 221], "__ref_s3_data": null}], "text": "Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.94520568847656, 365.6970520019531, 311.8898620605469, 375.34112548828125], "page": 32, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 3-2 CREATE MASK SQL statement", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/22"}, {"prov": [{"bbox": [64.21709442138672, 332.696044921875, 286.7970275878906, 346.41973876953125], "page": 32, "span": [0, 34], "__ref_s3_data": null}], "text": "3.1.2 Enabling and activating RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.47596740722656, 285.6659240722656, 547.1828002929688, 320.0126953125], "page": 32, "span": [0, 184], "__ref_s3_data": null}], "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.03172302246094, 168.1006622314453, 547.2286376953125, 274.14324951171875], "page": 32, "span": [0, 734], "__ref_s3_data": null}], "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.643798828125, 128.0260009765625, 531.8515625, 150.07513427734375], "page": 32, "span": [0, 120], "__ref_s3_data": null}], "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7609405517578, 432.6983947753906, 415.2347106933594, 442.0717468261719], "page": 33, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/23"}, {"prov": [{"bbox": [135.8385467529297, 357.935546875, 547.2994995117188, 416.132568359375], "page": 33, "span": [0, 433], "__ref_s3_data": null}], "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.42935180664062, 317.7235412597656, 531.8515625, 339.9495849609375], "page": 33, "span": [0, 120], "__ref_s3_data": null}], "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.1680145263672, 57.78338623046875, 306.3438720703125, 67.37353515625], "page": 33, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 3-4 ALTER TABLE SQL statement", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/24"}, {"prov": [{"bbox": [344.607666015625, 27.84613037109375, 523.6016235351562, 37.34271240234375], "page": 33, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [536.0054321289062, 27.93828010559082, 547.2591552734375, 37.726806640625], "page": 33, "span": [0, 2], "__ref_s3_data": null}], "text": "17", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.41429901123047, 27.93828010559082, 78.4020004272461, 37.559326171875], "page": 34, "span": [0, 2], "__ref_s3_data": null}], "text": "18", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.24517059326172, 28.119140625, 334.4214172363281, 37.31939697265625], "page": 34, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.7600555419922, 638.812744140625, 547.273681640625, 721.2564086914062], "page": 34, "span": [0, 566], "__ref_s3_data": null}], "text": "When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.96725463867188, 580.7529296875, 547.2686157226562, 627.3378295898438], "page": 34, "span": [0, 378], "__ref_s3_data": null}], "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user's ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.8000030517578, 541.2984619140625, 537.4868774414062, 563.395263671875], "page": 34, "span": [0, 97], "__ref_s3_data": null}], "text": "Note: If a user does not have permission to access the row, the column mask logic is not invoked.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.29631042480469, 492.2038269042969, 438.7572021484375, 508.64190673828125], "page": 34, "span": [0, 51], "__ref_s3_data": null}], "text": "3.2 Special registers and built-in global variables", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.81504821777344, 454.2984619140625, 525.5018920898438, 476.6042175292969], "page": 34, "span": [0, 105], "__ref_s3_data": null}], "text": "This section describes how you can use special registers and built-in global variables to implement RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.23223114013672, 421.0963134765625, 204.5852813720703, 434.255126953125], "page": 34, "span": [0, 23], "__ref_s3_data": null}], "text": "3.2.1 Special registers", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.89915466308594, 373.8841552734375, 547.1063842773438, 407.9602355957031], "page": 34, "span": [0, 261], "__ref_s3_data": null}], "text": "A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.08819580078125, 316.2984619140625, 544.5763549804688, 362.5604553222656], "page": 34, "span": [0, 323], "__ref_s3_data": null}], "text": "IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6575927734375, 274.9290771484375, 546.981201171875, 309.4291076660156], "page": 34, "span": [0, 239], "__ref_s3_data": null}], "text": "- GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.68878173828125, 246.278564453125, 522.5455932617188, 268.813232421875], "page": 34, "span": [0, 110], "__ref_s3_data": null}], "text": "- GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.3015594482422, 157.072021484375, 547.2483520507812, 239.44622802734375], "page": 34, "span": [0, 594], "__ref_s3_data": null}], "text": "- GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller's or the owner's user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner's authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.51412963867188, 91.47637939453125, 547.2650756835938, 150.1607666015625], "page": 34, "span": [0, 422], "__ref_s3_data": null}], "text": "- GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.05694580078125, 57.78228759765625, 547.2014770507812, 79.99713134765625], "page": 34, "span": [0, 121], "__ref_s3_data": null}], "text": "In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.82176208496094, 711.1845703125, 412.20758056640625, 721.317138671875], "page": 35, "span": [0, 62], "__ref_s3_data": null}], "text": "Table 3-1 summarizes these special registers and their values.", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 690.0601806640625, 372.7710876464844, 699.2779541015625], "page": 35, "span": [0, 58], "__ref_s3_data": null}], "text": "Table 3-1 Special registers and their corresponding values", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/6"}, {"prov": [{"bbox": [136.3730926513672, 556.2984619140625, 538.493896484375, 578.6343383789062], "page": 35, "span": [0, 97], "__ref_s3_data": null}], "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.5663299560547, 539.2213134765625, 411.36138916015625, 549.454345703125], "page": 35, "span": [0, 75], "__ref_s3_data": null}], "text": "- GLYPH A user connects to the server using the user profile ALICE.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5452880859375, 522.2791137695312, 453.2580871582031, 532.7073974609375], "page": 35, "span": [0, 77], "__ref_s3_data": null}], "text": "- GLYPH USER and CURRENT USER initially have the same value of ALICE.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.3970947265625, 493.01019287109375, 541.4498291015625, 515.4821166992188], "page": 35, "span": [0, 160], "__ref_s3_data": null}], "text": "- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5677947998047, 451.4921875, 547.2167358398438, 486.18145751953125], "page": 35, "span": [0, 253], "__ref_s3_data": null}], "text": "- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.56973266601562, 423.0643615722656, 547.3540649414062, 445.5053405761719], "page": 35, "span": [0, 133], "__ref_s3_data": null}], "text": "- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.22442626953125, 186.25537109375, 342.349853515625, 195.81939697265625], "page": 35, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 3-5 Special registers and adopted authority", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/25"}, {"prov": [{"bbox": [64.079833984375, 154.15521240234375, 247.02536010742188, 167.67864990234375], "page": 35, "span": [0, 31], "__ref_s3_data": null}], "text": "3.2.2 Built-in global variables", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.3346710205078, 119.0784683227539, 518.0011596679688, 141.24090576171875], "page": 35, "span": [0, 161], "__ref_s3_data": null}], "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.17970275878906, 72.93243408203125, 532.3385009765625, 107.37139892578125], "page": 35, "span": [0, 233], "__ref_s3_data": null}], "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [344.5751037597656, 27.93109130859375, 523.6016235351562, 37.29559326171875], "page": 35, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [536.0416870117188, 27.93828010559082, 547.2591552734375, 37.7122802734375], "page": 35, "span": [0, 2], "__ref_s3_data": null}], "text": "19", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.85088348388672, 27.93828010559082, 78.4020004272461, 37.62542724609375], "page": 36, "span": [0, 2], "__ref_s3_data": null}], "text": "20", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31550598144531, 28.02935791015625, 334.4214172363281, 37.3028564453125], "page": 36, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.74647521972656, 711.1533813476562, 342.5477294921875, 721.3251953125], "page": 36, "span": [0, 51], "__ref_s3_data": null}], "text": "Table 3-2 lists the nine built-in global variables.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.80000305175781, 690.177001953125, 201.82247924804688, 699.1653442382812], "page": 36, "span": [0, 35], "__ref_s3_data": null}], "text": "Table 3-2 Built-in global variables", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/7"}, {"prov": [{"bbox": [64.34713745117188, 455.0362854003906, 384.3638916015625, 471.380859375], "page": 36, "span": [0, 34], "__ref_s3_data": null}], "text": "3.3 VERIFY_GROUP_FOR_USER function", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8567352294922, 355.704833984375, 547.2347412109375, 438.1376037597656], "page": 36, "span": [0, 576], "__ref_s3_data": null}], "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.01950073242188, 310.2999572753906, 547.2573852539062, 344.5970458984375], "page": 36, "span": [0, 235], "__ref_s3_data": null}], "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.42428588867188, 288.2803955078125, 458.44525146484375, 298.8746337890625], "page": 36, "span": [0, 63], "__ref_s3_data": null}], "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.80001831054688, 271.2408142089844, 406.0775146484375, 281.4947204589844], "page": 36, "span": [0, 57], "__ref_s3_data": null}], "text": "- 1. There are user profiles for MGR, JANE, JUDY, and TONY.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8521728515625, 253.80572509765625, 396.9881591796875, 264.1617431640625], "page": 36, "span": [0, 58], "__ref_s3_data": null}], "text": "- 2. The user profile JANE specifies a group profile of MGR.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.08595275878906, 225.28138732910156, 536.568603515625, 247.357666015625], "page": 36, "span": [0, 127], "__ref_s3_data": null}], "text": "- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [149.8811798095703, 150.09063720703125, 451.01605224609375, 217.68408203125], "page": 36, "span": [0, 265], "__ref_s3_data": null}], "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.577880859375, 687.0557861328125, 512.90087890625, 721.906005859375], "page": 37, "span": [0, 74], "__ref_s3_data": null}], "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.82391357421875, 636.2785034179688, 544.9019775390625, 670.6641235351562], "page": 37, "span": [0, 230], "__ref_s3_data": null}], "text": "When defining a row permission or column mask, the \"magic\" of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.99398803710938, 577.9219970703125, 545.6567993164062, 623.8250732421875], "page": 37, "span": [0, 359], "__ref_s3_data": null}], "text": "In the case of a row permission, the rule text is the \"test\" of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.151123046875, 532.300048828125, 537.8551025390625, 566.5162353515625], "page": 37, "span": [0, 196], "__ref_s3_data": null}], "text": "In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.31472778320312, 498.2806396484375, 547.2691040039062, 520.593505859375], "page": 37, "span": [0, 117], "__ref_s3_data": null}], "text": "For a simple example of implementing row permissions and column masks, see 3.6, \"Human resources example\" on page 22.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.01747131347656, 464.0989074707031, 545.9476928710938, 485.85302734375], "page": 37, "span": [0, 185], "__ref_s3_data": null}], "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0785675048828, 381.9795227050781, 547.2494506835938, 452.537353515625], "page": 37, "span": [0, 504], "__ref_s3_data": null}], "text": "For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.35562133789062, 348.2829895019531, 542.0492553710938, 370.6085205078125], "page": 37, "span": [0, 127], "__ref_s3_data": null}], "text": "For more information about what is permitted, see the \"Database programming\" topic of the IBM i 7.2 Knowledge Center, found at:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.1328582763672, 319.5921936035156, 546.5352172851562, 341.0989990234375], "page": 37, "span": [0, 86], "__ref_s3_data": null}], "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.92572021484375, 237.0828857421875, 547.0272216796875, 307.27325439453125], "page": 37, "span": [0, 546], "__ref_s3_data": null}], "text": "One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user's identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.01707458496094, 154.92767333984375, 547.3748779296875, 225.0654296875], "page": 37, "span": [0, 538], "__ref_s3_data": null}], "text": "More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3708953857422, 133.6683349609375, 355.12689208984375, 143.520263671875], "page": 37, "span": [0, 53], "__ref_s3_data": null}], "text": "Example 3-1 Subquery that is used as part of the rule", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [226.1187744140625, 104.54730987548828, 331.77557373046875, 113.84539794921875], "page": 37, "span": [0, 13], "__ref_s3_data": null}], "text": "DATE_MASTER D", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [222.19522094726562, 91.81817626953125, 371.6368408203125, 102.1473388671875], "page": 37, "span": [0, 21], "__ref_s3_data": null}], "text": "D.BUSINESS_DAY = 'Y')", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [344.57867431640625, 27.9051513671875, 523.6016235351562, 37.25799560546875], "page": 37, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.7230834960938, 27.93828010559082, 547.2591552734375, 37.71142578125], "page": 37, "span": [0, 2], "__ref_s3_data": null}], "text": "21", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.8000030517578, 92.54750061035156, 316.67755126953125, 125.3218765258789], "page": 37, "span": [0, 45], "__ref_s3_data": null}], "text": "CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.83726119995117, 27.93828010559082, 78.4020004272461, 37.62664794921875], "page": 38, "span": [0, 2], "__ref_s3_data": null}], "text": "22", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.2356185913086, 28.12286376953125, 334.4214172363281, 37.29510498046875], "page": 38, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.83892822265625, 615.0796508789062, 547.2915649414062, 721.335693359375], "page": 38, "span": [0, 763], "__ref_s3_data": null}], "text": "Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.40492248535156, 572.0363159179688, 486.3243713378906, 588.2117919921875], "page": 38, "span": [0, 49], "__ref_s3_data": null}], "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.95579528808594, 473.1294250488281, 547.2974243164062, 555.3319702148438], "page": 38, "span": [0, 566], "__ref_s3_data": null}], "text": "RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.07569885253906, 426.9944763183594, 547.1958618164062, 461.2962341308594], "page": 38, "span": [0, 275], "__ref_s3_data": null}], "text": "Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.00733947753906, 393.1242980957031, 547.2606811523438, 415.3765869140625], "page": 38, "span": [0, 138], "__ref_s3_data": null}], "text": "For more information and considerations about data movement in an RCAC environment, see Chapter 6, \"Additional considerations\" on page 85.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [141.89248657226562, 340.8992919921875, 541.2198486328125, 375.4718933105469], "page": 38, "span": [0, 213], "__ref_s3_data": null}], "text": "Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.5394515991211, 292.92779541015625, 298.8533935546875, 308.8202819824219], "page": 38, "span": [0, 27], "__ref_s3_data": null}], "text": "3.6 Human resources example", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.87118530273438, 206.2593536376953, 542.829345703125, 275.9976806640625], "page": 38, "span": [0, 436], "__ref_s3_data": null}], "text": "This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.85508728027344, 189.279541015625, 235.38601684570312, 199.28631591796875], "page": 38, "span": [0, 34], "__ref_s3_data": null}], "text": "- GLYPH Tax_Id information", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5828094482422, 177.224365234375, 470.03765869140625, 187.2708740234375], "page": 38, "span": [0, 87], "__ref_s3_data": null}], "text": "- GLYPH YEAR of the birth date of the employee (hiding the age of the employee)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1318817138672, 155.09783935546875, 375.29803466796875, 165.2996826171875], "page": 38, "span": [0, 57], "__ref_s3_data": null}], "text": "In this example, there are four different types of users:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.77261352539062, 138.28036499023438, 200.1146697998047, 148.36187744140625], "page": 38, "span": [0, 25], "__ref_s3_data": null}], "text": "- GLYPH Employees", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6394805908203, 126.28056335449219, 195.63865661621094, 136.5582275390625], "page": 38, "span": [0, 24], "__ref_s3_data": null}], "text": "- GLYPH Managers", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6507568359375, 114.28074645996094, 276.5639343261719, 124.7410888671875], "page": 38, "span": [0, 39], "__ref_s3_data": null}], "text": "- GLYPH Human Resources Manager", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.71376037597656, 90.28113555908203, 539.58447265625, 112.5548095703125], "page": 38, "span": [0, 144], "__ref_s3_data": null}], "text": "- GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.66419982910156, 56.261756896972656, 546.5243530273438, 78.08331298828125], "page": 38, "span": [0, 109], "__ref_s3_data": null}], "text": "The following sections describe step-by-step what is needed to be done to implement RCAC in this environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.25519561767578, 708.3052978515625, 500.5502014160156, 721.8017578125], "page": 39, "span": [0, 65], "__ref_s3_data": null}], "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7902069091797, 661.06640625, 547.2426147460938, 695.3858032226562], "page": 39, "span": [0, 228], "__ref_s3_data": null}], "text": "The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, \"Security Administrator function: QIBM_DB_SECADM\" on page 9). Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 619.9440307617188, 510.97723388671875, 654.0445556640625], "page": 39, "span": [0, 161], "__ref_s3_data": null}], "text": "- 1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.3125762939453, 598.7147827148438, 358.5176696777344, 608.8530883789062], "page": 39, "span": [0, 50], "__ref_s3_data": null}], "text": "Example 3-2 Function ID required to implement RCAC", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 569.5473022460938, 441.59588623046875, 590.3218994140625], "page": 39, "span": [0, 121], "__ref_s3_data": null}], "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.02276611328125, 533.1458740234375, 547.2882080078125, 555.4281005859375], "page": 39, "span": [0, 163], "__ref_s3_data": null}], "text": "- 2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.46849060058594, 511.7123107910156, 460.0157775878906, 521.435302734375], "page": 39, "span": [0, 77], "__ref_s3_data": null}], "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 422.5482177734375, 346.6770935058594, 503.3218994140625], "page": 39, "span": [0, 129], "__ref_s3_data": null}], "text": "SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id ='QIBM_DB_SECADM' ORDER BY user_name;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.87002563476562, 385.96734619140625, 545.5682983398438, 408.0870361328125], "page": 39, "span": [0, 151], "__ref_s3_data": null}], "text": "- 3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.01937866210938, 314.9219970703125, 307.21844482421875, 324.9443054199219], "page": 39, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 3-6 Result of the function ID query", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [64.10499572753906, 282.97650146484375, 418.56524658203125, 296.5173034667969], "page": 39, "span": [0, 59], "__ref_s3_data": null}], "text": "3.6.2 Creating group profiles for the users and their roles", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9925994873047, 247.64495849609375, 532.9351806640625, 270.00384521484375], "page": 39, "span": [0, 154], "__ref_s3_data": null}], "text": "Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 230.29901123046875, 357.9049987792969, 240.49017333984375], "page": 39, "span": [0, 51], "__ref_s3_data": null}], "text": "- 1. In this example, there are three group profiles:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.3660430908203, 213.640380859375, 313.8529357910156, 224.04693603515625], "page": 39, "span": [0, 30], "__ref_s3_data": null}], "text": "- -HR (Human Resource personnel)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.38209533691406, 201.1751708984375, 242.8311767578125, 211.79541015625], "page": 39, "span": [0, 15], "__ref_s3_data": null}], "text": "- -MGR (Managers)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.16091918945312, 189.66497802734375, 245.60702514648438, 199.9373779296875], "page": 39, "span": [0, 16], "__ref_s3_data": null}], "text": "- -EMP (Employees)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.5602569580078, 160.22564697265625, 547.29541015625, 182.7015380859375], "page": 39, "span": [0, 174], "__ref_s3_data": null}], "text": "These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.35838317871094, 138.73602294921875, 285.8739318847656, 148.7242431640625], "page": 39, "span": [0, 35], "__ref_s3_data": null}], "text": "Example 3-4 Creating group profiles", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 98.0676040649414, 441.59588623046875, 130.84197998046875], "page": 39, "span": [0, 174], "__ref_s3_data": null}], "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [344.5692443847656, 27.8846435546875, 523.6016235351562, 37.2572021484375], "page": 39, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6176147460938, 27.93828010559082, 547.2591552734375, 37.63116455078125], "page": 39, "span": [0, 2], "__ref_s3_data": null}], "text": "23", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.88653564453125, 27.93828010559082, 78.4020004272461, 37.68133544921875], "page": 40, "span": [0, 2], "__ref_s3_data": null}], "text": "24", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.27753448486328, 28.0159912109375, 334.4214172363281, 37.33148193359375], "page": 40, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.0978240966797, 674.9645385742188, 547.2675170898438, 721.5997314453125], "page": 40, "span": [0, 308], "__ref_s3_data": null}], "text": "- 2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [156.851318359375, 646.6730346679688, 533.43896484375, 657.3757934570312], "page": 40, "span": [0, 81], "__ref_s3_data": null}], "text": "Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.17131805419922, 609.3201293945312, 360.1609802246094, 623.2008056640625], "page": 40, "span": [0, 44], "__ref_s3_data": null}], "text": "3.6.3 Demonstrating data access without RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1033477783203, 574.2984619140625, 540.3065185546875, 596.827392578125], "page": 40, "span": [0, 127], "__ref_s3_data": null}], "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.76841735839844, 545.2590942382812, 547.2156982421875, 567.540771484375], "page": 40, "span": [0, 124], "__ref_s3_data": null}], "text": "- 1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.413330078125, 523.678955078125, 334.6294250488281, 533.3753662109375], "page": 40, "span": [0, 44], "__ref_s3_data": null}], "text": "Example 3-5 Counting the number of employees", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.42640686035156, 505.2223815917969, 406.6163635253906, 516.35400390625], "page": 40, "span": [0, 54], "__ref_s3_data": null}], "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [150.4588623046875, 469.52520751953125, 545.1071166992188, 492.0571594238281], "page": 40, "span": [0, 103], "__ref_s3_data": null}], "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of the company.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.30203247070312, 407.2127990722656, 272.9559326171875, 416.7283630371094], "page": 40, "span": [0, 30], "__ref_s3_data": null}], "text": "Figure 3-7 Number of employees", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/26"}, {"prov": [{"bbox": [136.12722778320312, 368.23193359375, 547.2517700195312, 390.7404479980469], "page": 40, "span": [0, 160], "__ref_s3_data": null}], "text": "- 2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.4648895263672, 347.0237731933594, 369.71875, 356.55615234375], "page": 40, "span": [0, 55], "__ref_s3_data": null}], "text": "Example 3-6 Displaying the information of the Employees", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 245.90841674804688, 286.67803955078125, 338.681884765625], "page": 40, "span": [0, 124], "__ref_s3_data": null}], "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [150.51434326171875, 710.7474365234375, 356.252197265625, 721.2857666015625], "page": 41, "span": [0, 48], "__ref_s3_data": null}], "text": "The result of this query is shown in Figure 3-8.", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [64.24310302734375, 312.0570068359375, 276.3370361328125, 321.3759460449219], "page": 41, "span": [0, 49], "__ref_s3_data": null}], "text": "Figure 3-8 List of employees without RCAC enabled", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [64.31729888916016, 278.92535400390625, 339.9589538574219, 292.3377685546875], "page": 41, "span": [0, 43], "__ref_s3_data": null}], "text": "3.6.4 Defining and creating row permissions", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.47174072265625, 255.93072509765625, 484.33428955078125, 265.88421630859375], "page": 41, "span": [0, 72], "__ref_s3_data": null}], "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.80001831054688, 226.7816162109375, 519.3287963867188, 249.22784423828125], "page": 41, "span": [0, 104], "__ref_s3_data": null}], "text": "- 1. Start by defining a row permission. In this example, the rules to enforce include the following ones:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.23526000976562, 209.737060546875, 392.5151062011719, 219.894287109375], "page": 41, "span": [0, 48], "__ref_s3_data": null}], "text": "- -Human Resources employees can see all the rows.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.32948303222656, 197.8070068359375, 484.94476318359375, 207.68096923828125], "page": 41, "span": [0, 70], "__ref_s3_data": null}], "text": "- -Managers can see only information for the employees that they manage.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.46128845214844, 185.70257568359375, 371.5732421875, 195.94891357421875], "page": 41, "span": [0, 46], "__ref_s3_data": null}], "text": "- -Employees can see only their own information.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.29678344726562, 173.96624755859375, 415.18304443359375, 183.808837890625], "page": 41, "span": [0, 58], "__ref_s3_data": null}], "text": "- -Consultants are not allowed to see any rows in the table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [344.6938781738281, 27.9832763671875, 523.6016235351562, 37.16973876953125], "page": 41, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.7025146484375, 27.93828010559082, 547.2591552734375, 37.624755859375], "page": 41, "span": [0, 2], "__ref_s3_data": null}], "text": "25", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.85331726074219, 27.93828010559082, 78.4020004272461, 37.61859130859375], "page": 42, "span": [0, 2], "__ref_s3_data": null}], "text": "26", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.32594299316406, 28.073486328125, 334.4214172363281, 37.32861328125], "page": 42, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [150.2159423828125, 710.8866577148438, 538.560302734375, 721.3442993164062], "page": 42, "span": [0, 85], "__ref_s3_data": null}], "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3914031982422, 689.8576049804688, 383.7792053222656, 699.560791015625], "page": 42, "span": [0, 56], "__ref_s3_data": null}], "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [134.622802734375, 547.480224609375, 547.7505493164062, 686.9898681640625], "page": 42, "span": [0, 438], "__ref_s3_data": null}], "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [135.9988250732422, 504.1722717285156, 539.8582153320312, 538.8099365234375], "page": 42, "span": [0, 212], "__ref_s3_data": null}], "text": "- 2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, \"Enabling and activating RCAC\" on page 16.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.43289947509766, 291.20758056640625, 331.18115234375, 300.5486755371094], "page": 42, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/27"}, {"prov": [{"bbox": [64.18317413330078, 258.0186767578125, 327.4058837890625, 271.5654296875], "page": 42, "span": [0, 40], "__ref_s3_data": null}], "text": "3.6.5 Defining and creating column masks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.35951232910156, 223.205078125, 526.414306640625, 245.205810546875], "page": 42, "span": [0, 96], "__ref_s3_data": null}], "text": "Define the different masks for the columns that are sensitive by completing the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.79542541503906, 194.23492431640625, 538.78564453125, 216.73974609375], "page": 42, "span": [0, 104], "__ref_s3_data": null}], "text": "- 1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.26760864257812, 177.4149169921875, 467.65625, 187.36602783203125], "page": 42, "span": [0, 67], "__ref_s3_data": null}], "text": "- -Human Resources can see the entire date of birth of the employees.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.2598114013672, 160.2803955078125, 375.3867492675781, 170.74359130859375], "page": 42, "span": [0, 48], "__ref_s3_data": null}], "text": "- -Employees can see only their own date of birth.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.43798828125, 143.18109130859375, 547.2565307617188, 153.414794921875], "page": 42, "span": [0, 83], "__ref_s3_data": null}], "text": "- -Managers can see the date of birth of their employees masked with YEAR being 9999.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.7313232421875, 126.41015625, 530.0606689453125, 136.70220947265625], "page": 42, "span": [0, 82], "__ref_s3_data": null}], "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.27670288085938, 105.1051025390625, 403.9977722167969, 114.8758544921875], "page": 42, "span": [0, 58], "__ref_s3_data": null}], "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 63.80750274658203, 416.6361083984375, 96.58187866210938], "page": 42, "span": [0, 114], "__ref_s3_data": null}], "text": "CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.79959106445312, 699.5669555664062, 166.73934936523438, 720.341552734375], "page": 43, "span": [0, 11], "__ref_s3_data": null}], "text": "RETURN CASE", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.79959106445312, 530.429443359375, 521.5742797851562, 700.2308349609375], "page": 43, "span": [0, 437], "__ref_s3_data": null}], "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [135.86044311523438, 495.22808837890625, 547.2122192382812, 517.5462646484375], "page": 43, "span": [0, 136], "__ref_s3_data": null}], "text": "- 2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.1599578857422, 478.3014831542969, 469.1528015136719, 488.6722717285156], "page": 43, "span": [0, 62], "__ref_s3_data": null}], "text": "- -Human Resources can see the unmasked TAX_ID of the employees.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.2740936279297, 461.1424560546875, 403.95953369140625, 471.45074462890625], "page": 43, "span": [0, 50], "__ref_s3_data": null}], "text": "- -Employees can see only their own unmasked TAX_ID.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.4427947998047, 432.28228759765625, 545.16845703125, 454.6841735839844], "page": 43, "span": [0, 129], "__ref_s3_data": null}], "text": "- -Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.51747131347656, 414.8310852050781, 529.463623046875, 425.3660888671875], "page": 43, "span": [0, 77], "__ref_s3_data": null}], "text": "- -Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.69093322753906, 397.82440185546875, 530.060302734375, 408.19866943359375], "page": 43, "span": [0, 82], "__ref_s3_data": null}], "text": "- To implement this column mask, run the SQL statement that is shown in Example 3-9.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.25662231445312, 376.9618835449219, 352.31475830078125, 386.553955078125], "page": 43, "span": [0, 48], "__ref_s3_data": null}], "text": "Example 3-9 Creating a mask on the TAX_ID column", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [135.95343017578125, 103.45672607421875, 535.87548828125, 373.4818115234375], "page": 43, "span": [0, 590], "__ref_s3_data": null}], "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [344.5617370605469, 27.86419677734375, 523.6016235351562, 37.32916259765625], "page": 43, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6422729492188, 27.93828010559082, 547.2591552734375, 37.82464599609375], "page": 43, "span": [0, 2], "__ref_s3_data": null}], "text": "27", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.14459228515625, 710.7732543945312, 449.952392578125, 721.3890380859375], "page": 44, "span": [0, 65], "__ref_s3_data": null}], "text": "- 3. Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.17350769042969, 610.1016235351562, 294.42578125, 619.2543334960938], "page": 44, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 3-10 Column masks shown in System i Navigator", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/28"}, {"prov": [{"bbox": [64.29059600830078, 577.004638671875, 203.98521423339844, 590.3381958007812], "page": 44, "span": [0, 21], "__ref_s3_data": null}], "text": "3.6.6 Activating RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1686553955078, 529.5360107421875, 547.2256469726562, 563.902587890625], "page": 44, "span": [0, 265], "__ref_s3_data": null}], "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.5933074951172, 513.1278076171875, 409.4788818359375, 523.4700317382812], "page": 44, "span": [0, 57], "__ref_s3_data": null}], "text": "- 1. Run the SQL statements that are shown in Example 3-10.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.31597900390625, 491.5029296875, 375.2909851074219, 501.5721435546875], "page": 44, "span": [0, 51], "__ref_s3_data": null}], "text": "Example 3-10 Activating RCAC on the EMPLOYEES table", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7803192138672, 473.9972839355469, 376.6766052246094, 484.90777587890625], "page": 44, "span": [0, 45], "__ref_s3_data": null}], "text": "- /* Active Row Access Control (permissions) */", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.8000030517578, 426.5678405761719, 354.86962890625, 471.3420715332031], "page": 44, "span": [0, 131], "__ref_s3_data": null}], "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [365.77313232421875, 462.5672912597656, 376.6766052246094, 471.3420715332031], "page": 44, "span": [0, 2], "__ref_s3_data": null}], "text": "*/", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.87640380859375, 378.27978515625, 540.8014526367188, 412.6735534667969], "page": 44, "span": [0, 231], "__ref_s3_data": null}], "text": "- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.33819580078125, 134.59954833984375, 348.354736328125, 143.758056640625], "page": 44, "span": [0, 65], "__ref_s3_data": null}], "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/29"}, {"prov": [{"bbox": [63.84088897705078, 27.93828010559082, 78.4020004272461, 37.61041259765625], "page": 44, "span": [0, 2], "__ref_s3_data": null}], "text": "28", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.28304290771484, 28.056396484375, 334.4214172363281, 37.27587890625], "page": 44, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.99427795410156, 699.1064453125, 531.1966552734375, 721.436767578125], "page": 45, "span": [0, 152], "__ref_s3_data": null}], "text": "- 3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.06971740722656, 441.8953857421875, 356.7056579589844, 451.5973205566406], "page": 45, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/30"}, {"prov": [{"bbox": [64.2018051147461, 409.5545349121094, 339.8397216796875, 423.00640869140625], "page": 45, "span": [0, 41], "__ref_s3_data": null}], "text": "3.6.7 Demonstrating data access with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7947235107422, 374.49847412109375, 547.259521484375, 396.53436279296875], "page": 45, "span": [0, 100], "__ref_s3_data": null}], "text": "You are now ready to start testing RCAC with the four different users. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.66810607910156, 332.9556884765625, 544.1072387695312, 367.43341064453125], "page": 45, "span": [0, 243], "__ref_s3_data": null}], "text": "- 1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, \"Demonstrating data access without RCAC\" on page 24).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.4961700439453, 312.2276306152344, 279.97296142578125, 321.431640625], "page": 45, "span": [0, 28], "__ref_s3_data": null}], "text": "Example 3-11 EMPLOYEES count", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.306396484375, 293.92047119140625, 406.6163635253906, 304.6670227050781], "page": 45, "span": [0, 54], "__ref_s3_data": null}], "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.95774841308594, 258.1456298828125, 511.5380859375, 280.7308044433594], "page": 45, "span": [0, 146], "__ref_s3_data": null}], "text": "- 2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.27264404296875, 196.52191162109375, 309.68194580078125, 206.06488037109375], "page": 45, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 3-13 Count of EMPLOYEES by HR", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/31"}, {"prov": [{"bbox": [136.16087341308594, 145.78839111328125, 540.7218627929688, 180.08966064453125], "page": 45, "span": [0, 216], "__ref_s3_data": null}], "text": "- 3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1033172607422, 84.3720703125, 340.1351318359375, 94.15911865234375], "page": 45, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 3-14 Count of EMPLOYEES by a manager", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/32"}, {"prov": [{"bbox": [344.54718017578125, 27.9293212890625, 523.6016235351562, 37.26470947265625], "page": 45, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6342163085938, 27.93828010559082, 547.2591552734375, 37.72052001953125], "page": 45, "span": [0, 2], "__ref_s3_data": null}], "text": "29", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.19510650634766, 27.93828010559082, 78.4020004272461, 37.57171630859375], "page": 46, "span": [0, 2], "__ref_s3_data": null}], "text": "30", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.36414337158203, 28.0338134765625, 334.4214172363281, 37.2904052734375], "page": 46, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.79859924316406, 698.8319091796875, 547.213623046875, 721.3585815429688], "page": 46, "span": [0, 169], "__ref_s3_data": null}], "text": "- 4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.97097778320312, 637.8975219726562, 347.41455078125, 647.4303588867188], "page": 46, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 3-15 Count of EMPLOYEES by an employee", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/33"}, {"prov": [{"bbox": [136.351318359375, 587.114501953125, 543.9885864257812, 621.2763061523438], "page": 46, "span": [0, 200], "__ref_s3_data": null}], "text": "- 5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.17999267578125, 526.1991577148438, 345.2605285644531, 535.4434814453125], "page": 46, "span": [0, 46], "__ref_s3_data": null}], "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/34"}, {"prov": [{"bbox": [150.62869262695312, 499.5382995605469, 456.2101135253906, 509.34820556640625], "page": 46, "span": [0, 65], "__ref_s3_data": null}], "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.16029357910156, 458.40106201171875, 544.2874145507812, 492.6539306640625], "page": 46, "span": [0, 262], "__ref_s3_data": null}], "text": "- 6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, \"Demonstrating data access without RCAC\" on page 24. It is shown in Example 3-12.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2924041748047, 437.3970031738281, 396.5692138671875, 446.6560363769531], "page": 46, "span": [0, 62], "__ref_s3_data": null}], "text": "Example 3-12 SELECT statement to test with the different users", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [134.74452209472656, 330.2794189453125, 548.0267333984375, 435.07708740234375], "page": 46, "span": [0, 124], "__ref_s3_data": null}], "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [136.29183959960938, 699.2781372070312, 547.152587890625, 721.4707641601562], "page": 47, "span": [0, 145], "__ref_s3_data": null}], "text": "- 7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.41815185546875, 296.0057373046875, 338.3864440917969, 305.3443908691406], "page": 47, "span": [0, 64], "__ref_s3_data": null}], "text": "Figure 3-17 SQL statement result by Human Resources user profile", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.21075439453125, 256.860107421875, 546.0484008789062, 279.45849609375], "page": 47, "span": [0, 139], "__ref_s3_data": null}], "text": "- 8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.57685852050781, 165.2398681640625, 279.62469482421875, 174.60491943359375], "page": 47, "span": [0, 51], "__ref_s3_data": null}], "text": "Figure 3-18 SQL statement result by Manager profile", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.3648223876953, 126.15972900390625, 518.9005737304688, 148.64361572265625], "page": 47, "span": [0, 145], "__ref_s3_data": null}], "text": "- 9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.505126953125, 77.33699798583984, 295.1390380859375, 86.79803466796875], "page": 47, "span": [0, 55], "__ref_s3_data": null}], "text": "Figure 3-19 SQL statement result by an employee profile", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [344.6293640136719, 27.898193359375, 523.6016235351562, 37.2392578125], "page": 47, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.7171630859375, 27.93828010559082, 547.2591552734375, 37.71160888671875], "page": 47, "span": [0, 2], "__ref_s3_data": null}], "text": "31", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.27489471435547, 27.93828010559082, 78.4020004272461, 37.553955078125], "page": 48, "span": [0, 2], "__ref_s3_data": null}], "text": "32", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.40065002441406, 28.07379150390625, 334.4214172363281, 37.27056884765625], "page": 48, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.8000030517578, 699.0477294921875, 547.2752685546875, 721.3038330078125], "page": 48, "span": [0, 117], "__ref_s3_data": null}], "text": "- 10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company's employees.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.38975524902344, 617.4529418945312, 308.0195617675781, 626.5992431640625], "page": 48, "span": [0, 58], "__ref_s3_data": null}], "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [64.18441009521484, 584.9585571289062, 408.9774475097656, 598.262939453125], "page": 48, "span": [0, 52], "__ref_s3_data": null}], "text": "3.6.8 Demonstrating data access with a view and RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.6727294921875, 561.6839599609375, 515.0767822265625, 571.9627685546875], "page": 48, "span": [0, 83], "__ref_s3_data": null}], "text": "This section covers data access with a view and RCAC. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.79998779296875, 520.4425048828125, 547.2307739257812, 554.5849609375], "page": 48, "span": [0, 227], "__ref_s3_data": null}], "text": "- 1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.41194152832031, 215.8448486328125, 198.96627807617188, 225.3311767578125], "page": 49, "span": [0, 30], "__ref_s3_data": null}], "text": "Figure 3-21 Employees on leave", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.17755126953125, 189.02825927734375, 355.6940002441406, 199.36651611328125], "page": 49, "span": [0, 49], "__ref_s3_data": null}], "text": "- 2. Example 3-13 shows the definition of the view.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.4932098388672, 167.56768798828125, 311.614013671875, 177.39019775390625], "page": 49, "span": [0, 39], "__ref_s3_data": null}], "text": "Example 3-13 VIew of employees on leave", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.7435302734375, 65.85064697265625, 426.59613037109375, 161.1607666015625], "page": 49, "span": [0, 159], "__ref_s3_data": null}], "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH,", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [344.5408020019531, 27.86322021484375, 523.6016235351562, 37.31829833984375], "page": 49, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.63330078125, 27.93828010559082, 547.2591552734375, 37.6053466796875], "page": 49, "span": [0, 2], "__ref_s3_data": null}], "text": "33", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [258.8564758300781, 674.08154296875, 446.6356201171875, 720.8930053710938], "page": 50, "span": [0, 53], "__ref_s3_data": null}], "text": "TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG )", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8447265625, 663.56787109375, 151.74000549316406, 673.0587768554688], "page": 50, "span": [0, 2], "__ref_s3_data": null}], "text": "AS", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 531.5698852539062, 271.67828369140625, 660.3428344726562], "page": 50, "span": [0, 164], "__ref_s3_data": null}], "text": "SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE,", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [155.53102111816406, 519.570068359375, 236.6987762451172, 529.690673828125], "page": 50, "span": [0, 13], "__ref_s3_data": null}], "text": "ON_LEAVE_FLAG", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 507.57025146484375, 157.71849060058594, 517.0009765625], "page": 50, "span": [0, 4], "__ref_s3_data": null}], "text": "FROM", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [167.92576599121094, 507.57025146484375, 271.67828369140625, 517.4595947265625], "page": 50, "span": [0, 19], "__ref_s3_data": null}], "text": "HR_SCHEMA.EMPLOYEES", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.10264587402344, 495.5704345703125, 161.95062255859375, 505.1119384765625], "page": 50, "span": [0, 5], "__ref_s3_data": null}], "text": "WHERE", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [171.0566864013672, 494.4849853515625, 271.67828369140625, 505.46636962890625], "page": 50, "span": [0, 20], "__ref_s3_data": null}], "text": "ON_LEAVE_FLAG = 'Y';", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.068359375, 454.30218505859375, 547.3662109375, 476.58831787109375], "page": 50, "span": [0, 115], "__ref_s3_data": null}], "text": "- 3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2685546875, 432.4124450683594, 354.4166564941406, 442.06927490234375], "page": 50, "span": [0, 49], "__ref_s3_data": null}], "text": "Example 3-14 SQL statement for employees on leave", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 331.58837890625, 266.6982727050781, 424.36187744140625], "page": 50, "span": [0, 104], "__ref_s3_data": null}], "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [167.6361541748047, 331.1232604980469, 316.67755126953125, 341.4685363769531], "page": 50, "span": [0, 29], "__ref_s3_data": null}], "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.88938903808594, 270.649169921875, 547.2506713867188, 317.5455322265625], "page": 50, "span": [0, 264], "__ref_s3_data": null}], "text": "- 4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.29961395263672, 212.2880859375, 301.89312744140625, 222.33502197265625], "page": 50, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 3-22 Employees on leave - Human Resources user", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.30172729492188, 149.5836181640625, 546.509521484375, 196.0367431640625], "page": 50, "span": [0, 285], "__ref_s3_data": null}], "text": "- 5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.38579559326172, 98.30462646484375, 313.5398254394531, 108.1334228515625], "page": 50, "span": [0, 58], "__ref_s3_data": null}], "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [64.1474609375, 27.93828010559082, 78.4020004272461, 37.6011962890625], "page": 50, "span": [0, 2], "__ref_s3_data": null}], "text": "34", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.26473999023438, 27.98931884765625, 334.4214172363281, 37.29864501953125], "page": 50, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.05897521972656, 699.046630859375, 536.1886596679688, 721.3394165039062], "page": 51, "span": [0, 170], "__ref_s3_data": null}], "text": "- 6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.79974365234375, 684.2783813476562, 67.5686264038086, 693.4913940429688], "page": 51, "span": [0, 1], "__ref_s3_data": null}], "text": ".", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.34432983398438, 627.0074462890625, 265.8516540527344, 636.3045043945312], "page": 51, "span": [0, 46], "__ref_s3_data": null}], "text": "Figure 3-24 Employees on leave - employee user", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [344.6600646972656, 27.9105224609375, 523.6016235351562, 37.25311279296875], "page": 51, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.7924194335938, 27.93828010559082, 547.2591552734375, 37.69573974609375], "page": 51, "span": [0, 2], "__ref_s3_data": null}], "text": "35", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.35157775878906, 27.93828010559082, 78.4020004272461, 37.707763671875], "page": 52, "span": [0, 2], "__ref_s3_data": null}], "text": "36", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.37352752685547, 27.9476318359375, 334.5318603515625, 37.489013671875], "page": 52, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/35"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 53, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 4.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 699.611083984375], "page": 53, "span": [0, 1], "__ref_s3_data": null}], "text": "4", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.96546936035156, 451.1016845703125, 532.0337524414062, 538.5458984375], "page": 53, "span": [0, 59], "__ref_s3_data": null}], "text": "Implementing Row and Column Access Control: Banking example", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8340301513672, 367.058837890625, 546.1500854492188, 413.33544921875], "page": 53, "span": [0, 289], "__ref_s3_data": null}], "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, \"Database definitions for the RCAC banking example\" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.71417236328125, 344.93609619140625, 347.4121398925781, 355.2895812988281], "page": 53, "span": [0, 49], "__ref_s3_data": null}], "text": "The following topics are covered in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7564697265625, 327.7724304199219, 392.97119140625, 338.0458679199219], "page": 53, "span": [0, 67], "__ref_s3_data": null}], "text": "- GLYPH Business requirements for the RCAC banking scenario", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.56719970703125, 315.9309387207031, 368.54632568359375, 326.4755554199219], "page": 53, "span": [0, 67], "__ref_s3_data": null}], "text": "- GLYPH Description of the users roles and responsibilities", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7265167236328, 303.9350280761719, 261.45440673828125, 313.9096374511719], "page": 53, "span": [0, 38], "__ref_s3_data": null}], "text": "- GLYPH Implementation of RCAC", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.681270599365234, 27.83880615234375, 257.24334716796875, 37.34552001953125], "page": 53, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5507202148438, 27.93828010559082, 547.2591552734375, 37.83416748046875], "page": 53, "span": [0, 2], "__ref_s3_data": null}], "text": "37", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.15269470214844, 702.2404174804688, 512.5513916015625, 718.7112426757812], "page": 54, "span": [0, 55], "__ref_s3_data": null}], "text": "4.1 Business requirements for the RCAC banking scenario", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.70774841308594, 663.635009765625, 543.9003295898438, 686.0623779296875], "page": 54, "span": [0, 189], "__ref_s3_data": null}], "text": "As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7441864013672, 647.138916015625, 214.6067352294922, 657.2281494140625], "page": 54, "span": [0, 25], "__ref_s3_data": null}], "text": "- GLYPH CUSTOMERS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63128662109375, 635.1390991210938, 206.64071655273438, 645.2169189453125], "page": 54, "span": [0, 24], "__ref_s3_data": null}], "text": "- GLYPH ACCOUNTS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5100555419922, 623.1392822265625, 229.18223571777344, 633.5086669921875], "page": 54, "span": [0, 28], "__ref_s3_data": null}], "text": "- GLYPH TRANSACTIONS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.0419464111328, 541.180419921875, 547.2745971679688, 611.2938232421875], "page": 54, "span": [0, 471], "__ref_s3_data": null}], "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.87716674804688, 458.8881530761719, 546.8505859375, 529.3848266601562], "page": 54, "span": [0, 469], "__ref_s3_data": null}], "text": "In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee's personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.72178649902344, 364.9400329589844, 547.270751953125, 447.2520446777344], "page": 54, "span": [0, 571], "__ref_s3_data": null}], "text": "Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.73001098632812, 295.1842041015625, 547.2139892578125, 353.10443115234375], "page": 54, "span": [0, 350], "__ref_s3_data": null}], "text": "The customer's identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer's login value. This value is compared to the customer's login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.76414489746094, 261.1648254394531, 547.2429809570312, 283.3126525878906], "page": 54, "span": [0, 120], "__ref_s3_data": null}], "text": "Applications that do not use the web interface do not have to be changed because the global variable is NULL by default.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.15193939208984, 27.93828010559082, 78.4020004272461, 37.517578125], "page": 54, "span": [0, 2], "__ref_s3_data": null}], "text": "38", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.28313446044922, 28.07989501953125, 334.4214172363281, 37.28369140625], "page": 54, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.5806884765625, 710.7797241210938, 442.2786865234375, 721.3082275390625], "page": 55, "span": [0, 70], "__ref_s3_data": null}], "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6310577392578, 670.2985229492188, 547.3546142578125, 704.576171875], "page": 55, "span": [0, 200], "__ref_s3_data": null}], "text": "- GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.43284606933594, 629.2459716796875, 546.7332153320312, 663.6553955078125], "page": 55, "span": [0, 203], "__ref_s3_data": null}], "text": "- GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.4942169189453, 576.0048828125, 546.2234497070312, 622.8255615234375], "page": 55, "span": [0, 284], "__ref_s3_data": null}], "text": "- GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.07473754882812, 293.3678894042969, 286.37646484375, 302.353271484375], "page": 55, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 4-1 Internet banking example", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/36"}, {"prov": [{"bbox": [64.41133880615234, 250.48199462890625, 475.6933898925781, 266.62109375], "page": 55, "span": [0, 55], "__ref_s3_data": null}], "text": "4.2 Description of the users roles and responsibilities", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.86761474609375, 211.77857971191406, 533.134521484375, 234.0225830078125], "page": 55, "span": [0, 99], "__ref_s3_data": null}], "text": "During the requirements gathering phase, the following groups of users are identified and codified:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.75192260742188, 194.41461181640625, 395.1046142578125, 204.55694580078125], "page": 55, "span": [0, 70], "__ref_s3_data": null}], "text": "- GLYPH SECURITY: Security officer and security administrators", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.67442321777344, 182.11224365234375, 266.7660217285156, 192.36444091796875], "page": 55, "span": [0, 39], "__ref_s3_data": null}], "text": "- GLYPH DBE: Database engineers", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.70191955566406, 170.73941040039062, 319.2432861328125, 180.76068115234375], "page": 55, "span": [0, 51], "__ref_s3_data": null}], "text": "- GLYPH ADMIN: Bank business administrators", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.53024291992188, 158.73960876464844, 246.766357421875, 168.793212890625], "page": 55, "span": [0, 36], "__ref_s3_data": null}], "text": "- GLYPH TELLER: Bank tellers", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.38711547851562, 146.606201171875, 365.1325378417969, 156.5809326171875], "page": 55, "span": [0, 59], "__ref_s3_data": null}], "text": "- GLYPH CUSTOMER: Bank customers using the internet", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63414001464844, 134.40423583984375, 325.77801513671875, 144.58380126953125], "page": 55, "span": [0, 53], "__ref_s3_data": null}], "text": "- GLYPH PUBLIC: Anyone not already in a group", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [214.27481079101562, 28.0194091796875, 523.5935668945312, 37.27288818359375], "page": 55, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5966186523438, 27.93828010559082, 547.2591552734375, 37.78082275390625], "page": 55, "span": [0, 2], "__ref_s3_data": null}], "text": "39", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.19805908203125, 27.93828010559082, 78.4020004272461, 37.79486083984375], "page": 56, "span": [0, 2], "__ref_s3_data": null}], "text": "40", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.33177947998047, 28.06304931640625, 334.4214172363281, 37.26739501953125], "page": 56, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.27764892578125, 687.2786865234375, 547.2127075195312, 721.2992553710938], "page": 56, "span": [0, 231], "__ref_s3_data": null}], "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.13352966308594, 373.94036865234375, 317.8505554199219, 383.2444763183594], "page": 56, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 4-2 Rules for row and column access", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/37"}, {"prov": [{"bbox": [135.74815368652344, 699.0175170898438, 545.2960205078125, 721.3952026367188], "page": 57, "span": [0, 123], "__ref_s3_data": null}], "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.09585571289062, 381.0845947265625, 245.08297729492188, 390.61444091796875], "page": 57, "span": [0, 23], "__ref_s3_data": null}], "text": "Figure 4-3 Column masks", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/8"}, {"prov": [{"bbox": [136.05606079101562, 318.2683410644531, 543.4578247070312, 364.7004699707031], "page": 57, "span": [0, 295], "__ref_s3_data": null}], "text": "For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7457733154297, 289.4174499511719, 547.2935791015625, 312.15093994140625], "page": 57, "span": [0, 127], "__ref_s3_data": null}], "text": "- GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60708618164062, 260.16748046875, 538.9269409179688, 282.7138671875], "page": 57, "span": [0, 119], "__ref_s3_data": null}], "text": "- GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6043701171875, 231.50372314453125, 492.53729248046875, 254.1444091796875], "page": 57, "span": [0, 137], "__ref_s3_data": null}], "text": "- GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5557403564453, 202.178955078125, 534.6511840820312, 224.8624267578125], "page": 57, "span": [0, 115], "__ref_s3_data": null}], "text": "- GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.36813354492188, 185.65155029296875, 529.1213989257812, 196.05841064453125], "page": 57, "span": [0, 103], "__ref_s3_data": null}], "text": "- GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.52735900878906, 144.6416473388672, 547.3323364257812, 178.78997802734375], "page": 57, "span": [0, 200], "__ref_s3_data": null}], "text": "- GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.407958984375, 127.601318359375, 530.7957763671875, 138.128662109375], "page": 57, "span": [0, 96], "__ref_s3_data": null}], "text": "- GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [214.2675018310547, 28.00421142578125, 523.5935668945312, 37.2421875], "page": 57, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.689697265625, 27.93828010559082, 547.2591552734375, 37.77044677734375], "page": 57, "span": [0, 2], "__ref_s3_data": null}], "text": "41", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.2745590209961, 705.79541015625, 283.6307678222656, 721.9813232421875], "page": 58, "span": [0, 26], "__ref_s3_data": null}], "text": "4.3 Implementation of RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.4054412841797, 679.1885986328125, 514.2452392578125, 689.2947998046875], "page": 58, "span": [0, 85], "__ref_s3_data": null}], "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.15525817871094, 478.4729309082031, 327.0066223144531, 487.8588562011719], "page": 58, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 4-4 Data model of the banking scenario", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/38"}, {"prov": [{"bbox": [135.9271240234375, 451.85552978515625, 309.19659423828125, 461.9432678222656], "page": 58, "span": [0, 40], "__ref_s3_data": null}], "text": "This section covers the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.67567443847656, 435.15850830078125, 372.9923095703125, 445.2650146484375], "page": 58, "span": [0, 66], "__ref_s3_data": null}], "text": "- GLYPH Reviewing the tables that are used in this example", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.61679077148438, 422.851806640625, 490.73876953125, 433.0387268066406], "page": 58, "span": [0, 84], "__ref_s3_data": null}], "text": "- GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.76889038085938, 410.9656066894531, 376.5744934082031, 421.16241455078125], "page": 58, "span": [0, 69], "__ref_s3_data": null}], "text": "- GLYPH Creating group profiles for the users and their roles", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6211395263672, 398.8453369140625, 384.3678283691406, 409.67742919921875], "page": 58, "span": [0, 62], "__ref_s3_data": null}], "text": "- GLYPH Creating the CUSTOMER_LOGIN_ID global variable", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.83248901367188, 386.8020324707031, 320.7999572753906, 397.2442626953125], "page": 58, "span": [0, 53], "__ref_s3_data": null}], "text": "- GLYPH Defining and creating row permissions", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7002716064453, 374.8518371582031, 312.3022155761719, 385.3578186035156], "page": 58, "span": [0, 50], "__ref_s3_data": null}], "text": "- GLYPH Defining and creating column masks", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.64413452148438, 362.9361267089844, 387.6695556640625, 373.26336669921875], "page": 58, "span": [0, 69], "__ref_s3_data": null}], "text": "- GLYPH Restricting the inserting and updating of masked data", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.75306701660156, 351.1123352050781, 334.1216125488281, 361.037109375], "page": 58, "span": [0, 56], "__ref_s3_data": null}], "text": "- GLYPH Activating row and column access control", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.65428161621094, 338.8648986816406, 271.91436767578125, 349.3992004394531], "page": 58, "span": [0, 41], "__ref_s3_data": null}], "text": "- GLYPH Reviewing row permissions", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8694305419922, 327.16015625, 323.46331787109375, 337.9486999511719], "page": 58, "span": [0, 51], "__ref_s3_data": null}], "text": "- GLYPH Demonstrating data access with RCAC", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.73135375976562, 315.1239929199219, 343.2095031738281, 325.26885986328125], "page": 58, "span": [0, 56], "__ref_s3_data": null}], "text": "- GLYPH Query implementation with RCAC activated", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.17279052734375, 282.4974060058594, 410.4186096191406, 295.388916015625], "page": 58, "span": [0, 56], "__ref_s3_data": null}], "text": "4.3.1 Reviewing the tables that are used in this example", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.51849365234375, 235.11878967285156, 541.1093139648438, 269.2921142578125], "page": 58, "span": [0, 214], "__ref_s3_data": null}], "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.22021484375, 151.315673828125, 361.25982666015625, 160.41815185546875], "page": 58, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 4-5 Tables that are used in the banking example", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/39"}, {"prov": [{"bbox": [142.3465576171875, 89.73866271972656, 525.7510986328125, 124.18499755859375], "page": 58, "span": [0, 195], "__ref_s3_data": null}], "text": "Note: Appendix A, \"Database definitions for the RCAC banking example\" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.21815490722656, 27.93828010559082, 78.4020004272461, 37.66497802734375], "page": 58, "span": [0, 2], "__ref_s3_data": null}], "text": "42", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31220245361328, 28.0478515625, 334.4214172363281, 37.274658203125], "page": 58, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.93377685546875, 698.9581298828125, 525.0703125, 721.3391723632812], "page": 59, "span": [0, 106], "__ref_s3_data": null}], "text": "To review the attributes of each table that is used in this banking example, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.77842712402344, 670.1790161132812, 543.2303466796875, 694.369873046875], "page": 59, "span": [0, 136], "__ref_s3_data": null}], "text": "- 1. Review the columns of each the tables through System i Navigator. Expand Database \uf0ae named Database \uf0ae Schemas \uf0ae BANK_SCHEMA \uf0ae Tables .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.044677734375, 629.2593383789062, 546.8358764648438, 663.48486328125], "page": 59, "span": [0, 253], "__ref_s3_data": null}], "text": "- 2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.25962829589844, 418.0169982910156, 303.7537536621094, 427.2813415527344], "page": 59, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-6 CUSTOMERS table attributes", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/40"}, {"prov": [{"bbox": [135.99163818359375, 378.7974853515625, 517.3616333007812, 401.4026794433594], "page": 59, "span": [0, 91], "__ref_s3_data": null}], "text": "- 3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.40914916992188, 169.933837890625, 293.8601989746094, 179.63116455078125], "page": 59, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [214.2801971435547, 27.97186279296875, 523.5935668945312, 37.2733154296875], "page": 59, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.720947265625, 27.93828010559082, 547.2591552734375, 37.82537841796875], "page": 59, "span": [0, 2], "__ref_s3_data": null}], "text": "43", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.17613220214844, 27.93828010559082, 78.4020004272461, 37.888427734375], "page": 60, "span": [0, 2], "__ref_s3_data": null}], "text": "44", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.36976623535156, 27.99517822265625, 334.4214172363281, 37.36669921875], "page": 60, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.88308715820312, 675.2788696289062, 538.2010498046875, 721.5631713867188], "page": 60, "span": [0, 263], "__ref_s3_data": null}], "text": "- 4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.06980895996094, 474.015625, 396.0132141113281, 483.4775695800781], "page": 60, "span": [0, 59], "__ref_s3_data": null}], "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/41"}, {"prov": [{"bbox": [136.2538299560547, 434.73291015625, 542.1918334960938, 457.36016845703125], "page": 60, "span": [0, 154], "__ref_s3_data": null}], "text": "- 5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.27098083496094, 219.380615234375, 297.00921630859375, 228.7257080078125], "page": 60, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 4-9 ACCOUNTS table attributes", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/42"}, {"prov": [{"bbox": [135.9091033935547, 698.7022094726562, 509.6353759765625, 721.5545043945312], "page": 61, "span": [0, 91], "__ref_s3_data": null}], "text": "- 6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.17601013183594, 545.1570434570312, 291.64111328125, 554.9664916992188], "page": 61, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.2264404296875, 482.25897216796875, 538.2010498046875, 528.1681518554688], "page": 61, "span": [0, 265], "__ref_s3_data": null}], "text": "- 7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.48716735839844, 295.1299133300781, 322.23956298828125, 304.5341796875], "page": 61, "span": [0, 59], "__ref_s3_data": null}], "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/43"}, {"prov": [{"bbox": [214.28741455078125, 27.9407958984375, 523.5935668945312, 37.26190185546875], "page": 61, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.7454833984375, 27.93828010559082, 547.2591552734375, 37.93182373046875], "page": 61, "span": [0, 2], "__ref_s3_data": null}], "text": "45", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.05352783203125, 698.7333374023438, 547.2595825195312, 721.6047973632812], "page": 62, "span": [0, 157], "__ref_s3_data": null}], "text": "- 8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.08340454101562, 483.11859130859375, 321.95263671875, 492.669677734375], "page": 62, "span": [0, 41], "__ref_s3_data": null}], "text": "Figure 4-12 TRANSACTIONS table attributes", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/44"}, {"prov": [{"bbox": [136.10157775878906, 443.9242858886719, 531.8204345703125, 466.7878112792969], "page": 62, "span": [0, 95], "__ref_s3_data": null}], "text": "- 9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.23361206054688, 299.8185729980469, 383.6240234375, 309.7732849121094], "page": 62, "span": [0, 56], "__ref_s3_data": null}], "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 237.45896911621094, 547.3941040039062, 283.541748046875], "page": 62, "span": [0, 273], "__ref_s3_data": null}], "text": "- 10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.34345245361328, 57.83700180053711, 342.0125732421875, 67.66943359375], "page": 62, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/45"}, {"prov": [{"bbox": [64.11357116699219, 27.93828010559082, 78.4020004272461, 37.95208740234375], "page": 62, "span": [0, 2], "__ref_s3_data": null}], "text": "46", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.1781997680664, 27.982421875, 334.4214172363281, 37.3914794921875], "page": 62, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.23085021972656, 699.118408203125, 527.005615234375, 721.2885131835938], "page": 63, "span": [0, 167], "__ref_s3_data": null}], "text": "Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.15889739990234, 650.3182983398438, 532.1195068359375, 679.7421875], "page": 63, "span": [0, 74], "__ref_s3_data": null}], "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7303466796875, 603.2656860351562, 531.9879150390625, 637.4636840820312], "page": 63, "span": [0, 250], "__ref_s3_data": null}], "text": "The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, \"Roles\" on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.1609649658203, 580.8624877929688, 266.8606872558594, 591.4937744140625], "page": 63, "span": [0, 29], "__ref_s3_data": null}], "text": "Complete the following steps:", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.48870849609375, 552.2794799804688, 544.5436401367188, 574.73388671875], "page": 63, "span": [0, 103], "__ref_s3_data": null}], "text": "- 1. Right-click the database connection and select Application Administration , as shown in Figure 4-15.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.063720703125, 289.1767272949219, 292.96966552734375, 298.3213806152344], "page": 63, "span": [0, 38], "__ref_s3_data": null}], "text": "Figure 4-15 Application administration", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/46"}, {"prov": [{"bbox": [214.25257873535156, 27.9610595703125, 523.5935668945312, 37.2509765625], "page": 63, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6387939453125, 27.93828010559082, 547.2591552734375, 37.79241943359375], "page": 63, "span": [0, 2], "__ref_s3_data": null}], "text": "47", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.1659164428711, 27.93828010559082, 78.4020004272461, 37.85589599609375], "page": 64, "span": [0, 2], "__ref_s3_data": null}], "text": "48", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31367492675781, 27.9822998046875, 334.4214172363281, 37.39764404296875], "page": 64, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.7973175048828, 698.8440551757812, 530.2109985351562, 723.349853515625], "page": 64, "span": [0, 165], "__ref_s3_data": null}], "text": "- 2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i \uf0ae Database and select the function usage ID of Database Security Administrator .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.85130310058594, 390.5697326660156, 329.4411315917969, 400.15435791015625], "page": 64, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 4-16 Application administration for IBM i", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/47"}, {"prov": [{"bbox": [135.79788208007812, 351.3948669433594, 544.5723266601562, 374.33563232421875], "page": 64, "span": [0, 105], "__ref_s3_data": null}], "text": "- 3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.05140686035156, 169.84881591796875, 459.4308776855469, 179.530517578125], "page": 64, "span": [0, 77], "__ref_s3_data": null}], "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/48"}, {"prov": [{"bbox": [135.78591918945312, 687.2783203125, 547.1973876953125, 721.5147094726562], "page": 65, "span": [0, 187], "__ref_s3_data": null}], "text": "- 4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.0041961669922, 378.0472717285156, 297.5841369628906, 387.30133056640625], "page": 65, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 4-18 Customize Access window", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/49"}, {"prov": [{"bbox": [136.253173828125, 326.7797546386719, 537.650146484375, 361.51788330078125], "page": 65, "span": [0, 180], "__ref_s3_data": null}], "text": "- 5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1788787841797, 196.3251953125, 443.8726501464844, 205.81591796875], "page": 65, "span": [0, 72], "__ref_s3_data": null}], "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/50"}, {"prov": [{"bbox": [214.2803955078125, 27.94500732421875, 523.5935668945312, 37.261474609375], "page": 65, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.666015625, 27.93828010559082, 547.2591552734375, 37.95111083984375], "page": 65, "span": [0, 2], "__ref_s3_data": null}], "text": "49", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.19255828857422, 27.93828010559082, 78.4020004272461, 37.62579345703125], "page": 66, "span": [0, 2], "__ref_s3_data": null}], "text": "50", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.27255249023438, 28.05938720703125, 334.4214172363281, 37.28240966796875], "page": 66, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.97772216796875, 698.7117309570312, 545.5703735351562, 721.4182739257812], "page": 66, "span": [0, 117], "__ref_s3_data": null}], "text": "- 6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.3402557373047, 507.7417297363281, 438.3047790527344, 517.5281372070312], "page": 66, "span": [0, 74], "__ref_s3_data": null}], "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/51"}, {"prov": [{"bbox": [64.06755065917969, 474.9371337890625, 418.56524658203125, 488.3762512207031], "page": 66, "span": [0, 59], "__ref_s3_data": null}], "text": "4.3.3 Creating group profiles for the users and their roles", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.84303283691406, 415.6891174316406, 547.2724609375, 462.0940856933594], "page": 66, "span": [0, 307], "__ref_s3_data": null}], "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, \"Description of the users roles and responsibilities\" on page 39.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.06056213378906, 393.63714599609375, 266.8606872558594, 404.0556945800781], "page": 66, "span": [0, 29], "__ref_s3_data": null}], "text": "Complete the following steps:", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.78126525878906, 364.7965393066406, 535.997802734375, 387.283447265625], "page": 66, "span": [0, 120], "__ref_s3_data": null}], "text": "- 1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.255126953125, 191.8638916015625, 281.4906005859375, 201.13775634765625], "page": 66, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 4-21 Creating group profiles", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/52"}, {"prov": [{"bbox": [136.031005859375, 687.0444946289062, 547.2084350585938, 721.4904174804688], "page": 67, "span": [0, 240], "__ref_s3_data": null}], "text": "- 2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.73487854003906, 670.2432250976562, 482.46234130859375, 680.9339599609375], "page": 67, "span": [0, 68], "__ref_s3_data": null}], "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.369873046875, 419.191162109375, 352.9217834472656, 428.5393981933594], "page": 67, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 4-22 Creating group profiles and adding users", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/53"}, {"prov": [{"bbox": [136.0438232421875, 380.2133483886719, 537.6182861328125, 402.5482177734375], "page": 67, "span": [0, 151], "__ref_s3_data": null}], "text": "- 3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups \uf0ae Groups , as shown in Figure 4-23.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.12078857421875, 229.78912353515625, 303.932373046875, 238.92657470703125], "page": 67, "span": [0, 40], "__ref_s3_data": null}], "text": "Figure 4-23 Newly created group profiles", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/54"}, {"prov": [{"bbox": [214.30003356933594, 27.95086669921875, 523.5935668945312, 37.2642822265625], "page": 67, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.7405395507812, 27.93828010559082, 547.2591552734375, 37.67535400390625], "page": 67, "span": [0, 2], "__ref_s3_data": null}], "text": "51", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.14804077148438, 708.4265747070312, 420.2837219238281, 721.7244873046875], "page": 68, "span": [0, 52], "__ref_s3_data": null}], "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.99069213867188, 660.9912109375, 545.7725219726562, 695.1038208007812], "page": 68, "span": [0, 244], "__ref_s3_data": null}], "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, \"Built-in global variables\" on page 19.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.14224243164062, 639.0682373046875, 266.8606872558594, 649.479248046875], "page": 68, "span": [0, 29], "__ref_s3_data": null}], "text": "Complete the following steps:", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.56494140625, 610.179931640625, 535.943603515625, 632.7373657226562], "page": 68, "span": [0, 145], "__ref_s3_data": null}], "text": "- 1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New \uf0ae Global Variable , as shown in Figure 4-24.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.03294372558594, 375.2170715332031, 292.05377197265625, 384.3118591308594], "page": 68, "span": [0, 38], "__ref_s3_data": null}], "text": "Figure 4-24 Creating a global variable", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/55"}, {"prov": [{"bbox": [135.92572021484375, 312.5187072753906, 541.1919555664062, 358.4706115722656], "page": 68, "span": [0, 314], "__ref_s3_data": null}], "text": "- 2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.31603240966797, 71.04986572265625, 347.040283203125, 81.11328125], "page": 68, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/56"}, {"prov": [{"bbox": [64.1907958984375, 27.93828010559082, 78.4020004272461, 37.67730712890625], "page": 68, "span": [0, 2], "__ref_s3_data": null}], "text": "52", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31280517578125, 28.101806640625, 334.4214172363281, 37.311279296875], "page": 68, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.12977600097656, 687.2127685546875, 547.2542724609375, 721.2545166015625], "page": 69, "span": [0, 216], "__ref_s3_data": null}], "text": "- 3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.95867919921875, 540.6283569335938, 457.0142822265625, 550.0120239257812], "page": 69, "span": [0, 72], "__ref_s3_data": null}], "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/57"}, {"prov": [{"bbox": [135.82858276367188, 501.53948974609375, 534.23876953125, 524.1180419921875], "page": 69, "span": [0, 147], "__ref_s3_data": null}], "text": "- 4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.15591430664062, 203.84979248046875, 540.3552856445312, 213.4273681640625], "page": 69, "span": [0, 91], "__ref_s3_data": null}], "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/58"}, {"prov": [{"bbox": [214.31678771972656, 27.9561767578125, 523.5935668945312, 37.26458740234375], "page": 69, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.7046508789062, 27.93828010559082, 547.2591552734375, 37.65869140625], "page": 69, "span": [0, 2], "__ref_s3_data": null}], "text": "53", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.21206665039062, 708.4077758789062, 339.9589538574219, 721.7990112304688], "page": 70, "span": [0, 43], "__ref_s3_data": null}], "text": "4.3.5 Defining and creating row permissions", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9742889404297, 685.0367431640625, 527.3794555664062, 695.2660522460938], "page": 70, "span": [0, 88], "__ref_s3_data": null}], "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.758056640625, 643.67529296875, 530.7598266601562, 680.3302612304688], "page": 70, "span": [0, 169], "__ref_s3_data": null}], "text": "- 1. From the navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Row Permissions , and select New \uf0ae Row Permission , as shown in Figure 4-28.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1620330810547, 359.82366943359375, 314.04541015625, 369.123046875], "page": 70, "span": [0, 41], "__ref_s3_data": null}], "text": "Figure 4-28 Selecting new row permissions", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/59"}, {"prov": [{"bbox": [64.29161071777344, 27.93828010559082, 78.4020004272461, 37.70703125], "page": 70, "span": [0, 2], "__ref_s3_data": null}], "text": "54", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.33383178710938, 28.05706787109375, 334.4214172363281, 37.33294677734375], "page": 70, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.03018188476562, 687.145751953125, 544.505126953125, 721.490478515625], "page": 71, "span": [0, 213], "__ref_s3_data": null}], "text": "- 2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.3019256591797, 658.2987060546875, 542.1815185546875, 680.717529296875], "page": 71, "span": [0, 89], "__ref_s3_data": null}], "text": "- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.4884796142578, 581.2600708007812, 537.7831420898438, 651.5912475585938], "page": 71, "span": [0, 438], "__ref_s3_data": null}], "text": "- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.66030883789062, 564.2066650390625, 381.3265380859375, 574.5264892578125], "page": 71, "span": [0, 51], "__ref_s3_data": null}], "text": "- -Any other user profile cannot see any rows at all.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.00958251953125, 546.886474609375, 314.7688293457031, 557.4721069335938], "page": 71, "span": [0, 37], "__ref_s3_data": null}], "text": "Select the Enabled option. Click OK .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.95968627929688, 253.26513671875, 384.6536865234375, 262.62078857421875], "page": 71, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/60"}, {"prov": [{"bbox": [214.24986267089844, 27.956787109375, 523.5935668945312, 37.28692626953125], "page": 71, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6702270507812, 27.93828010559082, 547.2591552734375, 37.6822509765625], "page": 71, "span": [0, 2], "__ref_s3_data": null}], "text": "55", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.20513916015625, 674.8102416992188, 543.8363647460938, 721.404541015625], "page": 72, "span": [0, 263], "__ref_s3_data": null}], "text": "- 3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.44004821777344, 646.2992553710938, 539.4539794921875, 668.675537109375], "page": 72, "span": [0, 88], "__ref_s3_data": null}], "text": "- -User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.2493438720703, 569.2606201171875, 537.7576904296875, 639.6063232421875], "page": 72, "span": [0, 438], "__ref_s3_data": null}], "text": "- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.43359375, 552.2164916992188, 381.32696533203125, 562.5576782226562], "page": 72, "span": [0, 51], "__ref_s3_data": null}], "text": "- -Any other user profile cannot see any rows at all.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.8797149658203, 535.041259765625, 314.7692565917969, 545.5108032226562], "page": 72, "span": [0, 37], "__ref_s3_data": null}], "text": "Select the Enabled option. Click OK .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.3364486694336, 197.93699645996094, 305.99822998046875, 207.1900634765625], "page": 72, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/61"}, {"prov": [{"bbox": [64.20973205566406, 27.93828010559082, 78.4020004272461, 37.7222900390625], "page": 72, "span": [0, 2], "__ref_s3_data": null}], "text": "56", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.28527069091797, 28.055908203125, 334.4214172363281, 37.35791015625], "page": 72, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.74258422851562, 675.0388793945312, 529.9049072265625, 721.5518798828125], "page": 73, "span": [0, 270], "__ref_s3_data": null}], "text": "- 4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.45989990234375, 646.2988891601562, 547.229248046875, 668.7428588867188], "page": 73, "span": [0, 92], "__ref_s3_data": null}], "text": "- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.29940795898438, 569.26025390625, 537.7831420898438, 639.63330078125], "page": 73, "span": [0, 438], "__ref_s3_data": null}], "text": "- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [170.69351196289062, 505.2535095214844, 533.3919677734375, 551.6622314453125], "page": 73, "span": [0, 285], "__ref_s3_data": null}], "text": "Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [151.38229370117188, 475.55084228515625, 381.3265380859375, 485.89093017578125], "page": 73, "span": [0, 51], "__ref_s3_data": null}], "text": "- -Any other user profile cannot see any rows at all.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.89027404785156, 458.91302490234375, 314.7688293457031, 469.5093688964844], "page": 73, "span": [0, 37], "__ref_s3_data": null}], "text": "Select the Enabled option. Click OK .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.22490692138672, 69.0399169921875, 325.5702819824219, 78.46807861328125], "page": 73, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/62"}, {"prov": [{"bbox": [214.22891235351562, 28.0042724609375, 523.5935668945312, 37.26959228515625], "page": 73, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5846557617188, 27.93828010559082, 547.2591552734375, 37.75579833984375], "page": 73, "span": [0, 2], "__ref_s3_data": null}], "text": "57", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.232666015625, 27.93828010559082, 78.4020004272461, 37.613525390625], "page": 74, "span": [0, 2], "__ref_s3_data": null}], "text": "58", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.35807037353516, 28.0589599609375, 334.4214172363281, 37.2994384765625], "page": 74, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.36386108398438, 687.2786865234375, 521.1912231445312, 721.450927734375], "page": 74, "span": [0, 175], "__ref_s3_data": null}], "text": "- 5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.27239227294922, 508.0120849609375, 292.91876220703125, 517.3701171875], "page": 74, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/63"}, {"prov": [{"bbox": [64.21476745605469, 474.7839660644531, 327.4058837890625, 488.1273193359375], "page": 74, "span": [0, 40], "__ref_s3_data": null}], "text": "4.3.6 Defining and creating column masks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.03562927246094, 451.7078857421875, 479.4200134277344, 462.0003662109375], "page": 74, "span": [0, 76], "__ref_s3_data": null}], "text": "This section defines the masks on the columns. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.79998779296875, 410.91876220703125, 523.0706787109375, 447.3500061035156], "page": 74, "span": [0, 168], "__ref_s3_data": null}], "text": "- 1. From the main navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Column Masks , and select New \uf0ae Column Mask , as shown in Figure 4-33.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1403350830078, 210.93280029296875, 287.95941162109375, 220.262939453125], "page": 74, "span": [0, 34], "__ref_s3_data": null}], "text": "Figure 4-33 Creating a column mask", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/64"}, {"prov": [{"bbox": [136.03579711914062, 699.2781372070312, 524.1021728515625, 721.2332153320312], "page": 75, "span": [0, 97], "__ref_s3_data": null}], "text": "- 2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.32827758789062, 682.29833984375, 465.4696044921875, 692.6640625], "page": 75, "span": [0, 63], "__ref_s3_data": null}], "text": "- -Select the CUSTOMERS table on which to create the column mask.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.2732391357422, 670.2985229492188, 475.1905212402344, 680.8697509765625], "page": 75, "span": [0, 66], "__ref_s3_data": null}], "text": "- -Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.39305114746094, 634.299072265625, 531.3062133789062, 668.3560180664062], "page": 75, "span": [0, 207], "__ref_s3_data": null}], "text": "- -Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.79855346679688, 616.8975219726562, 314.766845703125, 627.508056640625], "page": 75, "span": [0, 37], "__ref_s3_data": null}], "text": "Select the Enabled option. Click OK .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8140106201172, 177.95709228515625, 395.16131591796875, 187.234619140625], "page": 75, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/65"}, {"prov": [{"bbox": [136.26536560058594, 150.96624755859375, 522.032958984375, 161.1632080078125], "page": 75, "span": [0, 84], "__ref_s3_data": null}], "text": "- 3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.44378662109375, 134.0785675048828, 381.7741394042969, 144.8258056640625], "page": 75, "span": [0, 34], "__ref_s3_data": null}], "text": "- -MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.36248779296875, 122.0787582397461, 335.7012023925781, 132.481201171875], "page": 75, "span": [0, 27], "__ref_s3_data": null}], "text": "- -MASK_LOGIN_ID_ON_CUSTOMERS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.4147491455078, 110.07894897460938, 446.63970947265625, 120.55975341796875], "page": 75, "span": [0, 43], "__ref_s3_data": null}], "text": "- -MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.27947998046875, 98.07913970947266, 379.591064453125, 108.9068603515625], "page": 75, "span": [0, 32], "__ref_s3_data": null}], "text": "- -MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.41717529296875, 86.07933044433594, 397.17034912109375, 96.97442626953125], "page": 75, "span": [0, 36], "__ref_s3_data": null}], "text": "- -MASK_SECURITY_QUESTION_ON_CUSTOMERS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.33258056640625, 74.07952117919922, 322.7781066894531, 84.5498046875], "page": 75, "span": [0, 25], "__ref_s3_data": null}], "text": "- -MASK_TAX_ID_ON_CUSTOMERS", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [214.23280334472656, 28.0201416015625, 523.5935668945312, 37.26531982421875], "page": 75, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6565551757812, 27.93828010559082, 547.2591552734375, 37.8089599609375], "page": 75, "span": [0, 2], "__ref_s3_data": null}], "text": "59", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.86886596679688, 699.1376342773438, 525.707275390625, 721.5939331054688], "page": 76, "span": [0, 166], "__ref_s3_data": null}], "text": "- 4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.10326385498047, 599.2903442382812, 285.1827087402344, 608.58935546875], "page": 76, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/66"}, {"prov": [{"bbox": [64.0513916015625, 566.2802124023438, 433.7906494140625, 579.4058837890625], "page": 76, "span": [0, 59], "__ref_s3_data": null}], "text": "4.3.7 Restricting the inserting and updating of masked data", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.85455322265625, 507.0654602050781, 544.9268798828125, 553.2467651367188], "page": 76, "span": [0, 270], "__ref_s3_data": null}], "text": "This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, \"Avoiding propagation of masked data\" on page 108.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.1099090576172, 484.9318542480469, 266.8606872558594, 495.5037841796875], "page": 76, "span": [0, 29], "__ref_s3_data": null}], "text": "Complete the following steps:", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.3522491455078, 444.3074951171875, 547.1956787109375, 478.90118408203125], "page": 76, "span": [0, 206], "__ref_s3_data": null}], "text": "- 1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.78135681152344, 311.1509704589844, 334.3720397949219, 320.5633544921875], "page": 76, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 4-36 Definition of the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/67"}, {"prov": [{"bbox": [135.75648498535156, 272.3358154296875, 547.7396240234375, 294.6141662597656], "page": 76, "span": [0, 113], "__ref_s3_data": null}], "text": "- 2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.25939178466797, 179.8170928955078, 221.74893188476562, 189.07855224609375], "page": 76, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-37 Adding a check constraint", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/68"}, {"prov": [{"bbox": [64.13931274414062, 27.93828010559082, 78.4020004272461, 37.62353515625], "page": 76, "span": [0, 2], "__ref_s3_data": null}], "text": "60", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.2583236694336, 28.05963134765625, 334.4214172363281, 37.2972412109375], "page": 76, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.19448852539062, 699.0084228515625, 515.8154907226562, 721.3970336914062], "page": 77, "span": [0, 96], "__ref_s3_data": null}], "text": "- 3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.47923278808594, 682.29833984375, 344.06817626953125, 692.5963134765625], "page": 77, "span": [0, 36], "__ref_s3_data": null}], "text": "- a. Select the CUSTOMER_EMAIL column.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.597412109375, 653.2589721679688, 541.599853515625, 675.5870361328125], "page": 77, "span": [0, 137], "__ref_s3_data": null}], "text": "- b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.6071319580078, 636.1400146484375, 511.9270324707031, 646.5643920898438], "page": 77, "span": [0, 78], "__ref_s3_data": null}], "text": "- c. Select the On update violation, preserve column value option and click OK .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.2974853515625, 129.24169921875, 362.4355773925781, 138.75482177734375], "page": 77, "span": [0, 68], "__ref_s3_data": null}], "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/69"}, {"prov": [{"bbox": [214.33963012695312, 27.99407958984375, 523.5935668945312, 37.3177490234375], "page": 77, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6194458007812, 27.93828010559082, 547.2591552734375, 37.740478515625], "page": 77, "span": [0, 2], "__ref_s3_data": null}], "text": "61", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.84481811523438, 699.0802612304688, 535.5555419921875, 721.4361572265625], "page": 78, "span": [0, 159], "__ref_s3_data": null}], "text": "- 4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.23225402832031, 396.0008544921875, 294.2088317871094, 405.4078674316406], "page": 78, "span": [0, 51], "__ref_s3_data": null}], "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/70"}, {"prov": [{"bbox": [136.3284149169922, 344.85784912109375, 547.2733154296875, 379.3380432128906], "page": 78, "span": [0, 201], "__ref_s3_data": null}], "text": "- 5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.24510955810547, 180.01788330078125, 323.0049743652344, 189.46038818359375], "page": 78, "span": [0, 60], "__ref_s3_data": null}], "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/71"}, {"prov": [{"bbox": [64.20623016357422, 27.93828010559082, 78.4020004272461, 37.66107177734375], "page": 78, "span": [0, 2], "__ref_s3_data": null}], "text": "62", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.26509857177734, 28.060546875, 334.4214172363281, 37.33514404296875], "page": 78, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.11198425292969, 708.3018798828125, 360.40594482421875, 721.6455078125], "page": 79, "span": [0, 46], "__ref_s3_data": null}], "text": "4.3.8 Activating row and column access control", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.0153350830078, 673.103271484375, 516.2232055664062, 695.3901977539062], "page": 79, "span": [0, 101], "__ref_s3_data": null}], "text": "You are now ready to activate RCAC on all three tables in this example. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 631.479736328125, 542.7099609375, 666.022705078125], "page": 79, "span": [0, 239], "__ref_s3_data": null}], "text": "- 1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.109375, 447.28289794921875, 361.76947021484375, 456.8214111328125], "page": 79, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/72"}, {"prov": [{"bbox": [135.86691284179688, 396.5186462402344, 537.477783203125, 430.72796630859375], "page": 79, "span": [0, 198], "__ref_s3_data": null}], "text": "- 2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.17703247070312, 206.22412109375, 318.5569763183594, 216.01983642578125], "page": 79, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/73"}, {"prov": [{"bbox": [214.27894592285156, 27.94580078125, 523.5935668945312, 37.2763671875], "page": 79, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.566162109375, 27.93828010559082, 547.2591552734375, 37.69140625], "page": 79, "span": [0, 2], "__ref_s3_data": null}], "text": "63", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.11422729492188, 687.2786865234375, 544.6798706054688, 721.4954223632812], "page": 80, "span": [0, 183], "__ref_s3_data": null}], "text": "- 3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.18548583984375, 502.91986083984375, 338.2870788574219, 512.703125], "page": 80, "span": [0, 41], "__ref_s3_data": null}], "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/74"}, {"prov": [{"bbox": [64.14816284179688, 471.0173034667969, 271.11932373046875, 484.41094970703125], "page": 80, "span": [0, 31], "__ref_s3_data": null}], "text": "4.3.9 Reviewing row permissions", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9355010986328, 435.63848876953125, 535.83544921875, 458.0364990234375], "page": 80, "span": [0, 96], "__ref_s3_data": null}], "text": "This section displays all the row permissions after enabling RCAC. Complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.80099487304688, 394.4778747558594, 533.23095703125, 428.6591491699219], "page": 80, "span": [0, 174], "__ref_s3_data": null}], "text": "- 1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.30838775634766, 198.54144287109375, 271.8835754394531, 207.906982421875], "page": 80, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-44 Row permissions after enabling RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/75"}, {"prov": [{"bbox": [64.15714263916016, 27.93828010559082, 78.4020004272461, 37.66644287109375], "page": 80, "span": [0, 2], "__ref_s3_data": null}], "text": "64", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.25228881835938, 28.04449462890625, 334.4214172363281, 37.32940673828125], "page": 80, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.80770874023438, 699.2303466796875, 544.3787231445312, 721.4266357421875], "page": 81, "span": [0, 121], "__ref_s3_data": null}], "text": "- 2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.82278442382812, 541.2850341796875, 328.7805480957031, 550.4591064453125], "page": 81, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-45 Selecting row permission definition", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/76"}, {"prov": [{"bbox": [136.20486450195312, 478.66326904296875, 546.0803833007812, 524.6837768554688], "page": 81, "span": [0, 344], "__ref_s3_data": null}], "text": "- 3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.38289642333984, 184.7705078125, 342.9576110839844, 193.93914794921875], "page": 81, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/77"}, {"prov": [{"bbox": [214.26358032226562, 27.94195556640625, 523.5935668945312, 37.2916259765625], "page": 81, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6220703125, 27.93828010559082, 547.2591552734375, 37.70361328125], "page": 81, "span": [0, 2], "__ref_s3_data": null}], "text": "65", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.1228256225586, 708.2988891601562, 347.13360595703125, 721.7398071289062], "page": 82, "span": [0, 42], "__ref_s3_data": null}], "text": "4.3.10 Demonstrating data access with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.73379516601562, 672.9600830078125, 547.2556762695312, 695.3556518554688], "page": 82, "span": [0, 148], "__ref_s3_data": null}], "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.537353515625, 656.0548095703125, 390.8248596191406, 666.2977294921875], "page": 82, "span": [0, 65], "__ref_s3_data": null}], "text": "- GLYPH A SELECT statement that returns the SESSION_USER.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6352081298828, 627.279296875, 543.1919555664062, 649.3411254882812], "page": 82, "span": [0, 131], "__ref_s3_data": null}], "text": "- GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.70932006835938, 598.2001953125, 543.6400756835938, 620.5113525390625], "page": 82, "span": [0, 126], "__ref_s3_data": null}], "text": "- GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.35504150390625, 581.2601318359375, 227.99673461914062, 591.09033203125], "page": 82, "span": [0, 22], "__ref_s3_data": null}], "text": "- -c u s t o m e r _ i d", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.4617462158203, 569.2603149414062, 237.2466278076172, 578.634765625], "page": 82, "span": [0, 14], "__ref_s3_data": null}], "text": "- -customer_name", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.39413452148438, 557.260498046875, 236.13906860351562, 567.0379638671875], "page": 82, "span": [0, 15], "__ref_s3_data": null}], "text": "- -customer_email", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.38189697265625, 545.2606811523438, 246.89581298828125, 554.8548583984375], "page": 82, "span": [0, 30], "__ref_s3_data": null}], "text": "- -c u s t o m e r _ t a x _ i d", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.4001007080078, 533.2608642578125, 318.3563537597656, 543.35791015625], "page": 82, "span": [0, 32], "__ref_s3_data": null}], "text": "- -customer_drivers_license_number", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.71405029296875, 505.5359802246094, 357.2292175292969, 517.52392578125], "page": 82, "span": [0, 36], "__ref_s3_data": null}], "text": "Data access for a DBE user with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.20758056640625, 492.2782897949219, 394.5498352050781, 502.6961364746094], "page": 82, "span": [0, 57], "__ref_s3_data": null}], "text": "To test a DBE (MCAIN) user, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.73385620117188, 463.1365966796875, 531.4830322265625, 485.1209411621094], "page": 82, "span": [0, 152], "__ref_s3_data": null}], "text": "- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.308349609375, 341.9928894042969, 262.7190856933594, 351.44464111328125], "page": 82, "span": [0, 28], "__ref_s3_data": null}], "text": "Figure 4-47 DBE session user", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/78"}, {"prov": [{"bbox": [135.81915283203125, 314.73345947265625, 503.1596374511719, 325.3260192871094], "page": 82, "span": [0, 78], "__ref_s3_data": null}], "text": "- 2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.09771728515625, 155.87709045410156, 451.9573974609375, 165.4344482421875], "page": 82, "span": [0, 71], "__ref_s3_data": null}], "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/79"}, {"prov": [{"bbox": [64.22357940673828, 27.93828010559082, 78.4020004272461, 37.54156494140625], "page": 82, "span": [0, 2], "__ref_s3_data": null}], "text": "66", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.37715148925781, 28.0130615234375, 334.4214172363281, 37.31842041015625], "page": 82, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.20147705078125, 687.2783203125, 547.291015625, 721.3931884765625], "page": 83, "span": [0, 201], "__ref_s3_data": null}], "text": "- 3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.37542724609375, 312.47698974609375, 376.57159423828125, 322.11279296875], "page": 83, "span": [0, 73], "__ref_s3_data": null}], "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.4634246826172, 283.8960876464844, 382.60321044921875, 296.45758056640625], "page": 83, "span": [0, 39], "__ref_s3_data": null}], "text": "Data access for SECURITY user with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.3077392578125, 270.501953125, 382.8707580566406, 280.8298645019531], "page": 83, "span": [0, 54], "__ref_s3_data": null}], "text": "To test a SECURITY user, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 241.58203125, 531.4830322265625, 264.041259765625], "page": 83, "span": [0, 163], "__ref_s3_data": null}], "text": "- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.09732055664062, 95.172119140625, 289.5880432128906, 104.47393798828125], "page": 83, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 4-50 SECURITY session user", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/80"}, {"prov": [{"bbox": [214.31561279296875, 27.99371337890625, 523.5935668945312, 37.20220947265625], "page": 83, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5758666992188, 27.93828010559082, 547.2591552734375, 37.74444580078125], "page": 83, "span": [0, 2], "__ref_s3_data": null}], "text": "67", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.20339965820312, 27.93828010559082, 78.4020004272461, 37.572021484375], "page": 84, "span": [0, 2], "__ref_s3_data": null}], "text": "68", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.34625244140625, 28.0338134765625, 334.4214172363281, 37.291259765625], "page": 84, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.87147521972656, 698.9642944335938, 547.1937866210938, 721.371826171875], "page": 84, "span": [0, 152], "__ref_s3_data": null}], "text": "- 2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1445770263672, 554.88623046875, 486.7213439941406, 563.9288330078125], "page": 84, "span": [0, 83], "__ref_s3_data": null}], "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/81"}, {"prov": [{"bbox": [136.01255798339844, 516.1114501953125, 542.7387084960938, 537.9552001953125], "page": 84, "span": [0, 126], "__ref_s3_data": null}], "text": "- 3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.1894760131836, 341.9969787597656, 362.28131103515625, 351.4267883300781], "page": 84, "span": [0, 71], "__ref_s3_data": null}], "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/82"}, {"prov": [{"bbox": [136.5155792236328, 313.4159851074219, 368.6448059082031, 325.609619140625], "page": 84, "span": [0, 37], "__ref_s3_data": null}], "text": "Data access for TELLER user with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.20401000976562, 299.6714782714844, 427.7564697265625, 310.2610168457031], "page": 84, "span": [0, 64], "__ref_s3_data": null}], "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.66238403320312, 271.08343505859375, 530.67822265625, 293.5404052734375], "page": 84, "span": [0, 164], "__ref_s3_data": null}], "text": "- 1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1230010986328, 110.4892578125, 278.20037841796875, 119.848388671875], "page": 84, "span": [0, 31], "__ref_s3_data": null}], "text": "Figure 4-53 TELLER session user", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/83"}, {"prov": [{"bbox": [135.8011474609375, 699.0465087890625, 547.2401733398438, 721.39990234375], "page": 85, "span": [0, 136], "__ref_s3_data": null}], "text": "- 2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.62548828125, 561.177001953125, 482.5060729980469, 570.638427734375], "page": 85, "span": [0, 78], "__ref_s3_data": null}], "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/84"}, {"prov": [{"bbox": [136.01345825195312, 510.33868408203125, 547.2914428710938, 544.7952880859375], "page": 85, "span": [0, 195], "__ref_s3_data": null}], "text": "- 3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.17078399658203, 110.51699829101562, 391.8590393066406, 119.83746337890625], "page": 85, "span": [0, 76], "__ref_s3_data": null}], "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/85"}, {"prov": [{"bbox": [214.29336547851562, 28.0645751953125, 523.5935668945312, 37.20977783203125], "page": 85, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5740966796875, 27.93828010559082, 547.2591552734375, 37.833740234375], "page": 85, "span": [0, 2], "__ref_s3_data": null}], "text": "69", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.99982833862305, 27.93828010559082, 78.4020004272461, 37.82769775390625], "page": 86, "span": [0, 2], "__ref_s3_data": null}], "text": "70", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.3930892944336, 28.03778076171875, 334.4214172363281, 37.30694580078125], "page": 86, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.52813720703125, 709.5360107421875, 361.28759765625, 721.5006103515625], "page": 86, "span": [0, 36], "__ref_s3_data": null}], "text": "Data access for ADMIN user with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.3176727294922, 696.2783203125, 448.129638671875, 706.8600463867188], "page": 86, "span": [0, 65], "__ref_s3_data": null}], "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 666.9929809570312, 547.238525390625, 689.4435424804688], "page": 86, "span": [0, 164], "__ref_s3_data": null}], "text": "- 1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.44989013671875, 557.8770141601562, 274.6385803222656, 567.1987915039062], "page": 86, "span": [0, 30], "__ref_s3_data": null}], "text": "Figure 4-56 ADMIN session user", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/86"}, {"prov": [{"bbox": [135.9615936279297, 519.0384521484375, 537.4520263671875, 541.28369140625], "page": 86, "span": [0, 111], "__ref_s3_data": null}], "text": "- 2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.13417053222656, 411.4801025390625, 457.3196716308594, 420.7099304199219], "page": 86, "span": [0, 72], "__ref_s3_data": null}], "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/87"}, {"prov": [{"bbox": [136.0950164794922, 699.2781372070312, 524.1978759765625, 721.41357421875], "page": 87, "span": [0, 94], "__ref_s3_data": null}], "text": "- 3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.27821350097656, 303.9661865234375, 386.91961669921875, 313.4559020996094], "page": 87, "span": [0, 75], "__ref_s3_data": null}], "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.49583435058594, 275.79608154296875, 383.07720947265625, 287.5277404785156], "page": 87, "span": [0, 38], "__ref_s3_data": null}], "text": "Data access for WEBUSER user with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1496124267578, 250.45343017578125, 527.5846557617188, 272.600830078125], "page": 87, "span": [0, 121], "__ref_s3_data": null}], "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.61180114746094, 220.994873046875, 531.4830322265625, 243.40185546875], "page": 87, "span": [0, 157], "__ref_s3_data": null}], "text": "- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1943817138672, 106.53924560546875, 289.5948791503906, 116.01922607421875], "page": 87, "span": [0, 32], "__ref_s3_data": null}], "text": "Figure 4-59 WEBUSER session user", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/88"}, {"prov": [{"bbox": [214.297607421875, 28.0042724609375, 523.5935668945312, 37.20550537109375], "page": 87, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.4384765625, 27.93828010559082, 547.2591552734375, 37.85540771484375], "page": 87, "span": [0, 2], "__ref_s3_data": null}], "text": "71", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.95808410644531, 27.93828010559082, 78.4020004272461, 37.7515869140625], "page": 88, "span": [0, 2], "__ref_s3_data": null}], "text": "72", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.32298278808594, 27.989990234375, 334.4214172363281, 37.32470703125], "page": 88, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.97177124023438, 686.7930908203125, 547.2925415039062, 721.4656372070312], "page": 88, "span": [0, 195], "__ref_s3_data": null}], "text": "- 2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.13768005371094, 559.078369140625, 394.4398498535156, 568.9273681640625], "page": 88, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/89"}, {"prov": [{"bbox": [135.97732543945312, 520.39306640625, 514.379638671875, 542.7027587890625], "page": 88, "span": [0, 127], "__ref_s3_data": null}], "text": "- 3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.13868713378906, 261.212158203125, 320.7819519042969, 270.6387939453125], "page": 88, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 4-61 Viewing the global variable value", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/90"}, {"prov": [{"bbox": [135.78077697753906, 222.26959228515625, 541.2606811523438, 244.6905517578125], "page": 88, "span": [0, 145], "__ref_s3_data": null}], "text": "- 4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2648468017578, 96.59709930419922, 474.20855712890625, 106.13018798828125], "page": 88, "span": [0, 74], "__ref_s3_data": null}], "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/91"}, {"prov": [{"bbox": [136.2493438720703, 699.2781372070312, 524.1978759765625, 721.4386596679688], "page": 89, "span": [0, 158], "__ref_s3_data": null}], "text": "- 5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user's own row.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.18749237060547, 529.97705078125, 368.2061462402344, 539.26708984375], "page": 89, "span": [0, 68], "__ref_s3_data": null}], "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/92"}, {"prov": [{"bbox": [136.10256958007812, 501.39599609375, 377.4743957519531, 513.8388671875], "page": 89, "span": [0, 39], "__ref_s3_data": null}], "text": "Other examples of data access with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.91213989257812, 475.9766540527344, 512.9512939453125, 498.0209655761719], "page": 89, "span": [0, 114], "__ref_s3_data": null}], "text": "To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.5059051513672, 435.0992736816406, 535.2608642578125, 469.5335998535156], "page": 89, "span": [0, 167], "__ref_s3_data": null}], "text": "- 1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.13351440429688, 238.66253662109375, 520.2975463867188, 247.94659423828125], "page": 89, "span": [0, 91], "__ref_s3_data": null}], "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [214.31243896484375, 27.9693603515625, 523.5935668945312, 37.21197509765625], "page": 89, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.3995361328125, 27.93828010559082, 547.2591552734375, 37.65289306640625], "page": 89, "span": [0, 2], "__ref_s3_data": null}], "text": "73", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.96171188354492, 27.93828010559082, 78.4020004272461, 37.88232421875], "page": 90, "span": [0, 2], "__ref_s3_data": null}], "text": "74", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.27671813964844, 27.97564697265625, 334.4214172363281, 37.367431640625], "page": 90, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.940185546875, 675.2788696289062, 547.2566528320312, 721.3955078125], "page": 90, "span": [0, 261], "__ref_s3_data": null}], "text": "- 2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.05810546875, 281.088623046875, 535.08740234375, 290.78485107421875], "page": 90, "span": [0, 97], "__ref_s3_data": null}], "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.18202209472656, 687.2783203125, 547.2400512695312, 721.334716796875], "page": 91, "span": [0, 236], "__ref_s3_data": null}], "text": "- 3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2951202392578, 289.8878173828125, 501.49591064453125, 299.4490966796875], "page": 91, "span": [0, 88], "__ref_s3_data": null}], "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [64.09226989746094, 257.6646728515625, 375.0662841796875, 270.94171142578125], "page": 91, "span": [0, 47], "__ref_s3_data": null}], "text": "4.3.11 Query implementation with RCAC activated", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.77622985839844, 198.13531494140625, 547.1669311523438, 244.79510498046875], "page": 91, "span": [0, 280], "__ref_s3_data": null}], "text": "This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [214.29998779296875, 27.95953369140625, 523.5935668945312, 37.236572265625], "page": 91, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.4443969726562, 27.93828010559082, 547.2591552734375, 37.81414794921875], "page": 91, "span": [0, 2], "__ref_s3_data": null}], "text": "75", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.95058822631836, 27.93828010559082, 78.4020004272461, 37.78094482421875], "page": 92, "span": [0, 2], "__ref_s3_data": null}], "text": "76", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.32958221435547, 28.02093505859375, 334.4214172363281, 37.35498046875], "page": 92, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.1143798828125, 710.7125244140625, 266.8606872558594, 721.446044921875], "page": 92, "span": [0, 29], "__ref_s3_data": null}], "text": "Complete the following steps:", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.79046630859375, 670.2988891601562, 532.4749755859375, 704.571044921875], "page": 92, "span": [0, 183], "__ref_s3_data": null}], "text": "- 1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.02316284179688, 281.702880859375, 340.572021484375, 291.3924865722656], "page": 92, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-67 Visual Explain with no RCAC enabled", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/93"}, {"prov": [{"bbox": [136.00341796875, 687.1716918945312, 514.048583984375, 721.5369873046875], "page": 93, "span": [0, 228], "__ref_s3_data": null}], "text": "- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.9990692138672, 302.78125, 327.9913635253906, 311.7919921875], "page": 93, "span": [0, 44], "__ref_s3_data": null}], "text": "Figure 4-68 Visual Explain with RCAC enabled", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/94"}, {"prov": [{"bbox": [136.2928924560547, 251.98651123046875, 547.2394409179688, 286.0349426269531], "page": 93, "span": [0, 232], "__ref_s3_data": null}], "text": "- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.35660552978516, 116.0611572265625, 227.347412109375, 125.32025146484375], "page": 93, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-69 Index advice with no RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/95"}, {"prov": [{"bbox": [214.30316162109375, 27.9913330078125, 523.5935668945312, 37.2801513671875], "page": 93, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.3654174804688, 27.93828010559082, 547.2591552734375, 37.719970703125], "page": 93, "span": [0, 2], "__ref_s3_data": null}], "text": "77", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.9367218017578, 687.2786865234375, 547.188720703125, 721.3848266601562], "page": 94, "span": [0, 232], "__ref_s3_data": null}], "text": "- 4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, \"Index advisor\" on page 99.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.2020263671875, 544.4198608398438, 249.87530517578125, 553.6696166992188], "page": 94, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 4-70 Index advice with RCAC enabled", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/96"}, {"prov": [{"bbox": [63.94062805175781, 27.93828010559082, 78.4020004272461, 37.81573486328125], "page": 94, "span": [0, 2], "__ref_s3_data": null}], "text": "78", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.33392333984375, 28.05181884765625, 334.4214172363281, 37.32916259765625], "page": 94, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/97"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 95, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 5.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 698.831298828125], "page": 95, "span": [0, 1], "__ref_s3_data": null}], "text": "5", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 513.0821533203125, 511.1795959472656, 538.669677734375], "page": 95, "span": [0, 27], "__ref_s3_data": null}], "text": "RCAC and non-SQL interfaces", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.93673706054688, 405.0663757324219, 547.181884765625, 475.41363525390625], "page": 95, "span": [0, 513], "__ref_s3_data": null}], "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF ).", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.76991271972656, 359.08001708984375, 547.2554931640625, 393.2198791503906], "page": 95, "span": [0, 246], "__ref_s3_data": null}], "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.10678100585938, 337.0604553222656, 412.4370422363281, 347.1801452636719], "page": 95, "span": [0, 65], "__ref_s3_data": null}], "text": "The following topics are covered in this chapter in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8011016845703, 319.5867919921875, 254.5669708251953, 329.6640319824219], "page": 95, "span": [0, 38], "__ref_s3_data": null}], "text": "- GLYPH Unsupported interfaces", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7434844970703, 308.0808410644531, 285.9834289550781, 317.3988342285156], "page": 95, "span": [0, 47], "__ref_s3_data": null}], "text": "- GLYPH Native query result differences", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7656707763672, 296.0810241699219, 325.0879211425781, 306.08868408203125], "page": 95, "span": [0, 53], "__ref_s3_data": null}], "text": "- GLYPH Accidental updates with masked values", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.72933959960938, 283.6689147949219, 318.95843505859375, 293.7930908203125], "page": 95, "span": [0, 49], "__ref_s3_data": null}], "text": "- GLYPH System CL commands considerations", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.744651794433594, 27.908203125, 257.24334716796875, 37.23199462890625], "page": 95, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.3575439453125, 27.93828010559082, 547.2591552734375, 37.77392578125], "page": 95, "span": [0, 2], "__ref_s3_data": null}], "text": "79", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.43855285644531, 702.4107666015625, 275.70184326171875, 718.6322021484375], "page": 96, "span": [0, 26], "__ref_s3_data": null}], "text": "5.1 Unsupported interfaces", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1591339111328, 663.6136474609375, 519.7969970703125, 686.068359375], "page": 96, "span": [0, 112], "__ref_s3_data": null}], "text": "It is not possible to create a row permission or column mask on a distributed table or a program-described file.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.89776611328125, 617.4327392578125, 547.2138061523438, 651.9190673828125], "page": 96, "span": [0, 265], "__ref_s3_data": null}], "text": "After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.5338592529297, 600.8960571289062, 526.0348510742188, 611.342041015625], "page": 96, "span": [0, 103], "__ref_s3_data": null}], "text": "- GLYPH A logical file with multiple formats if the open attempt requests more than one format.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.57638549804688, 588.82666015625, 410.4948425292969, 599.421875], "page": 96, "span": [0, 75], "__ref_s3_data": null}], "text": "- GLYPH A table or query that specifies an ICU 2.6.1 sort sequence.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.51390075683594, 576.810302734375, 264.3358459472656, 586.9641723632812], "page": 96, "span": [0, 43], "__ref_s3_data": null}], "text": "- GLYPH A table with read triggers.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.78880310058594, 543.160400390625, 537.0208129882812, 565.395263671875], "page": 96, "span": [0, 136], "__ref_s3_data": null}], "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.04721069335938, 473.14154052734375, 547.275634765625, 531.491455078125], "page": 96, "span": [0, 451], "__ref_s3_data": null}], "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [141.973876953125, 408.6007080078125, 541.2369995117188, 455.5430603027344], "page": 96, "span": [0, 306], "__ref_s3_data": null}], "text": "Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.47200012207031, 360.3584289550781, 329.61151123046875, 376.6991882324219], "page": 96, "span": [0, 35], "__ref_s3_data": null}], "text": "5.2 Native query result differences", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.66397094726562, 297.4229736328125, 542.3941650390625, 344.3070373535156], "page": 96, "span": [0, 321], "__ref_s3_data": null}], "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.92169189453125, 281.1392517089844, 198.29859924316406, 291.45050048828125], "page": 96, "span": [0, 25], "__ref_s3_data": null}], "text": "- GLYPH Query/400", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.69873046875, 269.1394348144531, 214.61248779296875, 279.62432861328125], "page": 96, "span": [0, 26], "__ref_s3_data": null}], "text": "- GLYPH QQQQRY API", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.62481689453125, 257.1396179199219, 315.83990478515625, 267.34716796875], "page": 96, "span": [0, 51], "__ref_s3_data": null}], "text": "- GLYPH Open Query File ( OPNQRYF ) command", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5345458984375, 245.13980102539062, 285.93896484375, 255.6026611328125], "page": 96, "span": [0, 44], "__ref_s3_data": null}], "text": "- GLYPH Run Query ( RUNQRY ) command", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.56021118164062, 233.13999938964844, 441.7839660644531, 243.46417236328125], "page": 96, "span": [0, 74], "__ref_s3_data": null}], "text": "- GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.97003173828125, 174.9041748046875, 541.6351928710938, 221.2158203125], "page": 96, "span": [0, 332], "__ref_s3_data": null}], "text": "Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.73948669433594, 140.65643310546875, 547.283447265625, 163.37255859375], "page": 96, "span": [0, 129], "__ref_s3_data": null}], "text": "The following list documents some of the query output differences that can occur when native query requests are processed by CQE:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9209747314453, 123.5390625, 299.18975830078125, 133.8785400390625], "page": 96, "span": [0, 52], "__ref_s3_data": null}], "text": "- GLYPH Different ordering in the result set", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.68008422851562, 111.573486328125, 393.4990234375, 121.787109375], "page": 96, "span": [0, 72], "__ref_s3_data": null}], "text": "- GLYPH Different values for null columns or columns with errors", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.76820373535156, 99.1552734375, 358.4886169433594, 110.0054931640625], "page": 96, "span": [0, 58], "__ref_s3_data": null}], "text": "- GLYPH Suppression of some mapping error messages", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.62449645996094, 87.7000732421875, 310.7019348144531, 98.14892578125], "page": 96, "span": [0, 52], "__ref_s3_data": null}], "text": "- GLYPH Loss of RRN positioning capabilities", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7325439453125, 75.52520751953125, 354.2079162597656, 86.00927734375], "page": 96, "span": [0, 61], "__ref_s3_data": null}], "text": "- GLYPH Duplicate key processing behavior differences", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.72433471679688, 63.67352294921875, 246.4168701171875, 73.82000732421875], "page": 96, "span": [0, 36], "__ref_s3_data": null}], "text": "- GLYPH Missing key feedback", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.1874008178711, 27.93828010559082, 78.4020004272461, 37.61077880859375], "page": 96, "span": [0, 2], "__ref_s3_data": null}], "text": "80", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.2634048461914, 28.0943603515625, 334.4214172363281, 37.3101806640625], "page": 96, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.42791748046875, 699.2781372070312, 543.0580444335938, 721.3850708007812], "page": 97, "span": [0, 105], "__ref_s3_data": null}], "text": "For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.22903442382812, 682.218994140625, 521.8867797851562, 692.5701904296875], "page": 97, "span": [0, 77], "__ref_s3_data": null}], "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.18670654296875, 648.2789306640625, 544.6605834960938, 670.4671630859375], "page": 97, "span": [0, 180], "__ref_s3_data": null}], "text": "In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [141.93385314941406, 595.689208984375, 495.4548034667969, 630.1156005859375], "page": 97, "span": [0, 229], "__ref_s3_data": null}], "text": "Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.66980743408203, 547.7825927734375, 396.822265625, 563.8651733398438], "page": 97, "span": [0, 41], "__ref_s3_data": null}], "text": "5.3 Accidental updates with masked values", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.81739807128906, 497.2587890625, 547.184814453125, 531.3096923828125], "page": 97, "span": [0, 193], "__ref_s3_data": null}], "text": "The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.87274169921875, 439.19415283203125, 541.6968994140625, 485.3960876464844], "page": 97, "span": [0, 291], "__ref_s3_data": null}], "text": "For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program's record buffer, as shown Figure 5-1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.08998107910156, 369.28070068359375, 547.1439819335938, 427.2828674316406], "page": 97, "span": [0, 453], "__ref_s3_data": null}], "text": "In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.07180786132812, 60.53710174560547, 374.3499755859375, 69.81817626953125], "page": 97, "span": [0, 56], "__ref_s3_data": null}], "text": "Figure 5-1 Accidental update with masked values scenario", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/98"}, {"prov": [{"bbox": [353.64373779296875, 27.8997802734375, 523.6332397460938, 37.12353515625], "page": 97, "span": [0, 38], "__ref_s3_data": null}], "text": "Chapter 5. RCAC and non-SQL interfaces", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.66748046875, 27.93828010559082, 547.2591552734375, 37.72357177734375], "page": 97, "span": [0, 2], "__ref_s3_data": null}], "text": "81", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.22566223144531, 27.93828010559082, 78.4020004272461, 37.58349609375], "page": 98, "span": [0, 2], "__ref_s3_data": null}], "text": "82", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.18901824951172, 28.08782958984375, 334.4214172363281, 37.28155517578125], "page": 98, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.91806030273438, 699.2785034179688, 545.1429443359375, 721.273193359375], "page": 98, "span": [0, 107], "__ref_s3_data": null}], "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.93345642089844, 641.2594604492188, 547.2675170898438, 687.3599853515625], "page": 98, "span": [0, 333], "__ref_s3_data": null}], "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, \"Check constraint solution\" on page 108.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.44256591796875, 597.47412109375, 385.5848388671875, 614.06787109375], "page": 98, "span": [0, 37], "__ref_s3_data": null}], "text": "5.4 System CL commands considerations", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.84999084472656, 522.8721923828125, 547.4896240234375, 581.5377807617188], "page": 98, "span": [0, 440], "__ref_s3_data": null}], "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.2880630493164, 490.1130676269531, 405.0467224121094, 503.80047607421875], "page": 98, "span": [0, 49], "__ref_s3_data": null}], "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.64491271972656, 431.25885009765625, 542.9708251953125, 477.33099365234375], "page": 98, "span": [0, 294], "__ref_s3_data": null}], "text": "The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.95484924316406, 385.2994079589844, 538.5584716796875, 419.28741455078125], "page": 98, "span": [0, 210], "__ref_s3_data": null}], "text": "If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.810791015625, 315.160400390625, 547.2168579101562, 373.19256591796875], "page": 98, "span": [0, 442], "__ref_s3_data": null}], "text": "When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.34564208984375, 282.2169189453125, 270.95599365234375, 296.1662902832031], "page": 98, "span": [0, 30], "__ref_s3_data": null}], "text": "5.4.2 Copy File (CPYF) command", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7013702392578, 234.65618896484375, 547.2855224609375, 269.44036865234375], "page": 98, "span": [0, 214], "__ref_s3_data": null}], "text": "The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7746124267578, 129.28024291992188, 547.3273315429688, 223.41302490234375], "page": 98, "span": [0, 660], "__ref_s3_data": null}], "text": "When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0672149658203, 71.03631591796875, 535.8108520507812, 117.3995361328125], "page": 98, "span": [0, 330], "__ref_s3_data": null}], "text": "If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.39531707763672, 708.2225341796875, 305.67718505859375, 721.97216796875], "page": 99, "span": [0, 35], "__ref_s3_data": null}], "text": "5.4.3 Copy Library (CPYLIB) command", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.95230102539062, 637.2990112304688, 544.9737548828125, 695.278076171875], "page": 99, "span": [0, 354], "__ref_s3_data": null}], "text": "The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, \"Create Duplicate Object (CRTDUPOBJ) command\" on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [353.7088317871094, 27.8951416015625, 523.6332397460938, 37.14202880859375], "page": 99, "span": [0, 38], "__ref_s3_data": null}], "text": "Chapter 5. RCAC and non-SQL interfaces", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.67578125, 27.93828010559082, 547.2591552734375, 37.62774658203125], "page": 99, "span": [0, 2], "__ref_s3_data": null}], "text": "83", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.472412109375, 27.93828010559082, 78.4020004272461, 37.7430419921875], "page": 100, "span": [0, 2], "__ref_s3_data": null}], "text": "84", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.35282135009766, 27.94873046875, 334.50579833984375, 37.45806884765625], "page": 100, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/99"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 101, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 6.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.34396362304688, 513.0821533203125, 455.59796142578125, 538.808837890625], "page": 101, "span": [0, 25], "__ref_s3_data": null}], "text": "Additional considerations", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.87008666992188, 452.89501953125, 531.345458984375, 475.2606506347656], "page": 101, "span": [0, 168], "__ref_s3_data": null}], "text": "This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8069610595703, 435.6946716308594, 267.31884765625, 445.96240234375], "page": 101, "span": [0, 40], "__ref_s3_data": null}], "text": "- GLYPH Timing of column masking", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6639404296875, 424.05908203125, 221.46388244628906, 433.942626953125], "page": 101, "span": [0, 29], "__ref_s3_data": null}], "text": "- GLYPH Data movement", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.80430603027344, 412.05926513671875, 174.4866485595703, 421.6257629394531], "page": 101, "span": [0, 21], "__ref_s3_data": null}], "text": "- GLYPH Joins", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.77816772460938, 400.0594482421875, 177.6728515625, 409.7166748046875], "page": 101, "span": [0, 21], "__ref_s3_data": null}], "text": "- GLYPH Views", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.9530487060547, 387.8131103515625, 262.4305114746094, 397.8844909667969], "page": 101, "span": [0, 41], "__ref_s3_data": null}], "text": "- GLYPH Materialized query tables", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.72091674804688, 376.059814453125, 210.3322296142578, 385.6953430175781], "page": 101, "span": [0, 29], "__ref_s3_data": null}], "text": "- GLYPH Index advisor", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.53468322753906, 363.45330810546875, 310.97344970703125, 373.67767333984375], "page": 101, "span": [0, 51], "__ref_s3_data": null}], "text": "- GLYPH Monitoring, analysis, and debugging", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.64329528808594, 351.6171875, 273.3426513671875, 362.1476135253906], "page": 101, "span": [0, 43], "__ref_s3_data": null}], "text": "- GLYPH Performance and scalability", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.005859375, 329.6795349121094, 347.4121398925781, 340.0391845703125], "page": 101, "span": [0, 49], "__ref_s3_data": null}], "text": "The following topics are covered in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.94393920898438, 312.88189697265625, 267.31884765625, 323.3427734375], "page": 101, "span": [0, 40], "__ref_s3_data": null}], "text": "- GLYPH Timing of column masking", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8094024658203, 301.06097412109375, 296.3423156738281, 311.0367431640625], "page": 101, "span": [0, 45], "__ref_s3_data": null}], "text": "- GLYPH RCAC effects on data movement", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.80313110351562, 289.03125, 248.5316162109375, 299.19488525390625], "page": 101, "span": [0, 37], "__ref_s3_data": null}], "text": "- GLYPH RCAC effects on joins", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.69058227539062, 276.99609375, 368.6199951171875, 287.5282287597656], "page": 101, "span": [0, 62], "__ref_s3_data": null}], "text": "- GLYPH Monitoring, analyzing, and debugging with RCAC", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.53225708007812, 265.0615234375, 428.5085754394531, 275.75750732421875], "page": 101, "span": [0, 77], "__ref_s3_data": null}], "text": "- GLYPH Views, materialized query tables, and query rewrite with RCAC", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63209533691406, 252.91455078125, 349.38427734375, 263.27227783203125], "page": 101, "span": [0, 59], "__ref_s3_data": null}], "text": "- GLYPH RCAC effects on performance and scalability", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.68804931640625, 240.64111328125, 390.4403381347656, 251.15997314453125], "page": 101, "span": [0, 70], "__ref_s3_data": null}], "text": "- GLYPH Exclusive lock to implement RCAC (availability issues)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8003692626953, 228.98834228515625, 315.37078857421875, 239.31402587890625], "page": 101, "span": [0, 51], "__ref_s3_data": null}], "text": "- GLYPH Avoiding propagation of masked data", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.62815856933594, 217.0623016357422, 307.3042297363281, 227.705810546875], "page": 101, "span": [0, 48], "__ref_s3_data": null}], "text": "- GLYPH Triggers and functions (SECURED)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.61077880859375, 204.86920166015625, 315.1477355957031, 215.291259765625], "page": 101, "span": [0, 53], "__ref_s3_data": null}], "text": "- GLYPH RCAC is only one part of the solution", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.789581298828125, 27.87945556640625, 257.24334716796875, 37.2982177734375], "page": 101, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6629028320312, 27.93828010559082, 547.2591552734375, 37.66424560546875], "page": 101, "span": [0, 2], "__ref_s3_data": null}], "text": "85", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 698.946533203125], "page": 101, "span": [0, 1], "__ref_s3_data": null}], "text": "6", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.63821411132812, 702.0612182617188, 298.45440673828125, 718.587646484375], "page": 102, "span": [0, 28], "__ref_s3_data": null}], "text": "6.1 Timing of column masking", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9453887939453, 627.4352416992188, 547.2496337890625, 686.14501953125], "page": 102, "span": [0, 381], "__ref_s3_data": null}], "text": "An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.015625, 593.7183837890625, 547.2325439453125, 615.9714965820312], "page": 102, "span": [0, 140], "__ref_s3_data": null}], "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [222.81260681152344, 559.6641845703125, 250.3378143310547, 568.2012329101562], "page": 102, "span": [0, 6], "__ref_s3_data": null}], "text": "SELECT", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [289.8625183105469, 559.6641845703125, 386.1354675292969, 568.2435302734375], "page": 102, "span": [0, 19], "__ref_s3_data": null}], "text": "CREDIT_CARD_NUMBER,", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [223.27870178222656, 537.4301147460938, 247.33633422851562, 546.2095947265625], "page": 102, "span": [0, 4], "__ref_s3_data": null}], "text": "FROM", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [223.30404663085938, 526.31298828125, 264.05712890625, 535.2268676757812], "page": 102, "span": [0, 8], "__ref_s3_data": null}], "text": "GROUP BY", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [289.9476623535156, 526.31298828125, 384.1680908203125, 535.2972412109375], "page": 102, "span": [0, 18], "__ref_s3_data": null}], "text": "CREDIT_CARD_NUMBER", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [223.270263671875, 515.1958618164062, 262.7109680175781, 523.8567504882812], "page": 102, "span": [0, 8], "__ref_s3_data": null}], "text": "ORDER BY", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [290.0070495605469, 514.6119384765625, 386.2455749511719, 524.111083984375], "page": 102, "span": [0, 19], "__ref_s3_data": null}], "text": "CREDIT_CARD_NUMBER;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [160.45700073242188, 481.6206970214844, 285.01361083984375, 494.1083068847656], "page": 102, "span": [0, 20], "__ref_s3_data": null}], "text": "Without RCAC Masking", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [341.0262451171875, 481.6206970214844, 447.76593017578125, 494.02642822265625], "page": 102, "span": [0, 17], "__ref_s3_data": null}], "text": "With RCAC Masking", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/9"}, {"prov": [{"bbox": [136.17198181152344, 310.2148132324219, 290.1625061035156, 319.8768310546875], "page": 102, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 6-1 Timing of column masking", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/10"}, {"prov": [{"bbox": [290.2481994628906, 537.4301147460938, 389.2164001464844, 556.4693603515625], "page": 102, "span": [0, 33], "__ref_s3_data": null}], "text": "SUM(AMOUNT) AS TOTAL TRANSACTIONS", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.28016662597656, 27.93828010559082, 78.4020004272461, 37.57470703125], "page": 102, "span": [0, 2], "__ref_s3_data": null}], "text": "86", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.40719604492188, 28.0390625, 334.4214172363281, 37.34661865234375], "page": 102, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.76144409179688, 627.1250610351562, 547.1474609375, 721.3262329101562], "page": 103, "span": [0, 652], "__ref_s3_data": null}], "text": "Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query's final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.0433349609375, 563.2588500976562, 540.7468872070312, 609.5735473632812], "page": 103, "span": [0, 262], "__ref_s3_data": null}], "text": "Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.22874450683594, 250.298583984375, 386.6689758300781, 260.0198974609375], "page": 103, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/100"}, {"prov": [{"bbox": [376.0430603027344, 27.89581298828125, 523.6287841796875, 37.10882568359375], "page": 103, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6262817382812, 27.93828010559082, 547.2591552734375, 37.75579833984375], "page": 103, "span": [0, 2], "__ref_s3_data": null}], "text": "87", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.4045181274414, 706.0162963867188, 342.9945068359375, 721.7020874023438], "page": 104, "span": [0, 33], "__ref_s3_data": null}], "text": "6.2 RCAC effects on data movement", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.77244567871094, 631.2990112304688, 547.2276000976562, 689.32666015625], "page": 104, "span": [0, 370], "__ref_s3_data": null}], "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.88336181640625, 491.0691223144531, 292.6585693359375, 500.34722900390625], "page": 104, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 6-3 RCAC and data movement", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/101"}, {"prov": [{"bbox": [135.75350952148438, 392.0856628417969, 547.2745361328125, 474.4322814941406], "page": 104, "span": [0, 619], "__ref_s3_data": null}], "text": "The \"user\" that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization's object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [141.819091796875, 316.4790344238281, 536.527587890625, 374.66552734375], "page": 104, "span": [0, 360], "__ref_s3_data": null}], "text": "Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.97303771972656, 287.01776123046875, 390.6604919433594, 297.2681884765625], "page": 104, "span": [0, 59], "__ref_s3_data": null}], "text": "This section covers in detail the following three examples:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6826171875, 270.45928955078125, 372.0890197753906, 280.8384094238281], "page": 104, "span": [0, 64], "__ref_s3_data": null}], "text": "- GLYPH Effects when RCAC is defined on the source table", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.69775390625, 258.45947265625, 367.6379089355469, 268.9405517578125], "page": 104, "span": [0, 64], "__ref_s3_data": null}], "text": "- GLYPH Effects when RCAC is defined on the target table", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60743713378906, 246.3919677734375, 430.467529296875, 256.6319580078125], "page": 104, "span": [0, 77], "__ref_s3_data": null}], "text": "- GLYPH Effects when RCAC is defined on both source and target tables", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.18472290039062, 213.8573760986328, 407.9704895019531, 226.94378662109375], "page": 104, "span": [0, 54], "__ref_s3_data": null}], "text": "6.2.1 Effects when RCAC is defined on the source table", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.2682647705078, 178.47857666015625, 536.1681518554688, 200.6033935546875], "page": 104, "span": [0, 102], "__ref_s3_data": null}], "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.156005859375, 157.27630615234375, 331.8805847167969, 166.70245361328125], "page": 104, "span": [0, 40], "__ref_s3_data": null}], "text": "Example 6-1 INSERT INTO TARGET statement", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 139.66534423828125, 346.6770935058594, 149.3502197265625], "page": 104, "span": [0, 42], "__ref_s3_data": null}], "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.2040786743164, 27.93828010559082, 78.4020004272461, 37.48199462890625], "page": 104, "span": [0, 2], "__ref_s3_data": null}], "text": "88", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31021881103516, 28.070068359375, 334.4214172363281, 37.2696533203125], "page": 104, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.09054565429688, 650.7742919921875, 547.2900390625, 721.3619995117188], "page": 105, "span": [0, 516], "__ref_s3_data": null}], "text": "For example, given a \"source\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \"target\" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.06468200683594, 375.16595458984375, 377.7413635253906, 384.626953125], "page": 105, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/102"}, {"prov": [{"bbox": [64.16183471679688, 342.9894104003906, 401.6576843261719, 356.17694091796875], "page": 105, "span": [0, 54], "__ref_s3_data": null}], "text": "6.2.2 Effects when RCAC is defined on the target table", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.28038024902344, 307.8984680175781, 536.1681518554688, 329.9527587890625], "page": 105, "span": [0, 102], "__ref_s3_data": null}], "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.6165771484375, 286.58740234375, 331.8912658691406, 296.1914367675781], "page": 105, "span": [0, 40], "__ref_s3_data": null}], "text": "Example 6-2 INSERT INTO TARGET statement", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 269.07110595703125, 346.6770935058594, 278.66558837890625], "page": 105, "span": [0, 42], "__ref_s3_data": null}], "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [376.070556640625, 27.95361328125, 523.6287841796875, 37.0096435546875], "page": 105, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6676635742188, 27.93828010559082, 547.2591552734375, 37.6810302734375], "page": 105, "span": [0, 2], "__ref_s3_data": null}], "text": "89", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.0672378540039, 27.93828010559082, 78.4020004272461, 37.62274169921875], "page": 106, "span": [0, 2], "__ref_s3_data": null}], "text": "90", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31163787841797, 28.11328125, 334.4214172363281, 37.2567138671875], "page": 106, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.84625244140625, 650.9519653320312, 547.2645874023438, 721.3875122070312], "page": 106, "span": [0, 546], "__ref_s3_data": null}], "text": "Given a \"target\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the \"target\", and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table's permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.212646484375, 368.3596496582031, 367.2479248046875, 377.9114990234375], "page": 106, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 6-5 RCAC effects on data movement on TARGET", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/103"}, {"prov": [{"bbox": [64.19894409179688, 336.4187316894531, 490.12786865234375, 349.5552673339844], "page": 106, "span": [0, 67], "__ref_s3_data": null}], "text": "6.2.3 Effects when RCAC is defined on both source and target tables", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.13351440429688, 301.178466796875, 541.6332397460938, 323.2520751953125], "page": 106, "span": [0, 123], "__ref_s3_data": null}], "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3226776123047, 279.97625732421875, 332.0595703125, 289.47418212890625], "page": 106, "span": [0, 40], "__ref_s3_data": null}], "text": "Example 6-3 INSERT INTO TARGET statement", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 262.46722412109375, 346.6770935058594, 271.24200439453125], "page": 106, "span": [0, 42], "__ref_s3_data": null}], "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.995849609375, 173.19976806640625, 547.2467041015625, 243.18621826171875], "page": 106, "span": [0, 473], "__ref_s3_data": null}], "text": "Given a \"source\" table and a \"target\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \"target\" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.59042358398438, 675.2281494140625, 547.2501831054688, 721.4307861328125], "page": 107, "span": [0, 331], "__ref_s3_data": null}], "text": "Although the source rows where NAME <> 'CAIN' do satisfy the target table's permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.80810546875, 395.1744079589844, 425.63427734375, 404.73822021484375], "page": 107, "span": [0, 61], "__ref_s3_data": null}], "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/104"}, {"prov": [{"bbox": [64.44702911376953, 351.5459899902344, 263.02801513671875, 367.8985595703125], "page": 107, "span": [0, 25], "__ref_s3_data": null}], "text": "6.3 RCAC effects on joins", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9691619873047, 301.17767333984375, 546.7406005859375, 335.34326171875], "page": 107, "span": [0, 258], "__ref_s3_data": null}], "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.4822540283203, 261.12799072265625, 541.3812255859375, 283.4383239746094], "page": 107, "span": [0, 167], "__ref_s3_data": null}], "text": "Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [376.1033630371094, 27.9495849609375, 523.6287841796875, 37.02716064453125], "page": 107, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6055297851562, 27.93828010559082, 547.2591552734375, 37.75299072265625], "page": 107, "span": [0, 2], "__ref_s3_data": null}], "text": "91", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.16549682617188, 27.93828010559082, 78.4020004272461, 37.60833740234375], "page": 108, "span": [0, 2], "__ref_s3_data": null}], "text": "92", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.34784698486328, 28.07244873046875, 334.4214172363281, 37.32550048828125], "page": 108, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.05355834960938, 699.1768188476562, 537.429931640625, 721.4932861328125], "page": 108, "span": [0, 149], "__ref_s3_data": null}], "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.143310546875, 463.0318298339844, 334.12286376953125, 472.460693359375], "page": 108, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 6-7 Set A and set B with row permissions", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/105"}, {"prov": [{"bbox": [64.19314575195312, 430.45025634765625, 166.59303283691406, 443.494873046875], "page": 108, "span": [0, 17], "__ref_s3_data": null}], "text": "6.3.1 Inner joins", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.13674926757812, 394.8365783691406, 547.21875, 417.4061584472656], "page": 108, "span": [0, 158], "__ref_s3_data": null}], "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0211181640625, 157.64129638671875, 327.359130859375, 167.20330810546875], "page": 108, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 6-8 Inner join without RCAC permission", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/106"}, {"prov": [{"bbox": [135.92884826660156, 675.1539306640625, 547.3219604492188, 721.5256958007812], "page": 109, "span": [0, 279], "__ref_s3_data": null}], "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.26942443847656, 622.7393798828125, 537.6323852539062, 657.3994140625], "page": 109, "span": [0, 207], "__ref_s3_data": null}], "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.20010375976562, 359.0969543457031, 314.9713439941406, 368.56854248046875], "page": 109, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 6-9 Inner join with RCAC permission", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/107"}, {"prov": [{"bbox": [376.04339599609375, 27.87664794921875, 523.6287841796875, 37.1475830078125], "page": 109, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5010375976562, 27.93828010559082, 547.2591552734375, 37.6861572265625], "page": 109, "span": [0, 2], "__ref_s3_data": null}], "text": "93", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.229248046875, 708.5062866210938, 169.51583862304688, 721.5722045898438], "page": 110, "span": [0, 17], "__ref_s3_data": null}], "text": "6.3.2 Outer joins", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7491912841797, 649.0192260742188, 547.2286376953125, 695.2848510742188], "page": 110, "span": [0, 360], "__ref_s3_data": null}], "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.09414672851562, 407.05682373046875, 334.3742370605469, 416.6016845703125], "page": 110, "span": [0, 46], "__ref_s3_data": null}], "text": "Figure 6-10 Outer join without RCAC permission", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/108"}, {"prov": [{"bbox": [64.17929077148438, 27.93828010559082, 78.4020004272461, 37.6510009765625], "page": 110, "span": [0, 2], "__ref_s3_data": null}], "text": "94", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.3522720336914, 28.08441162109375, 334.4214172363281, 37.3170166015625], "page": 110, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.9468994140625, 687.0872802734375, 535.2982177734375, 721.3490600585938], "page": 111, "span": [0, 218], "__ref_s3_data": null}], "text": "Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.19854736328125, 634.9480590820312, 537.6323852539062, 669.730712890625], "page": 111, "span": [0, 207], "__ref_s3_data": null}], "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.94920349121094, 357.8431396484375, 321.8890380859375, 367.32806396484375], "page": 111, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 6-11 Outer join with RCAC permission", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/109"}, {"prov": [{"bbox": [376.03192138671875, 27.9044189453125, 523.6287841796875, 37.10693359375], "page": 111, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5347900390625, 27.93828010559082, 547.2591552734375, 37.7152099609375], "page": 111, "span": [0, 2], "__ref_s3_data": null}], "text": "95", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.29151153564453, 708.5499877929688, 196.83258056640625, 721.6157836914062], "page": 112, "span": [0, 21], "__ref_s3_data": null}], "text": "6.3.3 Exception joins", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8982696533203, 648.5689697265625, 547.2914428710938, 695.4368286132812], "page": 112, "span": [0, 297], "__ref_s3_data": null}], "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.93870544433594, 385.1077575683594, 351.4439392089844, 394.6268310546875], "page": 112, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 6-12 Exception join without RCAC permission", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/110"}, {"prov": [{"bbox": [135.85084533691406, 322.5378723144531, 544.3384399414062, 368.6776123046875], "page": 112, "span": [0, 343], "__ref_s3_data": null}], "text": "Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.105224609375, 60.5418701171875, 339.2431945800781, 70.03369140625], "page": 112, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 6-13 Exception join with RCAC permission", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/111"}, {"prov": [{"bbox": [64.0777587890625, 27.93828010559082, 78.4020004272461, 37.68072509765625], "page": 112, "span": [0, 2], "__ref_s3_data": null}], "text": "96", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31871032714844, 28.05419921875, 334.4214172363281, 37.34893798828125], "page": 112, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.39301300048828, 705.6498413085938, 469.4769287109375, 722.0193481445312], "page": 113, "span": [0, 50], "__ref_s3_data": null}], "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.89646911621094, 655.2986450195312, 547.2247314453125, 689.4528198242188], "page": 113, "span": [0, 228], "__ref_s3_data": null}], "text": "It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.66171264648438, 621.001708984375, 547.1968383789062, 643.3212890625], "page": 113, "span": [0, 163], "__ref_s3_data": null}], "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6549530029297, 592.2996215820312, 534.2526245117188, 614.6976928710938], "page": 113, "span": [0, 105], "__ref_s3_data": null}], "text": "- GLYPH The underlying data access plan can be different and more complex based on the rule text.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5695037841797, 575.2600708007812, 541.5543212890625, 585.3076171875], "page": 113, "span": [0, 104], "__ref_s3_data": null}], "text": "- GLYPH The database results can be reduced or modified based on the rule text and user profile.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.70484924316406, 546.2804565429688, 536.0465087890625, 568.443115234375], "page": 113, "span": [0, 115], "__ref_s3_data": null}], "text": "- GLYPH The run time of the request can be affected either positively or negatively based on the rule text.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6377410888672, 516.988525390625, 547.224609375, 539.3546142578125], "page": 113, "span": [0, 119], "__ref_s3_data": null}], "text": "- GLYPH For high-level language record level access, query plans must be considered, and not just program code.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7350311279297, 447.2820129394531, 547.2296752929688, 505.2730712890625], "page": 113, "span": [0, 381], "__ref_s3_data": null}], "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.05958557128906, 340.8155822753906, 547.2786254882812, 435.37286376953125], "page": 113, "span": [0, 693], "__ref_s3_data": null}], "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user \"Mike\" and user \"Hernando\" to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user \"Mike\" and user \"Hernando\" have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9143524169922, 271.234130859375, 547.328369140625, 329.0833435058594], "page": 113, "span": [0, 414], "__ref_s3_data": null}], "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the \"variables\" the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.94204711914062, 201.28587341308594, 547.2515869140625, 259.26275634765625], "page": 113, "span": [0, 385], "__ref_s3_data": null}], "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of \"database engineer\" becomes even more important.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.17730712890625, 168.0791015625, 325.99066162109375, 181.6142578125], "page": 113, "span": [0, 41], "__ref_s3_data": null}], "text": "6.4.1 Query monitoring and analysis tools", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.0252227783203, 109.23886108398438, 543.2037353515625, 155.4248046875], "page": 113, "span": [0, 309], "__ref_s3_data": null}], "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [376.0887756347656, 27.9049072265625, 523.6287841796875, 37.08258056640625], "page": 113, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5423583984375, 27.93828010559082, 547.2591552734375, 37.82244873046875], "page": 113, "span": [0, 2], "__ref_s3_data": null}], "text": "97", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.44447326660156, 710.84912109375, 394.5509033203125, 721.3892822265625], "page": 114, "span": [0, 55], "__ref_s3_data": null}], "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.1352310180664, 430.5013122558594, 301.8788146972656, 440.0090026855469], "page": 114, "span": [0, 58], "__ref_s3_data": null}], "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/112"}, {"prov": [{"bbox": [136.34783935546875, 403.5003662109375, 529.9888916015625, 413.8916320800781], "page": 114, "span": [0, 83], "__ref_s3_data": null}], "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.04948425292969, 237.9185791015625, 222.99563598632812, 247.37237548828125], "page": 114, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 6-15 SQL Performance Monitor", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/113"}, {"prov": [{"bbox": [136.6471710205078, 198.71783447265625, 524.7570190429688, 221.43133544921875], "page": 114, "span": [0, 100], "__ref_s3_data": null}], "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.28324127197266, 94.337890625, 349.08843994140625, 103.998779296875], "page": 114, "span": [0, 67], "__ref_s3_data": null}], "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/114"}, {"prov": [{"bbox": [64.10893249511719, 27.93828010559082, 78.4020004272461, 37.59930419921875], "page": 114, "span": [0, 2], "__ref_s3_data": null}], "text": "98", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.39404296875, 28.0323486328125, 334.4214172363281, 37.30413818359375], "page": 114, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.21266174316406, 699.2781372070312, 514.509765625, 721.2932739257812], "page": 115, "span": [0, 92], "__ref_s3_data": null}], "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.27816772460938, 562.5570068359375, 349.6502685546875, 571.9398193359375], "page": 115, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/115"}, {"prov": [{"bbox": [135.8977813720703, 463.65936279296875, 547.1959838867188, 546.065673828125], "page": 115, "span": [0, 613], "__ref_s3_data": null}], "text": "When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer's policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.05642700195312, 445.9201965332031, 321.6575622558594, 456.6171875], "page": 115, "span": [0, 37], "__ref_s3_data": null}], "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.81124877929688, 400.6603698730469, 520.1124877929688, 434.6428527832031], "page": 115, "span": [0, 195], "__ref_s3_data": null}], "text": "The literal value of '123-45-7890' is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.4740447998047, 354.605712890625, 547.264404296875, 388.69134521484375], "page": 115, "span": [0, 217], "__ref_s3_data": null}], "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.00121307373047, 322.03729248046875, 184.5458984375, 334.622802734375], "page": 115, "span": [0, 19], "__ref_s3_data": null}], "text": "6.4.2 Index advisor", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.94943237304688, 274.29296875, 544.1452026367188, 308.490966796875], "page": 115, "span": [0, 265], "__ref_s3_data": null}], "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8879852294922, 204.172119140625, 543.59814453125, 262.5904541015625], "page": 115, "span": [0, 434], "__ref_s3_data": null}], "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [376.0592956542969, 27.951171875, 523.6287841796875, 37.01708984375], "page": 115, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.5274047851562, 27.93828010559082, 547.2591552734375, 37.70538330078125], "page": 115, "span": [0, 2], "__ref_s3_data": null}], "text": "99", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.3820037841797, 699.0840454101562, 529.2249145507812, 721.3514404296875], "page": 116, "span": [0, 122], "__ref_s3_data": null}], "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user's predicate and the RCAC predicate.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.15460205078125, 401.260009765625, 286.3040466308594, 410.5371398925781], "page": 116, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 6-18 Index advice and RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/116"}, {"prov": [{"bbox": [136.26499938964844, 362.8584899902344, 530.6282958984375, 384.9390869140625], "page": 116, "span": [0, 116], "__ref_s3_data": null}], "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.29851531982422, 225.1319580078125, 271.84735107421875, 234.64019775390625], "page": 116, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 6-19 Index advisor based on the RCAC rule", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/117"}, {"prov": [{"bbox": [136.3258819580078, 186.391845703125, 545.009521484375, 208.79052734375], "page": 116, "span": [0, 116], "__ref_s3_data": null}], "text": "For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.258544921875, 157.24700927734375, 546.534423828125, 179.91497802734375], "page": 116, "span": [0, 108], "__ref_s3_data": null}], "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.1768798828125, 124.9212646484375, 251.73373413085938, 138.27239990234375], "page": 116, "span": [0, 29], "__ref_s3_data": null}], "text": "6.4.3 Metadata using catalogs", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8922119140625, 65.63323974609375, 519.360595703125, 112.05975341796875], "page": 116, "span": [0, 281], "__ref_s3_data": null}], "text": "To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.36641693115234, 27.93828010559082, 83.98200225830078, 37.702392578125], "page": 116, "span": [0, 3], "__ref_s3_data": null}], "text": "100", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.54092407226562, 27.9837646484375, 339.8568115234375, 37.3668212890625], "page": 116, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.48927307128906, 710.9666137695312, 409.46722412109375, 721.3510131835938], "page": 117, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [64.26973724365234, 537.1303100585938, 197.03440856933594, 546.5089111328125], "page": 117, "span": [0, 29], "__ref_s3_data": null}], "text": "Figure 6-20 RCAC and catalogs", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.15829467773438, 510.442138671875, 430.36700439453125, 520.781005859375], "page": 117, "span": [0, 60], "__ref_s3_data": null}], "text": "The SYSCONTROLS catalog view contains the following columns:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.715576171875, 493.5987243652344, 229.52528381347656, 503.4774169921875], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH COLUMN_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.78355407714844, 481.5989074707031, 231.54153442382812, 491.41107177734375], "page": 117, "span": [0, 28], "__ref_s3_data": null}], "text": "- GLYPH CONTROL_TYPE", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8020477294922, 469.5990905761719, 219.97596740722656, 479.5697326660156], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH CREATE_TIME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.65097045898438, 457.5992736816406, 190.9705047607422, 467.5733947753906], "page": 117, "span": [0, 22], "__ref_s3_data": null}], "text": "- GLYPH ENABLE", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5606231689453, 445.5994567871094, 207.5435791015625, 455.9203186035156], "page": 117, "span": [0, 24], "__ref_s3_data": null}], "text": "- GLYPH ENFORCED", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.4138946533203, 433.5996398925781, 220.03372192382812, 443.9335632324219], "page": 117, "span": [0, 26], "__ref_s3_data": null}], "text": "- GLYPH ASP_NUMBER", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.53013610839844, 421.5998229980469, 193.41262817382812, 431.7314147949219], "page": 117, "span": [0, 24], "__ref_s3_data": null}], "text": "- GLYPH IMPLICIT", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5832061767578, 409.6000061035156, 182.29428100585938, 419.8447570800781], "page": 117, "span": [0, 21], "__ref_s3_data": null}], "text": "- GLYPH LABEL", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.9365997314453, 397.6001892089844, 226.72982788085938, 407.84820556640625], "page": 117, "span": [0, 28], "__ref_s3_data": null}], "text": "- GLYPH LAST_ALTERED", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.55462646484375, 385.6003723144531, 236.96395874023438, 396.1351623535156], "page": 117, "span": [0, 28], "__ref_s3_data": null}], "text": "- GLYPH LONG_COMMENT", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.59799194335938, 373.6005554199219, 213.861328125, 383.8674621582031], "page": 117, "span": [0, 25], "__ref_s3_data": null}], "text": "- GLYPH RCAC_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.62445068359375, 361.6007385253906, 223.28578186035156, 372.0160217285156], "page": 117, "span": [0, 26], "__ref_s3_data": null}], "text": "- GLYPH RCAC_OWNER", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.59918212890625, 349.6009216308594, 227.91741943359375, 360.0481262207031], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH RCAC_SCHEMA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.649658203125, 337.6011047363281, 202.9622802734375, 347.80303955078125], "page": 117, "span": [0, 24], "__ref_s3_data": null}], "text": "- GLYPH RULETEXT", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.53004455566406, 325.6012878417969, 275.5697021484375, 335.63287353515625], "page": 117, "span": [0, 34], "__ref_s3_data": null}], "text": "- GLYPH SYSTEM_COLUMN_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6468963623047, 313.6014709472656, 263.12493896484375, 324.02764892578125], "page": 117, "span": [0, 33], "__ref_s3_data": null}], "text": "- GLYPH SYSTEM_TABLE_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.67005920410156, 301.6016540527344, 276.916015625, 311.7246398925781], "page": 117, "span": [0, 35], "__ref_s3_data": null}], "text": "- GLYPH SYSTEM_TABLE_SCHEMA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.68890380859375, 289.6018371582031, 216.28732299804688, 299.7500915527344], "page": 117, "span": [0, 26], "__ref_s3_data": null}], "text": "- GLYPH TABLE_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.64125061035156, 277.6020202636719, 230.32113647460938, 287.85296630859375], "page": 117, "span": [0, 28], "__ref_s3_data": null}], "text": "- GLYPH TABLE_SCHEMA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.58006286621094, 265.6022033691406, 235.0215301513672, 275.72454833984375], "page": 117, "span": [0, 29], "__ref_s3_data": null}], "text": "- GLYPH TBCORRELATION", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2348175048828, 243.0057373046875, 451.0119934082031, 253.50799560546875], "page": 117, "span": [0, 63], "__ref_s3_data": null}], "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6955108642578, 226.60281372070312, 229.20022583007812, 237.07763671875], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH COLUMN_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7337188720703, 214.60301208496094, 231.54153442382812, 224.7735595703125], "page": 117, "span": [0, 28], "__ref_s3_data": null}], "text": "- GLYPH CONTROL_TYPE", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7036590576172, 202.60321044921875, 223.13241577148438, 212.99359130859375], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH IASP_NUMBER", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.64175415039062, 190.60340881347656, 225.03065490722656, 201.30029296875], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH OBJECT_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.65492248535156, 178.60360717773438, 239.2605743408203, 189.1546630859375], "page": 117, "span": [0, 29], "__ref_s3_data": null}], "text": "- GLYPH OBJECT_SCHEMA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.42955017089844, 166.6038055419922, 222.27175903320312, 177.33233642578125], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH OBJECT_TYPE", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63658142089844, 154.60400390625, 241.48854064941406, 165.0909423828125], "page": 117, "span": [0, 30], "__ref_s3_data": null}], "text": "- GLYPH PARM_SIGNATURE", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.70877075195312, 142.6042022705078, 213.68124389648438, 152.955078125], "page": 117, "span": [0, 25], "__ref_s3_data": null}], "text": "- GLYPH RCAC_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.70849609375, 130.60440063476562, 227.56272888183594, 140.8154296875], "page": 117, "span": [0, 27], "__ref_s3_data": null}], "text": "- GLYPH RCAC_SCHEMA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.59637451171875, 118.6045913696289, 262.728271484375, 129.17388916015625], "page": 117, "span": [0, 33], "__ref_s3_data": null}], "text": "- GLYPH SYSTEM_TABLE_NAME", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5303497314453, 106.60478210449219, 276.7511291503906, 116.96820068359375], "page": 117, "span": [0, 35], "__ref_s3_data": null}], "text": "- GLYPH SYSTEM_TABLE_SCHEMA", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2892303466797, 84.58521270751953, 495.9486389160156, 94.78704833984375], "page": 117, "span": [0, 81], "__ref_s3_data": null}], "text": "For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3297119140625, 55.894439697265625, 546.534423828125, 78.0645751953125], "page": 117, "span": [0, 86], "__ref_s3_data": null}], "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [370.6695251464844, 28.1142578125, 517.9691772460938, 37.12347412109375], "page": 117, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.2025146484375, 27.93828010559082, 547.2587890625, 37.766845703125], "page": 117, "span": [0, 3], "__ref_s3_data": null}], "text": "101", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.48343658447266, 687.0557861328125, 524.18310546875, 722.143798828125], "page": 118, "span": [0, 65], "__ref_s3_data": null}], "text": "6.5 Views, materialized query tables, and query rewrite with RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.83413696289062, 648.2785034179688, 538.62841796875, 670.753173828125], "page": 118, "span": [0, 133], "__ref_s3_data": null}], "text": "This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.00408935546875, 615.67724609375, 137.59872436523438, 628.84814453125], "page": 118, "span": [0, 11], "__ref_s3_data": null}], "text": "6.5.1 Views", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.95098876953125, 544.0421142578125, 547.2675170898438, 602.7352294921875], "page": 118, "span": [0, 453], "__ref_s3_data": null}], "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.1767120361328, 249.74176025390625, 311.7160949707031, 259.17498779296875], "page": 118, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 6-21 View definition and user query", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/118"}, {"prov": [{"bbox": [64.45819091796875, 27.93828010559082, 83.98200225830078, 37.70367431640625], "page": 118, "span": [0, 3], "__ref_s3_data": null}], "text": "102", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.59468078613281, 27.95623779296875, 339.92059326171875, 37.39764404296875], "page": 118, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.9568634033203, 698.8374633789062, 519.4752807617188, 721.3858642578125], "page": 119, "span": [0, 97], "__ref_s3_data": null}], "text": "What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.89744567871094, 392.4318542480469, 291.39215087890625, 401.9805908203125], "page": 119, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 6-22 Query rewrite with RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/119"}, {"prov": [{"bbox": [64.23944091796875, 360.3772888183594, 255.48699951171875, 373.4521484375], "page": 119, "span": [0, 31], "__ref_s3_data": null}], "text": "6.5.2 Materialized query tables", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8983154296875, 312.9986572265625, 547.2784423828125, 347.2080078125], "page": 119, "span": [0, 271], "__ref_s3_data": null}], "text": "When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.05838012695312, 266.9794616699219, 547.2845458984375, 301.335205078125], "page": 119, "span": [0, 242], "__ref_s3_data": null}], "text": "Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.96612548828125, 220.9602813720703, 547.2724609375, 255.226806640625], "page": 119, "span": [0, 266], "__ref_s3_data": null}], "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.03353881835938, 199.00047302246094, 342.15032958984375, 209.17041015625], "page": 119, "span": [0, 48], "__ref_s3_data": null}], "text": "The following example illustrates this scenario:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.65509033203125, 181.96090698242188, 270.4134826660156, 191.9061279296875], "page": 119, "span": [0, 28], "__ref_s3_data": null}], "text": "- 1. Create schema and tables:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.20018005371094, 117.27072143554688, 547.2555541992188, 174.04469299316406], "page": 119, "span": [0, 248], "__ref_s3_data": null}], "text": "CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [370.6492004394531, 28.08099365234375, 517.9691772460938, 37.12176513671875], "page": 119, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.1799926757812, 27.93828010559082, 547.2587890625, 37.73895263671875], "page": 119, "span": [0, 3], "__ref_s3_data": null}], "text": "103", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.42345428466797, 27.93828010559082, 83.98200225830078, 37.64996337890625], "page": 120, "span": [0, 3], "__ref_s3_data": null}], "text": "104", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.57719421386719, 27.90020751953125, 339.839599609375, 37.33319091796875], "page": 120, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.87754821777344, 699.2785034179688, 545.8660888671875, 721.4038696289062], "page": 120, "span": [0, 99], "__ref_s3_data": null}], "text": "- 2. Create a row permission that allows the employees to see only rows from the region they work in:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [149.48439025878906, 598.5888061523438, 547.1957397460938, 693.0859985351562], "page": 120, "span": [0, 281], "__ref_s3_data": null}], "text": "/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [136.09523010253906, 581.0382690429688, 362.0214538574219, 591.50830078125], "page": 120, "span": [0, 48], "__ref_s3_data": null}], "text": "- 3. Create an MQT to summarize sales by location:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [149.7567138671875, 468.5709228515625, 545.9945678710938, 574.7091064453125], "page": 120, "span": [0, 327], "__ref_s3_data": null}], "text": "-- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.95851135253906, 450.9034118652344, 354.3462829589844, 461.5218505859375], "page": 120, "span": [0, 48], "__ref_s3_data": null}], "text": "- 4. Populate the MQT (permission is not applied):", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.7456512451172, 421.72467041015625, 416.03656005859375, 443.83050537109375], "page": 120, "span": [0, 93], "__ref_s3_data": null}], "text": "/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [150.36888122558594, 392.90313720703125, 547.1997680664062, 415.4218444824219], "page": 120, "span": [0, 166], "__ref_s3_data": null}], "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [150.5345001220703, 364.5924987792969, 401.0367736816406, 386.6250915527344], "page": 120, "span": [0, 71], "__ref_s3_data": null}], "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.50941467285156, 347.0646057128906, 385.903564453125, 357.568115234375], "page": 120, "span": [0, 53], "__ref_s3_data": null}], "text": "- 5. Create an MQT to summarize by region and location:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.02435302734375, 246.57443237304688, 500.9953308105469, 340.8066711425781], "page": 120, "span": [0, 273], "__ref_s3_data": null}], "text": "-- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.33966064453125, 228.83648681640625, 452.1078186035156, 239.47381591796875], "page": 120, "span": [0, 67], "__ref_s3_data": null}], "text": "- 6. Populate the Region_location_Sales_MQT (permission not applied):", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.35263061523438, 199.35321044921875, 535.9747924804688, 222.1837158203125], "page": 120, "span": [0, 122], "__ref_s3_data": null}], "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [150.33642578125, 171.2867889404297, 502.06903076171875, 193.4903564453125], "page": 120, "span": [0, 140], "__ref_s3_data": null}], "text": "The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [150.63597106933594, 142.13360595703125, 401.0367736816406, 163.86737060546875], "page": 120, "span": [0, 71], "__ref_s3_data": null}], "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.60304260253906, 711.0797729492188, 376.0711669921875, 721.2241821289062], "page": 121, "span": [0, 55], "__ref_s3_data": null}], "text": "This example has the following additional implications:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.650634765625, 670.2985229492188, 547.2718505859375, 704.3900756835938], "page": 121, "span": [0, 199], "__ref_s3_data": null}], "text": "- GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.53536987304688, 616.5928955078125, 547.3106079101562, 663.3336791992188], "page": 121, "span": [0, 300], "__ref_s3_data": null}], "text": "- GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.59909057617188, 588.2799072265625, 539.1951904296875, 610.4366455078125], "page": 121, "span": [0, 126], "__ref_s3_data": null}], "text": "- GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.1431655883789, 555.5803833007812, 184.48561096191406, 568.83935546875], "page": 121, "span": [0, 19], "__ref_s3_data": null}], "text": "6.5.3 Query rewrite", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.05111694335938, 520.2984619140625, 527.1223754882812, 542.5366821289062], "page": 121, "span": [0, 110], "__ref_s3_data": null}], "text": "Query rewrite is a technique that the optimizer can use to change the original request to improve performance.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7935791015625, 450.2796325683594, 547.158935546875, 508.524169921875], "page": 121, "span": [0, 401], "__ref_s3_data": null}], "text": "For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.94505310058594, 403.91461181640625, 547.3839721679688, 437.9142761230469], "page": 121, "span": [0, 197], "__ref_s3_data": null}], "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.35859680175781, 360.5837097167969, 436.9425048828125, 376.3916931152344], "page": 121, "span": [0, 47], "__ref_s3_data": null}], "text": "6.6 RCAC effects on performance and scalability", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.86106872558594, 249.62506103515625, 547.3291625976562, 344.4602966308594], "page": 121, "span": [0, 696], "__ref_s3_data": null}], "text": "As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a \"query\", and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user's query, much like a query referencing a view.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9717254638672, 180.28079223632812, 547.2525634765625, 238.62030029296875], "page": 121, "span": [0, 455], "__ref_s3_data": null}], "text": "For native record level access, this RCAC \"query\" is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user's permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7317657470703, 74.0277099609375, 547.2844848632812, 167.69171142578125], "page": 121, "span": [0, 698], "__ref_s3_data": null}], "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original \"random read\" request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \"not found\" if the user is not entitled to any of the records.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [370.60284423828125, 28.1068115234375, 517.9691772460938, 37.1180419921875], "page": 121, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.1432495117188, 27.93828010559082, 547.2587890625, 37.7501220703125], "page": 121, "span": [0, 3], "__ref_s3_data": null}], "text": "105", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.41461944580078, 27.93828010559082, 83.98200225830078, 37.71966552734375], "page": 122, "span": [0, 3], "__ref_s3_data": null}], "text": "106", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.62214660644531, 27.96990966796875, 339.8680725097656, 37.41748046875], "page": 122, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.8849639892578, 675.0093994140625, 543.5155029296875, 721.650146484375], "page": 122, "span": [0, 285], "__ref_s3_data": null}], "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the \"next record\" in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.106201171875, 378.3799743652344, 333.33013916015625, 388.0724182128906], "page": 122, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 6-23 Native record access with no RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/120"}, {"prov": [{"bbox": [136.06326293945312, 675.2687377929688, 547.295654296875, 721.341064453125], "page": 123, "span": [0, 305], "__ref_s3_data": null}], "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.92271423339844, 374.3691101074219, 341.2294616699219, 384.0206298828125], "page": 123, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 6-24 Native record level access with RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/121"}, {"prov": [{"bbox": [135.81785583496094, 335.78143310546875, 525.8615112304688, 358.041748046875], "page": 123, "span": [0, 134], "__ref_s3_data": null}], "text": "After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.4524917602539, 291.993896484375, 510.04888916015625, 308.724853515625], "page": 123, "span": [0, 58], "__ref_s3_data": null}], "text": "6.7 Exclusive lock to implement RCAC (availability issues)", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.74249267578125, 242.07867431640625, 547.2496948242188, 275.99029541015625], "page": 123, "span": [0, 205], "__ref_s3_data": null}], "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.18580627441406, 219.714111328125, 283.20501708984375, 230.0118408203125], "page": 123, "span": [0, 33], "__ref_s3_data": null}], "text": "Consider the following scenarios:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.5818634033203, 203.0792999267578, 464.85845947265625, 213.38800048828125], "page": 123, "span": [0, 84], "__ref_s3_data": null}], "text": "- GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.1683349609375, 174.03993225097656, 547.4009399414062, 196.04046630859375], "page": 123, "span": [0, 106], "__ref_s3_data": null}], "text": "- -Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.33261108398438, 145.06031799316406, 546.0185546875, 167.51373291015625], "page": 123, "span": [0, 126], "__ref_s3_data": null}], "text": "- -Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.21334838867188, 127.65850830078125, 546.8192749023438, 138.00274658203125], "page": 123, "span": [0, 84], "__ref_s3_data": null}], "text": "- -Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.15476989746094, 87.04132080078125, 547.1649169921875, 121.0460205078125], "page": 123, "span": [0, 196], "__ref_s3_data": null}], "text": "- -Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.30223083496094, 57.88128662109375, 545.1102905273438, 80.0487060546875], "page": 123, "span": [0, 134], "__ref_s3_data": null}], "text": "The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [370.56109619140625, 28.08575439453125, 517.9691772460938, 37.179931640625], "page": 123, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.158935546875, 27.93828010559082, 547.2587890625, 37.82098388671875], "page": 123, "span": [0, 3], "__ref_s3_data": null}], "text": "107", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.47494506835938, 699.2672119140625, 547.2257080078125, 721.363037109375], "page": 124, "span": [0, 171], "__ref_s3_data": null}], "text": "- GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.47486877441406, 646.2472534179688, 547.350341796875, 692.6351318359375], "page": 124, "span": [0, 375], "__ref_s3_data": null}], "text": "- GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.78724670410156, 629.1058959960938, 451.01605224609375, 639.2891845703125], "page": 124, "span": [0, 59], "__ref_s3_data": null}], "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [150.4237060546875, 588.2802734375, 532.7249145507812, 622.5931396484375], "page": 124, "span": [0, 239], "__ref_s3_data": null}], "text": "To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.3337173461914, 545.0363159179688, 380.354736328125, 561.4805908203125], "page": 124, "span": [0, 39], "__ref_s3_data": null}], "text": "6.8 Avoiding propagation of masked data", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.83189392089844, 494.2587890625, 547.30224609375, 527.9580078125], "page": 124, "span": [0, 275], "__ref_s3_data": null}], "text": "Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.41940307617188, 460.2991638183594, 547.1968383789062, 482.62445068359375], "page": 124, "span": [0, 178], "__ref_s3_data": null}], "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.7989959716797, 443.54840087890625, 331.6763000488281, 452.32318115234375], "page": 124, "span": [0, 39], "__ref_s3_data": null}], "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9666290283203, 409.0923767089844, 533.7767333984375, 431.26483154296875], "page": 124, "span": [0, 152], "__ref_s3_data": null}], "text": "The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8269805908203, 374.9996337890625, 532.6522827148438, 397.2376708984375], "page": 124, "span": [0, 114], "__ref_s3_data": null}], "text": "There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.09215545654297, 342.6772766113281, 260.1020202636719, 355.58514404296875], "page": 124, "span": [0, 31], "__ref_s3_data": null}], "text": "6.8.1 Check constraint solution", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.16067504882812, 319.16241455078125, 416.498779296875, 329.11370849609375], "page": 124, "span": [0, 64], "__ref_s3_data": null}], "text": "One way to prevent this problem is to define a check constraint.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7001190185547, 249.27944946289062, 547.2566528320312, 307.400634765625], "page": 124, "span": [0, 382], "__ref_s3_data": null}], "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0422821044922, 203.26028442382812, 547.2803955078125, 237.33502197265625], "page": 124, "span": [0, 217], "__ref_s3_data": null}], "text": "In the Example 6-4, the mask is defined to return a value of 'XXX-XX-nnnn' for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.23851013183594, 181.71978759765625, 277.07000732421875, 191.49853515625], "page": 124, "span": [0, 49], "__ref_s3_data": null}], "text": "Example 6-4 Check constraint to avoid masked data", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [64.16464233398438, 55.4718017578125, 414.59515380859375, 173.89044189453125], "page": 124, "span": [0, 297], "__ref_s3_data": null}], "text": "CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.37716674804688, 27.93828010559082, 83.98200225830078, 37.57183837890625], "page": 124, "span": [0, 3], "__ref_s3_data": null}], "text": "108", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.70913696289062, 27.999267578125, 339.819580078125, 37.4007568359375], "page": 124, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.44700622558594, 600.7581176757812, 546.8219604492188, 721.5032958984375], "page": 125, "span": [0, 418], "__ref_s3_data": null}], "text": "ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value.", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.23657989501953, 563.4954223632812, 240.5440673828125, 576.9061279296875], "page": 125, "span": [0, 29], "__ref_s3_data": null}], "text": "6.8.2 Before trigger solution", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.24661254882812, 528.2785034179688, 547.3193359375, 550.7080688476562], "page": 125, "span": [0, 171], "__ref_s3_data": null}], "text": "The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.40687561035156, 506.462158203125, 336.7406311035156, 515.987548828125], "page": 125, "span": [0, 47], "__ref_s3_data": null}], "text": "Example 6-5 Before trigger to avoid masked data", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [135.9194793701172, 379.7377624511719, 506.87237548828125, 500.95086669921875], "page": 125, "span": [0, 298], "__ref_s3_data": null}], "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.4358139038086, 329.9898681640625, 360.91705322265625, 346.6530456542969], "page": 125, "span": [0, 36], "__ref_s3_data": null}], "text": "6.9 Triggers and functions (SECURED)", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.90432739257812, 255.75531005859375, 547.2467651367188, 314.7923278808594], "page": 125, "span": [0, 409], "__ref_s3_data": null}], "text": "There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.1463851928711, 222.77587890625, 151.61126708984375, 236.09356689453125], "page": 125, "span": [0, 14], "__ref_s3_data": null}], "text": "6.9.1 Triggers", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.57107543945312, 164.00341796875, 547.2885131835938, 209.91900634765625], "page": 125, "span": [0, 318], "__ref_s3_data": null}], "text": "Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [370.6949157714844, 28.07379150390625, 517.9691772460938, 37.11236572265625], "page": 125, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.17626953125, 27.93828010559082, 547.2587890625, 37.8399658203125], "page": 125, "span": [0, 3], "__ref_s3_data": null}], "text": "109", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.38241577148438, 27.93828010559082, 83.98200225830078, 37.776123046875], "page": 126, "span": [0, 3], "__ref_s3_data": null}], "text": "110", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.55854797363281, 27.9803466796875, 339.819580078125, 37.32958984375], "page": 126, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.9443817138672, 675.0651245117188, 547.1917114257812, 721.4259643554688], "page": 126, "span": [0, 362], "__ref_s3_data": null}], "text": "Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.2041778564453, 653.5504760742188, 269.5399475097656, 663.527587890625], "page": 126, "span": [0, 27], "__ref_s3_data": null}], "text": "Example 6-6 Trigger SECURED", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [135.4769287109375, 514.72314453125, 506.97552490234375, 647.4617919921875], "page": 126, "span": [0, 347], "__ref_s3_data": null}], "text": "/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.11894226074219, 476.65728759765625, 166.5321044921875, 489.5697021484375], "page": 126, "span": [0, 15], "__ref_s3_data": null}], "text": "6.9.2 Functions", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.63002014160156, 429.1574401855469, 547.2664794921875, 463.57928466796875], "page": 126, "span": [0, 220], "__ref_s3_data": null}], "text": "Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [134.9473114013672, 266.78814697265625, 547.4903564453125, 416.7194519042969], "page": 126, "span": [0, 275], "__ref_s3_data": null}], "text": "Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [135.8338165283203, 205.03076171875, 547.2584838867188, 251.36279296875], "page": 126, "span": [0, 337], "__ref_s3_data": null}], "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.09840393066406, 183.0419921875, 282.6751708984375, 193.3720703125], "page": 126, "span": [0, 32], "__ref_s3_data": null}], "text": "Consider the following examples:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.61990356445312, 166.24098205566406, 547.1887817382812, 176.2091064453125], "page": 126, "span": [0, 96], "__ref_s3_data": null}], "text": "- GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.3736572265625, 137.1123046875, 547.14794921875, 159.58026123046875], "page": 126, "span": [0, 148], "__ref_s3_data": null}], "text": "- MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.47885131835938, 108.28175354003906, 517.9143676757812, 130.7811279296875], "page": 126, "span": [0, 88], "__ref_s3_data": null}], "text": "- NOT SECURED is the default on the create function unless SECURED is explicitly selected.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.35072326660156, 78.7335205078125, 523.39453125, 101.58184814453125], "page": 126, "span": [0, 108], "__ref_s3_data": null}], "text": "This same rule applies for any function that might be invoked with a masked column specified as an argument.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.3511199951172, 711.2779541015625, 419.7916259765625, 721.4021606445312], "page": 127, "span": [0, 74], "__ref_s3_data": null}], "text": "- GLYPH Table2 column SSN has a column mask that is defined on it.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.33642578125, 682.29833984375, 537.510986328125, 704.7354736328125], "page": 127, "span": [0, 131], "__ref_s3_data": null}], "text": "- SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.35963439941406, 638.777587890625, 387.579833984375, 655.222900390625], "page": 127, "span": [0, 42], "__ref_s3_data": null}], "text": "6.10 RCAC is only one part of the solution", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8172607421875, 564.21142578125, 547.2545776367188, 622.630615234375], "page": 127, "span": [0, 379], "__ref_s3_data": null}], "text": "When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.24098205566406, 529.3187866210938, 544.8680419921875, 552.024658203125], "page": 127, "span": [0, 146], "__ref_s3_data": null}], "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0601806640625, 218.522216796875, 366.7088317871094, 227.9825439453125], "page": 127, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 6-25 Object-level security and RCAC permissions", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/122"}, {"prov": [{"bbox": [135.88059997558594, 179.97857666015625, 547.2168579101562, 201.9534912109375], "page": 127, "span": [0, 121], "__ref_s3_data": null}], "text": "To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.60548400878906, 133.54364013671875, 547.2177124023438, 167.94500732421875], "page": 127, "span": [0, 232], "__ref_s3_data": null}], "text": "The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.01368713378906, 87.8009033203125, 547.24267578125, 122.1590576171875], "page": 127, "span": [0, 222], "__ref_s3_data": null}], "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [370.63580322265625, 28.08636474609375, 517.9691772460938, 37.11981201171875], "page": 127, "span": [0, 36], "__ref_s3_data": null}], "text": "Chapter 6. Additional considerations", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [529.969970703125, 27.93828010559082, 547.2587890625, 37.74169921875], "page": 127, "span": [0, 3], "__ref_s3_data": null}], "text": "111", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.37667846679688, 27.93828010559082, 83.98200225830078, 37.83319091796875], "page": 128, "span": [0, 3], "__ref_s3_data": null}], "text": "112", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.55838012695312, 27.9609375, 339.87249755859375, 37.4378662109375], "page": 128, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.75006103515625, 675.1400146484375, 547.2962646484375, 721.4137573242188], "page": 128, "span": [0, 332], "__ref_s3_data": null}], "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of \"restricting access to data\", and \"needing access to data\".", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/123"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 129, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 7.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 698.831298828125], "page": 129, "span": [0, 1], "__ref_s3_data": null}], "text": "7", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 481.8584899902344, 547.2606201171875, 538.93505859375], "page": 129, "span": [0, 40], "__ref_s3_data": null}], "text": "Row and Column Access Control management", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.95159912109375, 409.8076477050781, 530.336181640625, 443.9356689453125], "page": 129, "span": [0, 253], "__ref_s3_data": null}], "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9311981201172, 387.68560791015625, 347.4121398925781, 397.9674377441406], "page": 129, "span": [0, 49], "__ref_s3_data": null}], "text": "The following topics are covered in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7118682861328, 371.0793151855469, 356.2835388183594, 381.1703796386719], "page": 129, "span": [0, 57], "__ref_s3_data": null}], "text": "- GLYPH Managing row permissions and column masks", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60548400878906, 359.0097351074219, 406.06463623046875, 369.25701904296875], "page": 129, "span": [0, 69], "__ref_s3_data": null}], "text": "- GLYPH Managing tables with row permissions and column masks", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.78424072265625, 346.86358642578125, 323.0509338378906, 357.164306640625], "page": 129, "span": [0, 54], "__ref_s3_data": null}], "text": "- GLYPH Monitoring and auditing function usage", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.72496032714844, 27.93780517578125, 257.24334716796875, 37.267822265625], "page": 129, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.0635986328125, 27.93828010559082, 547.2587890625, 37.69476318359375], "page": 129, "span": [0, 3], "__ref_s3_data": null}], "text": "113", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.16378021240234, 702.5186157226562, 449.7918701171875, 718.4564208984375], "page": 130, "span": [0, 45], "__ref_s3_data": null}], "text": "7.1 Managing row permissions and column masks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.75418090820312, 675.7001342773438, 541.12109375, 685.8709106445312], "page": 130, "span": [0, 84], "__ref_s3_data": null}], "text": "This section focuses on the management of the RCAC row permissions and column masks.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.90059280395508, 643.1283569335938, 228.30335998535156, 656.04248046875], "page": 130, "span": [0, 23], "__ref_s3_data": null}], "text": "7.1.1 Source management", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.94558715820312, 583.6402587890625, 546.4277954101562, 630.015625], "page": 130, "span": [0, 287], "__ref_s3_data": null}], "text": "The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.89431762695312, 490.18017578125, 547.2933959960938, 571.918212890625], "page": 130, "span": [0, 596], "__ref_s3_data": null}], "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.8327522277832, 457.04302978515625, 231.4643096923828, 470.3725891113281], "page": 130, "span": [0, 27], "__ref_s3_data": null}], "text": "7.1.2 Modifying definitions", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9163360595703, 397.6696472167969, 547.1988525390625, 443.97235107421875], "page": 130, "span": [0, 334], "__ref_s3_data": null}], "text": "After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8429718017578, 339.7766418457031, 547.2922973632812, 385.9662170410156], "page": 130, "span": [0, 296], "__ref_s3_data": null}], "text": "This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.0130844116211, 307.0821228027344, 214.6126708984375, 320.2338562011719], "page": 130, "span": [0, 24], "__ref_s3_data": null}], "text": "7.1.3 Turning on and off", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.03684997558594, 235.916259765625, 547.182861328125, 293.85089111328125], "page": 130, "span": [0, 435], "__ref_s3_data": null}], "text": "As described in 3.1.2, \"Enabling and activating RCAC\" on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [142.16134643554688, 171.52093505859375, 541.1311645507812, 218.0211181640625], "page": 130, "span": [0, 300], "__ref_s3_data": null}], "text": "Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.14586639404297, 134.349365234375, 183.9399871826172, 147.51336669921875], "page": 130, "span": [0, 18], "__ref_s3_data": null}], "text": "7.1.4 Regenerating", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.13162231445312, 99.15777587890625, 547.3272705078125, 121.35113525390625], "page": 130, "span": [0, 172], "__ref_s3_data": null}], "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.35222625732422, 27.93828010559082, 83.98200225830078, 37.7677001953125], "page": 130, "span": [0, 3], "__ref_s3_data": null}], "text": "114", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.60916137695312, 28.02947998046875, 339.819580078125, 37.29241943359375], "page": 130, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.9884796142578, 639.279052734375, 547.2010498046875, 721.5679931640625], "page": 131, "span": [0, 498], "__ref_s3_data": null}], "text": "For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.99624633789062, 580.9271240234375, 547.1602172851562, 627.4041137695312], "page": 131, "span": [0, 357], "__ref_s3_data": null}], "text": "Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.91755676269531, 537.7216796875, 536.6239013671875, 553.80029296875], "page": 131, "span": [0, 57], "__ref_s3_data": null}], "text": "7.2 Managing tables with row permissions and column masks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8260498046875, 499.2984619140625, 547.2647094726562, 521.4241943359375], "page": 131, "span": [0, 94], "__ref_s3_data": null}], "text": "This section examines the object management considerations after RCAC is added to a DB2 table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.97272872924805, 466.6372985839844, 205.3369598388672, 479.5977783203125], "page": 131, "span": [0, 22], "__ref_s3_data": null}], "text": "7.2.1 Save and restore", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9362335205078, 407.25885009765625, 547.1621704101562, 453.3270568847656], "page": 131, "span": [0, 261], "__ref_s3_data": null}], "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.97621154785156, 361.052978515625, 547.2257080078125, 395.47320556640625], "page": 131, "span": [0, 268], "__ref_s3_data": null}], "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [283.8012390136719, 27.9959716796875, 518.0120849609375, 37.15869140625], "page": 131, "span": [0, 51], "__ref_s3_data": null}], "text": "Chapter 7. Row and Column Access Control management", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.0354614257812, 27.93828010559082, 547.2587890625, 37.67431640625], "page": 131, "span": [0, 3], "__ref_s3_data": null}], "text": "115", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.29827880859375, 27.93828010559082, 83.98200225830078, 37.77142333984375], "page": 132, "span": [0, 3], "__ref_s3_data": null}], "text": "116", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.44544219970703, 28.01568603515625, 339.8977355957031, 37.3984375], "page": 132, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.94534301757812, 591.2671508789062, 546.4418334960938, 721.4252319335938], "page": 132, "span": [0, 872], "__ref_s3_data": null}], "text": "For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, \"Regenerating\" on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026 SELECT C.CUSTOMER_ID FROM CUSTOMERS C \u2026). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7970428466797, 325.72674560546875, 333.88006591796875, 335.1150817871094], "page": 132, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 7-1 Restoring tables to different schemas", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/124"}, {"prov": [{"bbox": [135.7681427001953, 238.95770263671875, 547.2655639648438, 309.2113342285156], "page": 132, "span": [0, 477], "__ref_s3_data": null}], "text": "The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the \"Schema qualify names for objects\" and select the \"OR REPLACE clause\", and then run the generated script.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.921077728271484, 206.39764404296875, 196.41009521484375, 219.65240478515625], "page": 132, "span": [0, 21], "__ref_s3_data": null}], "text": "7.2.2 Table migration", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8064727783203, 146.933837890625, 538.5225830078125, 193.502197265625], "page": 132, "span": [0, 329], "__ref_s3_data": null}], "text": "There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9099884033203, 100.94818115234375, 542.6978149414062, 135.37615966796875], "page": 132, "span": [0, 255], "__ref_s3_data": null}], "text": "The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.79965209960938, 67.21551513671875, 524.2598876953125, 89.41839599609375], "page": 132, "span": [0, 132], "__ref_s3_data": null}], "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.03428649902344, 705.3358154296875, 396.1838684082031, 721.896728515625], "page": 133, "span": [0, 42], "__ref_s3_data": null}], "text": "7.3 Monitoring and auditing function usage", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9032745361328, 619.1384887695312, 546.3292236328125, 689.2759399414062], "page": 133, "span": [0, 526], "__ref_s3_data": null}], "text": "While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.86427307128906, 536.7468872070312, 547.2933349609375, 607.3901977539062], "page": 133, "span": [0, 502], "__ref_s3_data": null}], "text": "The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization's data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.72532653808594, 491.26055908203125, 546.2147216796875, 525.425537109375], "page": 133, "span": [0, 193], "__ref_s3_data": null}], "text": "A new journal entry type of \"AX\" for journal entry code \"T\" (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6563262939453, 474.28076171875, 396.8944396972656, 484.5631408691406], "page": 133, "span": [0, 70], "__ref_s3_data": null}], "text": "- GLYPH IBM i Version 7.2 Journal Management Guide , found at:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.67897033691406, 445.051025390625, 545.9945678710938, 467.1967468261719], "page": 133, "span": [0, 92], "__ref_s3_data": null}], "text": "- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60202026367188, 427.25750732421875, 387.5917663574219, 438.09796142578125], "page": 133, "span": [0, 70], "__ref_s3_data": null}], "text": "- GLYPH IBM i Version 7.2 Security Reference Guide , found at:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.6260986328125, 399.26019287109375, 546.2595825195312, 421.3846740722656], "page": 133, "span": [0, 90], "__ref_s3_data": null}], "text": "- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [283.7824401855469, 27.99267578125, 518.0120849609375, 37.1876220703125], "page": 133, "span": [0, 51], "__ref_s3_data": null}], "text": "Chapter 7. Row and Column Access Control management", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.0186157226562, 27.93828010559082, 547.265380859375, 37.769775390625], "page": 133, "span": [0, 3], "__ref_s3_data": null}], "text": "117", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.53031158447266, 27.93828010559082, 83.98200225830078, 37.923583984375], "page": 134, "span": [0, 3], "__ref_s3_data": null}], "text": "118", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.5851821899414, 27.8642578125, 340.1449890136719, 37.57379150390625], "page": 134, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/125"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 135, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 8.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.7628173828125, 482.1217956542969, 479.93341064453125, 538.7010498046875], "page": 135, "span": [0, 34], "__ref_s3_data": null}], "text": "Designing and planning for success", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9272003173828, 397.414794921875, 538.4698486328125, 444.05712890625], "page": 135, "span": [0, 285], "__ref_s3_data": null}], "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9006805419922, 375.73284912109375, 347.4120788574219, 385.872802734375], "page": 135, "span": [0, 49], "__ref_s3_data": null}], "text": "The following topics are covered in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.63284301757812, 359.0141296386719, 411.53955078125, 369.337890625], "page": 135, "span": [0, 70], "__ref_s3_data": null}], "text": "- GLYPH Implementing RCAC with good design and proper planning", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8564910888672, 347.0796813964844, 284.81951904296875, 357.5201721191406], "page": 135, "span": [0, 46], "__ref_s3_data": null}], "text": "- GLYPH DB2 for i Center of Excellence", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.695404052734375, 27.91717529296875, 257.24334716796875, 37.26922607421875], "page": 135, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.0399169921875, 27.93828010559082, 547.2623901367188, 37.78558349609375], "page": 135, "span": [0, 3], "__ref_s3_data": null}], "text": "119", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 698.8610229492188], "page": 135, "span": [0, 1], "__ref_s3_data": null}], "text": "8", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.5673599243164, 701.9832153320312, 544.5512084960938, 718.5274658203125], "page": 136, "span": [0, 58], "__ref_s3_data": null}], "text": "8.1 Implementing RCAC with good design and proper planning", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9280242919922, 652.1786499023438, 544.7098999023438, 686.1177368164062], "page": 136, "span": [0, 197], "__ref_s3_data": null}], "text": "By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.055419921875, 593.98486328125, 545.359375, 640.219482421875], "page": 136, "span": [0, 318], "__ref_s3_data": null}], "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8184356689453, 524.1407470703125, 547.2506103515625, 582.028076171875], "page": 136, "span": [0, 365], "__ref_s3_data": null}], "text": "This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.80397033691406, 501.5162048339844, 500.5572509765625, 511.94879150390625], "page": 136, "span": [0, 78], "__ref_s3_data": null}], "text": "This paper has described the following pervasive power and advantages of RCAC:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.56689453125, 484.64202880859375, 429.4506530761719, 495.3780212402344], "page": 136, "span": [0, 79], "__ref_s3_data": null}], "text": "- GLYPH Access can be controlled through simple or sophisticated logic.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60137939453125, 472.8739929199219, 351.649169921875, 483.2593688964844], "page": 136, "span": [0, 62], "__ref_s3_data": null}], "text": "- GLYPH Virtually no application changes are required.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.644775390625, 460.9553527832031, 491.7782287597656, 471.4268798828125], "page": 136, "span": [0, 93], "__ref_s3_data": null}], "text": "- GLYPH The implementation of the access policy is part of the DB2 data access layer.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.75515747070312, 448.82037353515625, 426.24566650390625, 459.736572265625], "page": 136, "span": [0, 81], "__ref_s3_data": null}], "text": "- GLYPH Table data is protected regardless of the interface that is used.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.80447387695312, 436.8045959472656, 433.2464599609375, 447.8392333984375], "page": 136, "span": [0, 80], "__ref_s3_data": null}], "text": "- GLYPH No user is inherently exempted from the access control policies.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60531616210938, 424.9714660644531, 383.5718688964844, 435.288330078125], "page": 136, "span": [0, 67], "__ref_s3_data": null}], "text": "- GLYPH Groups of users can share policies and permissions.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60353088378906, 330.8507385253906, 547.245361328125, 413.26202392578125], "page": 136, "span": [0, 623], "__ref_s3_data": null}], "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.79904174804688, 260.80133056640625, 547.19580078125, 319.08209228515625], "page": 136, "span": [0, 380], "__ref_s3_data": null}], "text": "With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.42830657958984, 217.91627502441406, 324.01275634765625, 233.9404296875], "page": 136, "span": [0, 34], "__ref_s3_data": null}], "text": "8.2 DB2 for i Center of Excellence", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.96109008789062, 142.5989990234375, 533.2318115234375, 201.5556640625], "page": 136, "span": [0, 354], "__ref_s3_data": null}], "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.06277465820312, 109.11979675292969, 547.2406005859375, 131.29010009765625], "page": 136, "span": [0, 114], "__ref_s3_data": null}], "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.42459869384766, 27.93828010559082, 83.98200225830078, 37.74468994140625], "page": 136, "span": [0, 3], "__ref_s3_data": null}], "text": "120", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.57987976074219, 27.97216796875, 339.84716796875, 37.353759765625], "page": 136, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/126"}, {"prov": [{"bbox": [74.4000015258789, 517.019287109375, 115.15289306640625, 523.457275390625], "page": 137, "span": [0, 11], "__ref_s3_data": null}], "text": "Appendix A.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 481.131103515625, 485.7971496582031, 538.7255859375], "page": 137, "span": [0, 49], "__ref_s3_data": null}], "text": "Database definitions for the RCAC banking example", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.599853515625, 397.7381591796875, 539.8473510742188, 444.1184387207031], "page": 137, "span": [0, 322], "__ref_s3_data": null}], "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, \"Implementing Row and Column Access Control: Banking example\" on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.52754211425781, 376.4199523925781, 332.9858703613281, 386.0654602050781], "page": 137, "span": [0, 60], "__ref_s3_data": null}], "text": "Example A-1 DDL script to implement the RCAC banking example", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [62.520992279052734, 61.56207275390625, 541.1366577148438, 371.1180419921875], "page": 137, "span": [0, 1229], "__ref_s3_data": null}], "text": "/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL ,", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [63.67854309082031, 27.88531494140625, 257.24334716796875, 37.3470458984375], "page": 137, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.0882568359375, 27.93828010559082, 547.2587890625, 37.70806884765625], "page": 137, "span": [0, 3], "__ref_s3_data": null}], "text": "121", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [496.9212951660156, 661.8682861328125, 526.1300659179688, 699.434814453125], "page": 137, "span": [0, 1], "__ref_s3_data": null}], "text": "A", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.45902633666992, 70.01904296875, 546.5369873046875, 721.3632202148438], "page": 138, "span": [0, 2754], "__ref_s3_data": null}], "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) );", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.49662017822266, 27.93828010559082, 83.98200225830078, 37.59820556640625], "page": 138, "span": [0, 3], "__ref_s3_data": null}], "text": "122", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.57022857666016, 27.99407958984375, 339.9194030761719, 37.3040771484375], "page": 138, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [62.7338981628418, 61.7633056640625, 546.5366821289062, 720.3270263671875], "page": 139, "span": [0, 2313], "__ref_s3_data": null}], "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [256.79608154296875, 28.0927734375, 517.9058227539062, 37.26806640625], "page": 139, "span": [0, 61], "__ref_s3_data": null}], "text": "Appendix A. Database definitions for the RCAC banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.0982055664062, 27.93828010559082, 547.2587890625, 37.6234130859375], "page": 139, "span": [0, 3], "__ref_s3_data": null}], "text": "123", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [62.60613250732422, 84.2364501953125, 500.697265625, 722.6401977539062], "page": 140, "span": [0, 1998], "__ref_s3_data": null}], "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.50080871582031, 27.93828010559082, 83.98200225830078, 37.46612548828125], "page": 140, "span": [0, 3], "__ref_s3_data": null}], "text": "124", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.63966369628906, 27.98992919921875, 339.882080078125, 37.28564453125], "page": 140, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.12764358520508, 191.19879150390625, 528.5969848632812, 721.9608154296875], "page": 141, "span": [0, 1533], "__ref_s3_data": null}], "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [256.8621520996094, 28.05596923828125, 517.9058227539062, 37.23699951171875], "page": 141, "span": [0, 61], "__ref_s3_data": null}], "text": "Appendix A. Database definitions for the RCAC banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.1473999023438, 27.93828010559082, 547.2587890625, 37.67071533203125], "page": 141, "span": [0, 3], "__ref_s3_data": null}], "text": "125", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.55541229248047, 27.93828010559082, 83.98200225830078, 37.9239501953125], "page": 142, "span": [0, 3], "__ref_s3_data": null}], "text": "126", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.59571838378906, 27.87689208984375, 340.1140441894531, 37.586181640625], "page": 142, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.80000305175781, 695.3945922851562, 299.2008056640625, 719.0851440429688], "page": 143, "span": [0, 20], "__ref_s3_data": null}], "text": "Related publications", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.75408935546875, 637.64208984375, 530.0675048828125, 659.93994140625], "page": 143, "span": [0, 150], "__ref_s3_data": null}], "text": "The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.5552978515625, 594.16162109375, 205.97418212890625, 610.62353515625], "page": 143, "span": [0, 18], "__ref_s3_data": null}], "text": "Other publications", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.73150634765625, 567.8068237304688, 413.18115234375, 578.06201171875], "page": 143, "span": [0, 63], "__ref_s3_data": null}], "text": "These publications are relevant as further information sources:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.81341552734375, 551.03466796875, 414.05657958984375, 561.2576904296875], "page": 143, "span": [0, 74], "__ref_s3_data": null}], "text": "- GLYPH IBM DB2 for i indexing methods and strategies white paper:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.4676513671875, 521.3193359375, 545.9945678710938, 543.9222412109375], "page": 143, "span": [0, 108], "__ref_s3_data": null}], "text": "- http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8154296875, 505.1793212890625, 299.7695007324219, 515.3950805664062], "page": 143, "span": [0, 49], "__ref_s3_data": null}], "text": "- GLYPH IBM i Memo to Users Version 7.2 :", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.4538116455078, 487.5298767089844, 536.3565673828125, 497.8748474121094], "page": 143, "span": [0, 77], "__ref_s3_data": null}], "text": "- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.64071655273438, 471.1599426269531, 371.4087829589844, 481.50567626953125], "page": 143, "span": [0, 65], "__ref_s3_data": null}], "text": "- GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide :", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.3872833251953, 442.33642578125, 545.9945678710938, 463.9585876464844], "page": 143, "span": [0, 86], "__ref_s3_data": null}], "text": "- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63323974609375, 425.1407470703125, 355.629150390625, 435.3125305175781], "page": 143, "span": [0, 60], "__ref_s3_data": null}], "text": "- GLYPH IBM i Version 7.2 Journal Management Guide :", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.4163360595703, 395.97418212890625, 545.9945678710938, 417.87652587890625], "page": 143, "span": [0, 92], "__ref_s3_data": null}], "text": "- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.4580078125, 378.82830810546875, 346.3946838378906, 389.5109558105469], "page": 143, "span": [0, 60], "__ref_s3_data": null}], "text": "- GLYPH IBM i Version 7.2 Security Reference Guide :", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.8020477294922, 349.88922119140625, 546.1087036132812, 372.0950622558594], "page": 143, "span": [0, 90], "__ref_s3_data": null}], "text": "- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.61199188232422, 306.89630126953125, 195.1357421875, 322.6049499511719], "page": 143, "span": [0, 16], "__ref_s3_data": null}], "text": "Online resources", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.812255859375, 280.17840576171875, 399.3615417480469, 290.16766357421875], "page": 143, "span": [0, 59], "__ref_s3_data": null}], "text": "These websites are relevant as further information sources:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.69252014160156, 263.091796875, 457.8038635253906, 273.29962158203125], "page": 143, "span": [0, 81], "__ref_s3_data": null}], "text": "- GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.2280731201172, 234.15362548828125, 545.9945678710938, 255.794677734375], "page": 143, "span": [0, 86], "__ref_s3_data": null}], "text": "- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60523986816406, 216.62274169921875, 287.6324768066406, 227.4852294921875], "page": 143, "span": [0, 46], "__ref_s3_data": null}], "text": "- GLYPH Identity Theft Resource Center", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.68099975585938, 199.8922119140625, 291.11822509765625, 209.80865478515625], "page": 143, "span": [0, 28], "__ref_s3_data": null}], "text": "- http://www.idtheftcenter.org", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6503448486328, 183.16000366210938, 231.24366760253906, 193.26593017578125], "page": 143, "span": [0, 33], "__ref_s3_data": null}], "text": "- GLYPH Ponemon Institute", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.75747680664062, 166.0797119140625, 266.09869384765625, 176.2340087890625], "page": 143, "span": [0, 23], "__ref_s3_data": null}], "text": "- http://www.ponemon.org/", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [63.680240631103516, 27.890625, 257.24334716796875, 37.23919677734375], "page": 143, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [530.1651000976562, 27.93828010559082, 547.2587890625, 37.71759033203125], "page": 143, "span": [0, 3], "__ref_s3_data": null}], "text": "127", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.73175811767578, 705.8510131835938, 172.86196899414062, 721.902587890625], "page": 144, "span": [0, 13], "__ref_s3_data": null}], "text": "Help from IBM", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.51719665527344, 678.6181030273438, 262.6037292480469, 689.291015625], "page": 144, "span": [0, 25], "__ref_s3_data": null}], "text": "IBM Support and downloads", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 661.7525634765625, 211.73904418945312, 671.5845336914062], "page": 144, "span": [0, 16], "__ref_s3_data": null}], "text": "ibm.com /support", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.5938720703125, 640.2989501953125, 227.63221740722656, 650.671142578125], "page": 144, "span": [0, 19], "__ref_s3_data": null}], "text": "IBM Global Services", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 623.4984130859375, 216.7190399169922, 632.98974609375], "page": 144, "span": [0, 17], "__ref_s3_data": null}], "text": "ibm.com /services", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.5219497680664, 27.93828010559082, 83.98200225830078, 37.608154296875], "page": 144, "span": [0, 3], "__ref_s3_data": null}], "text": "128", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.66630554199219, 27.9249267578125, 339.9003601074219, 37.40533447265625], "page": 144, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [287.2200012207031, 741.251953125, 414.24481201171875, 763.4519653320312], "page": 146, "span": [0, 10], "__ref_s3_data": null}], "text": "Back cover", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [26.454715728759766, 650.9618530273438, 447.3600158691406, 720.362060546875], "page": 146, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [26.35322380065918, 524.7881469726562, 127.443603515625, 551.0213623046875], "page": 146, "span": [0, 40], "__ref_s3_data": null}], "text": "Implement roles and separation of duties", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [26.22105598449707, 469.1280212402344, 120.283203125, 508.2904052734375], "page": 146, "span": [0, 40], "__ref_s3_data": null}], "text": "Leverage row permissions on the database", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [26.226221084594727, 413.14801025390625, 121.44960021972656, 452.88134765625], "page": 146, "span": [0, 40], "__ref_s3_data": null}], "text": "Protect columns by defining column masks", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [152.25205993652344, 468.4081115722656, 414.084228515625, 550.1506958007812], "page": 146, "span": [0, 464], "__ref_s3_data": null}], "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [152.3572540283203, 403.090087890625, 414.173828125, 461.4716796875], "page": 146, "span": [0, 309], "__ref_s3_data": null}], "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [170.78512573242188, 152.3369903564453, 232.11270141601562, 161.494140625], "page": 146, "span": [0, 12], "__ref_s3_data": null}], "text": "REDP-5110-00", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/127"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/128"}, {"prov": [{"bbox": [466.3692626953125, 489.8393859863281, 559.809326171875, 544.606201171875], "page": 146, "span": [0, 44], "__ref_s3_data": null}], "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [466.3262939453125, 405.52801513671875, 587.38916015625, 440.5700988769531], "page": 146, "span": [0, 60], "__ref_s3_data": null}], "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [466.1037292480469, 250.36593627929688, 587.5205078125, 393.18768310546875], "page": 146, "span": [0, 323], "__ref_s3_data": null}], "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [466.66748046875, 190.48809814453125, 571.0052490234375, 214.11181640625], "page": 146, "span": [0, 39], "__ref_s3_data": null}], "text": "For more information: ibm.com /redbooks", "type": "paragraph", "name": "Text", "font": null}], "figures": [{"prov": [{"bbox": [513.4560546875, 737.1808471679688, 586.1583251953125, 765.9149169921875], "page": 1, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [80.21302032470703, 696.1356811523438, 142.7141876220703, 720.9600830078125], "page": 3, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [465.2912902832031, 568.2127075195312, 487.54522705078125, 581.128173828125], "page": 10, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [143.39866638183594, 506.378662109375, 179.56256103515625, 521.7388916015625], "page": 11, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.16704559326172, 103.87176513671875, 258.77435302734375, 188.49365234375], "page": 11, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [309.1715087890625, 608.7066650390625, 372.07818603515625, 634.2903442382812], "page": 12, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [309.91729736328125, 415.996337890625, 327.7751159667969, 434.16644287109375], "page": 12, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [142.52883911132812, 288.79351806640625, 251.47850036621094, 416.9550476074219], "page": 13, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [145.41448974609375, 156.616943359375, 252.08840942382812, 264.7552490234375], "page": 13, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [141.68251037597656, 608.5074462890625, 249.5221405029297, 714.6685791015625], "page": 14, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [141.71910095214844, 472.5130920410156, 251.5185546875, 599.4354248046875], "page": 14, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [141.89089965820312, 337.8795166015625, 251.38380432128906, 447.3857116699219], "page": 14, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [141.57579040527344, 223.3951416015625, 249.41360473632812, 329.20159912109375], "page": 14, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [141.69131469726562, 67.85260009765625, 250.86129760742188, 177.389892578125], "page": 14, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [142.26431274414062, 599.3118896484375, 251.69140625, 714.8782348632812], "page": 15, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [142.39024353027344, 465.6423034667969, 251.9964141845703, 575.4408569335938], "page": 15, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.05508804321289, 553.958984375, 239.62692260742188, 721.5736083984375], "page": 17, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.6387176513672, 92.9403076171875, 491.2538146972656, 296.2513122558594], "page": 19, "span": [0, 55], "__ref_s3_data": null}], "text": "Figure 1-1 All-or-nothing access to the rows of a table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.92466735839844, 103.39019775390625, 546.4456176757812, 416.0727844238281], "page": 20, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 1-2 Existing row and column controls", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.17647933959961, 554.0392456054688, 239.21856689453125, 721.7350463867188], "page": 23, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.1435661315918, 553.8724975585938, 239.34097290039062, 721.603759765625], "page": 29, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.9717559814453, 381.39068603515625, 545.4180908203125, 684.5892944335938], "page": 31, "span": [0, 177], "__ref_s3_data": null}], "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.58670043945312, 377.8745422363281, 545.5314331054688, 672.6809692382812], "page": 32, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 3-2 CREATE MASK SQL statement", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.23851013183594, 444.80059814453125, 507.5733642578125, 714.2366943359375], "page": 33, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.7325897216797, 70.57550048828125, 514.99365234375, 291.0432434082031], "page": 33, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 3-4 ALTER TABLE SQL statement", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.64837646484375, 197.24334716796875, 301.2367248535156, 407.8262939453125], "page": 35, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 3-5 Special registers and adopted authority", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.4460906982422, 421.7442932128906, 227.48138427734375, 454.37591552734375], "page": 40, "span": [0, 30], "__ref_s3_data": null}], "text": "Figure 3-7 Number of employees", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.00577545166016, 302.76678466796875, 547.3966674804688, 489.8777160644531], "page": 42, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.801902770996094, 621.9678955078125, 547.11474609375, 696.6175537109375], "page": 44, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 3-10 Column masks shown in System i Navigator", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.98516845703125, 145.86041259765625, 530.0479125976562, 364.0950012207031], "page": 44, "span": [0, 65], "__ref_s3_data": null}], "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.93521118164062, 454.1453857421875, 547.290771484375, 685.1574096679688], "page": 45, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [137.24044799804688, 209.55267333984375, 225.1509246826172, 243.1964111328125], "page": 45, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 3-13 Count of EMPLOYEES by HR", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [137.4537811279297, 98.5223388671875, 220.26930236816406, 130.49932861328125], "page": 45, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 3-14 Count of EMPLOYEES by a manager", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.77099609375, 651.5640869140625, 225.8523406982422, 684.3360595703125], "page": 46, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 3-15 Count of EMPLOYEES by an employee", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.36477661132812, 539.6805419921875, 228.86305236816406, 572.2852172851562], "page": 46, "span": [0, 46], "__ref_s3_data": null}], "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.17905807495117, 553.8535766601562, 238.82225036621094, 721.395263671875], "page": 53, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.02655029296875, 304.43743896484375, 494.36669921875, 562.2583618164062], "page": 55, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 4-1 Internet banking example", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.22354125976562, 387.0466613769531, 529.123291015625, 672.08544921875], "page": 56, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 4-2 Rules for row and column access", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.12950134277344, 490.5372619628906, 451.212158203125, 664.9310302734375], "page": 58, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 4-4 Data model of the banking scenario", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.7327880859375, 163.08135986328125, 415.3825988769531, 221.14324951171875], "page": 58, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 4-5 Tables that are used in the banking example", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.87620544433594, 430.18212890625, 417.8246765136719, 614.5701293945312], "page": 59, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-6 CUSTOMERS table attributes", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.36148071289062, 486.9355163574219, 533.2239379882812, 660.7388916015625], "page": 60, "span": [0, 59], "__ref_s3_data": null}], "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [134.96737670898438, 231.27545166015625, 457.1007080078125, 421.118408203125], "page": 60, "span": [0, 36], "__ref_s3_data": null}], "text": "Figure 4-9 ACCOUNTS table attributes", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.629615783691406, 308.1072998046875, 546.4091796875, 468.0149230957031], "page": 61, "span": [0, 59], "__ref_s3_data": null}], "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.87826538085938, 495.53948974609375, 451.5091857910156, 684.625], "page": 62, "span": [0, 41], "__ref_s3_data": null}], "text": "Figure 4-12 TRANSACTIONS table attributes", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.676544189453125, 69.37261962890625, 546.6666870117188, 223.1519775390625], "page": 62, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.87820434570312, 299.79180908203125, 343.8211669921875, 537.927490234375], "page": 63, "span": [0, 38], "__ref_s3_data": null}], "text": "Figure 4-15 Application administration", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.17874145507812, 403.0865173339844, 527.1444702148438, 684.837646484375], "page": 64, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 4-16 Application administration for IBM i", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.42279052734375, 181.008544921875, 528.0494384765625, 337.58477783203125], "page": 64, "span": [0, 77], "__ref_s3_data": null}], "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.3659210205078, 390.21917724609375, 485.6257629394531, 673.2913208007812], "page": 65, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 4-18 Customize Access window", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.03775024414062, 208.7786865234375, 484.38336181640625, 321.49188232421875], "page": 65, "span": [0, 72], "__ref_s3_data": null}], "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [134.8684539794922, 519.525390625, 447.195556640625, 684.35791015625], "page": 66, "span": [0, 74], "__ref_s3_data": null}], "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.67332458496094, 204.1165771484375, 358.52606201171875, 350.67633056640625], "page": 66, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 4-21 Creating group profiles", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.2171630859375, 430.8948669433594, 474.1829528808594, 656.6912231445312], "page": 67, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 4-22 Creating group profiles and adding users", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.2489471435547, 241.65252685546875, 269.5424499511719, 366.31561279296875], "page": 67, "span": [0, 40], "__ref_s3_data": null}], "text": "Figure 4-23 Newly created group profiles", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.9110107421875, 386.7077941894531, 454.9993896484375, 596.0236206054688], "page": 68, "span": [0, 38], "__ref_s3_data": null}], "text": "Figure 4-24 Creating a global variable", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.25324249267578, 83.63250732421875, 546.2809448242188, 298.9075012207031], "page": 68, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.07814025878906, 552.4191284179688, 346.28375244140625, 672.6598510742188], "page": 69, "span": [0, 72], "__ref_s3_data": null}], "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.84584045410156, 215.39788818359375, 547.677978515625, 488.3529968261719], "page": 69, "span": [0, 91], "__ref_s3_data": null}], "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.3912811279297, 371.8191833496094, 467.3126220703125, 630.09716796875], "page": 70, "span": [0, 41], "__ref_s3_data": null}], "text": "Figure 4-28 Selecting new row permissions", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.22802734375, 265.47283935546875, 507.9937438964844, 533.213134765625], "page": 71, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.957679748535156, 209.08831787109375, 540.6087646484375, 521.5117797851562], "page": 72, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.73027801513672, 80.55084228515625, 535.9136352539062, 445.1194763183594], "page": 73, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.10432434082031, 520.585693359375, 545.318603515625, 672.0056762695312], "page": 74, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.1191864013672, 223.3760986328125, 456.9282531738281, 396.8784484863281], "page": 74, "span": [0, 34], "__ref_s3_data": null}], "text": "Figure 4-33 Creating a column mask", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.62161254882812, 189.4141845703125, 533.3434448242188, 603.1398315429688], "page": 75, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.02095031738281, 611.1890258789062, 547.409912109375, 684.545166015625], "page": 76, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.29519653320312, 323.4537048339844, 545.3217163085938, 429.86224365234375], "page": 76, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 4-36 Definition of the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.00347900390625, 191.1029052734375, 546.5211181640625, 258.30792236328125], "page": 76, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-37 Adding a check constraint", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.89818572998047, 141.4451904296875, 543.365966796875, 622.65625], "page": 77, "span": [0, 68], "__ref_s3_data": null}], "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.67375564575195, 408.3074645996094, 546.8531494140625, 684.8529052734375], "page": 78, "span": [0, 51], "__ref_s3_data": null}], "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.88129806518555, 191.6788330078125, 543.3204956054688, 330.7875061035156], "page": 78, "span": [0, 60], "__ref_s3_data": null}], "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.9375457763672, 459.0491638183594, 546.1521606445312, 618.48974609375], "page": 79, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.82846069335938, 219.2965087890625, 534.9657592773438, 381.9046325683594], "page": 79, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.07981872558594, 515.8709106445312, 547.2720947265625, 672.8583984375], "page": 80, "span": [0, 41], "__ref_s3_data": null}], "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.96348190307617, 210.73712158203125, 546.8929443359375, 379.94091796875], "page": 80, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-44 Row permissions after enabling RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.34481811523438, 553.552001953125, 467.5279846191406, 684.5108642578125], "page": 81, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-45 Selecting row permission definition", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.714664459228516, 196.12652587890625, 502.0154113769531, 464.8936767578125], "page": 81, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.04849243164062, 353.65679931640625, 358.4311218261719, 448.3782653808594], "page": 82, "span": [0, 28], "__ref_s3_data": null}], "text": "Figure 4-47 DBE session user", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.9881591796875, 166.849853515625, 393.8948669433594, 300.3863525390625], "page": 82, "span": [0, 71], "__ref_s3_data": null}], "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.97964477539062, 106.57257080078125, 354.29364013671875, 227.32598876953125], "page": 83, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 4-50 SECURITY session user", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.23712158203125, 566.5540771484375, 385.9791564941406, 684.7537841796875], "page": 84, "span": [0, 83], "__ref_s3_data": null}], "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.11683654785156, 353.8417053222656, 546.5642700195312, 502.3402099609375], "page": 84, "span": [0, 71], "__ref_s3_data": null}], "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.7608642578125, 122.27850341796875, 362.02239990234375, 256.17401123046875], "page": 84, "span": [0, 31], "__ref_s3_data": null}], "text": "Figure 4-53 TELLER session user", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.92535400390625, 572.8428344726562, 388.818115234375, 684.47216796875], "page": 85, "span": [0, 78], "__ref_s3_data": null}], "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.41838073730469, 121.37432861328125, 548.2760009765625, 495.8370361328125], "page": 85, "span": [0, 76], "__ref_s3_data": null}], "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.20846557617188, 569.3597412109375, 352.89752197265625, 653.039794921875], "page": 86, "span": [0, 30], "__ref_s3_data": null}], "text": "Figure 4-56 ADMIN session user", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.3792266845703, 423.29107666015625, 382.5545654296875, 504.6051940917969], "page": 86, "span": [0, 72], "__ref_s3_data": null}], "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.11729431152344, 118.21148681640625, 354.23046875, 207.35791015625], "page": 87, "span": [0, 32], "__ref_s3_data": null}], "text": "Figure 4-59 WEBUSER session user", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.9663848876953, 570.4339599609375, 547.538818359375, 672.871826171875], "page": 88, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.12271118164062, 272.61468505859375, 395.9803466796875, 506.2840881347656], "page": 88, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 4-61 Viewing the global variable value", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.00576782226562, 107.967529296875, 382.0115966796875, 207.84942626953125], "page": 88, "span": [0, 74], "__ref_s3_data": null}], "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.07161712646484, 541.043212890625, 546.6607055664062, 684.5228271484375], "page": 89, "span": [0, 68], "__ref_s3_data": null}], "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.32431030273438, 293.3769226074219, 399.8092956542969, 656.0142211914062], "page": 92, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 4-67 Visual Explain with no RCAC enabled", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.5016632080078, 314.4587707519531, 545.4508666992188, 672.7508544921875], "page": 93, "span": [0, 44], "__ref_s3_data": null}], "text": "Figure 4-68 Visual Explain with RCAC enabled", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.27847290039062, 127.9129638671875, 506.39263916015625, 238.41864013671875], "page": 93, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-69 Index advice with no RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.13593292236328, 557.0508422851562, 508.70513916015625, 672.543701171875], "page": 94, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 4-70 Index advice with RCAC enabled", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.17748260498047, 553.986572265625, 239.63507080078125, 721.4505004882812], "page": 95, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.8197021484375, 72.09771728515625, 527.1633911132812, 354.0295104980469], "page": 97, "span": [0, 56], "__ref_s3_data": null}], "text": "Figure 5-1 Accidental update with masked values scenario", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.03302764892578, 553.9920654296875, 238.4545135498047, 721.64599609375], "page": 101, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.07940673828125, 262.60601806640625, 412.541015625, 536.4542846679688], "page": 103, "span": [0, 57], "__ref_s3_data": null}], "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.86012268066406, 502.79217529296875, 497.2643127441406, 616.7017211914062], "page": 104, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 6-3 RCAC and data movement", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.99375915527344, 388.2860107421875, 491.57470703125, 636.4747314453125], "page": 105, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.0791015625, 381.560791015625, 499.302978515625, 636.4277954101562], "page": 106, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 6-5 RCAC effects on data movement on TARGET", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.0598907470703, 407.5401916503906, 501.41558837890625, 660.60791015625], "page": 107, "span": [0, 61], "__ref_s3_data": null}], "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.11366271972656, 475.9753112792969, 502.8105773925781, 684.66796875], "page": 108, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 6-7 Set A and set B with row permissions", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.9275665283203, 169.27420043945312, 464.8796691894531, 381.38775634765625], "page": 108, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 6-8 Inner join without RCAC permission", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.01123046875, 371.52569580078125, 470.03668212890625, 604.3631591796875], "page": 109, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 6-9 Inner join with RCAC permission", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.0685272216797, 419.78314208984375, 478.2557678222656, 634.4288330078125], "page": 110, "span": [0, 46], "__ref_s3_data": null}], "text": "Figure 6-10 Outer join without RCAC permission", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.01914978027344, 370.34381103515625, 483.0831298828125, 608.7029418945312], "page": 111, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 6-11 Outer join with RCAC permission", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.2607879638672, 397.6853332519531, 484.0173034667969, 635.3245239257812], "page": 112, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 6-12 Exception join without RCAC permission", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.89076232910156, 72.65142822265625, 485.4429931640625, 307.9719543457031], "page": 112, "span": [0, 47], "__ref_s3_data": null}], "text": "Figure 6-13 Exception join with RCAC permission", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.05506134033203, 442.6709899902344, 546.421142578125, 696.6568603515625], "page": 114, "span": [0, 58], "__ref_s3_data": null}], "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.03382873535156, 249.7725830078125, 546.9832153320312, 389.9870300292969], "page": 114, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 6-15 SQL Performance Monitor", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.78765869140625, 106.41729736328125, 546.1412353515625, 185.0380859375], "page": 114, "span": [0, 67], "__ref_s3_data": null}], "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.79280090332031, 574.2643432617188, 547.32080078125, 684.9020385742188], "page": 115, "span": [0, 63], "__ref_s3_data": null}], "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.10072326660156, 413.0294189453125, 547.119140625, 684.5394897460938], "page": 116, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 6-18 Index advice and RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.22953796386719, 237.27978515625, 510.0937805175781, 348.64111328125], "page": 116, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 6-19 Index advisor based on the RCAC rule", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.61915588378906, 262.054443359375, 491.90362548828125, 529.6680908203125], "page": 118, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 6-21 View definition and user query", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.2811279296875, 403.9203796386719, 508.5420227050781, 685.1424560546875], "page": 119, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 6-22 Query rewrite with RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.19158935546875, 391.0660705566406, 506.083740234375, 660.42138671875], "page": 122, "span": [0, 45], "__ref_s3_data": null}], "text": "Figure 6-23 Native record access with no RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.89947509765625, 387.1663513183594, 513.2355346679688, 660.6359252929688], "page": 123, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 6-24 Native record level access with RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.06109619140625, 230.63134765625, 509.6692199707031, 515.9075927734375], "page": 127, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 6-25 Object-level security and RCAC permissions", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.251461029052734, 553.5812377929688, 239.58355712890625, 721.334716796875], "page": 129, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.1027374267578, 338.3410949707031, 522.8739013671875, 576.7725830078125], "page": 132, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 7-1 Restoring tables to different schemas", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.17782974243164, 553.691162109375, 238.9773712158203, 721.4134521484375], "page": 135, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [31.834123611450195, 553.590576171875, 238.2196044921875, 721.0397338867188], "page": 137, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [485.1698303222656, 737.3182983398438, 566.2962036132812, 766.7407836914062], "page": 146, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [474.35540771484375, 602.1873779296875, 592.2726440429688, 711.9486694335938], "page": 146, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}], "tables": [{"prov": [{"bbox": [136.15103149414062, 76.34722900390625, 549.8472290039062, 659.9697265625], "page": 5, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "table", "#-cols": 2, "#-rows": 43, "data": [[{"bbox": [136.8000030517578, 650.1383666992188, 172.89404296875, 659.3513793945312], "spans": [[0, 0]], "text": "Notices", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [175.01951599121094, 650.1383666992188, 547.1898193359375, 659.3513793945312], "spans": [[0, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [136.79901123046875, 637.6585083007812, 189.86537170410156, 646.8715209960938], "spans": [[1, 0]], "text": "Trademarks", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [195.3968505859375, 637.6585083007812, 547.182861328125, 646.8715209960938], "spans": [[1, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [136.79901123046875, 615.1588745117188, 279.3973083496094, 624.3718872070312], "spans": [[2, 0]], "text": "DB2 for i Center of Excellence", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [280.6194152832031, 615.1588745117188, 547.1907958984375, 624.3718872070312], "spans": [[2, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [136.79901123046875, 592.6592407226562, 172.84423828125, 601.8722534179688], "spans": [[3, 0]], "text": "Preface", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [175.01852416992188, 592.6592407226562, 547.182861328125, 601.8722534179688], "spans": [[3, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [136.79803466796875, 580.1793823242188, 547.1808471679688, 589.3923950195312], "spans": [[4, 0]], "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [136.79803466796875, 567.6397705078125, 339.18292236328125, 576.852783203125], "spans": [[5, 0]], "text": "Now you can become a published author, too!", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [344.714111328125, 567.6397705078125, 547.1387939453125, 576.852783203125], "spans": [[5, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [136.79803466796875, 555.159912109375, 529.9950561523438, 564.3729248046875], "spans": [[6, 0]], "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [535.5494995117188, 555.159912109375, 547.1978759765625, 564.3729248046875], "spans": [[6, 1]], "text": "xiii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [136.79806518554688, 542.6800537109375, 284.0286560058594, 551.89306640625], "spans": [[7, 0]], "text": "Stay connected to IBM Redbooks", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [289.54449462890625, 542.6800537109375, 547.1211547851562, 551.89306640625], "spans": [[7, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [136.79806518554688, 520.180419921875, 536.0958862304688, 529.3934326171875], "spans": [[8, 0]], "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [541.6468505859375, 520.180419921875, 547.1978149414062, 529.3934326171875], "spans": [[8, 1]], "text": "1", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [136.79808044433594, 508.18060302734375, 549.8472290039062, 517.3936157226562], "spans": [[9, 0]], "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [136.79806518554688, 495.6409606933594, 536.1293334960938, 504.85394287109375], "spans": [[10, 0]], "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [541.6611328125, 495.6409606933594, 547.19287109375, 504.85394287109375], "spans": [[10, 1]], "text": "2", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}], [{"bbox": [136.79806518554688, 483.16107177734375, 549.8472290039062, 492.3740539550781], "spans": [[11, 0]], "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 11, "row-header": false, "row-span": [11, 12]}], [{"bbox": [151.19720458984375, 470.6811828613281, 536.0551147460938, 479.8941650390625], "spans": [[12, 0]], "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": [541.6015014648438, 470.6811828613281, 547.14794921875, 479.8941650390625], "spans": [[12, 1]], "text": "4", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 12, "row-header": false, "row-span": [12, 13]}], [{"bbox": [151.19720458984375, 458.14154052734375, 536.080078125, 467.3545227050781], "spans": [[13, 0]], "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 13, "row-header": false, "row-span": [13, 14]}, {"bbox": [541.635498046875, 458.14154052734375, 547.19091796875, 467.3545227050781], "spans": [[13, 1]], "text": "5", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 13, "row-header": false, "row-span": [13, 14]}], [{"bbox": [136.7970428466797, 435.64190673828125, 536.0908813476562, 444.8548889160156], "spans": [[14, 0]], "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 14, "row-header": false, "row-span": [14, 15]}, {"bbox": [541.642822265625, 435.64190673828125, 547.1947631835938, 444.8548889160156], "spans": [[14, 1]], "text": "7", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 14, "row-header": false, "row-span": [14, 15]}], [{"bbox": [136.7970428466797, 423.64208984375, 536.1271362304688, 432.8550720214844], "spans": [[15, 0]], "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": [541.6658935546875, 423.64208984375, 547.2047119140625, 432.8550720214844], "spans": [[15, 1]], "text": "8", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 15, "row-header": false, "row-span": [15, 16]}], [{"bbox": [151.19720458984375, 411.1622009277344, 535.9526977539062, 420.37518310546875], "spans": [[16, 0]], "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 16, "row-header": false, "row-span": [16, 17]}, {"bbox": [541.5558471679688, 411.1622009277344, 547.1590576171875, 420.37518310546875], "spans": [[16, 1]], "text": "8", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 16, "row-header": false, "row-span": [16, 17]}], [{"bbox": [151.19720458984375, 398.68231201171875, 536.0410766601562, 407.8952941894531], "spans": [[17, 0]], "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 17, "row-header": false, "row-span": [17, 18]}, {"bbox": [541.595947265625, 398.68231201171875, 547.1508178710938, 407.8952941894531], "spans": [[17, 1]], "text": "8", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 17, "row-header": false, "row-span": [17, 18]}], [{"bbox": [151.19720458984375, 386.1426696777344, 536.0748901367188, 395.35565185546875], "spans": [[18, 0]], "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 18, "row-header": false, "row-span": [18, 19]}, {"bbox": [541.6302490234375, 386.1426696777344, 547.1856079101562, 395.35565185546875], "spans": [[18, 1]], "text": "9", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 18, "row-header": false, "row-span": [18, 19]}], [{"bbox": [151.19720458984375, 373.66278076171875, 411.2704772949219, 382.8757629394531], "spans": [[19, 0]], "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 19, "row-header": false, "row-span": [19, 20]}, {"bbox": [416.8177490234375, 373.66278076171875, 547.1786499023438, 382.8757629394531], "spans": [[19, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 19, "row-header": false, "row-span": [19, 20]}], [{"bbox": [151.19720458984375, 361.1828918457031, 536.035888671875, 370.3958740234375], "spans": [[20, 0]], "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 20, "row-header": false, "row-span": [20, 21]}, {"bbox": [541.5989379882812, 361.1828918457031, 547.1619262695312, 370.3958740234375], "spans": [[20, 1]], "text": "9", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 20, "row-header": false, "row-span": [20, 21]}], [{"bbox": [151.19720458984375, 348.64324951171875, 530.5731811523438, 357.8562316894531], "spans": [[21, 0]], "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 21, "row-header": false, "row-span": [21, 22]}, {"bbox": [536.1044311523438, 348.64324951171875, 547.1668701171875, 357.8562316894531], "spans": [[21, 1]], "text": "10", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 21, "row-header": false, "row-span": [21, 22]}], [{"bbox": [151.19720458984375, 336.1633605957031, 530.5352172851562, 345.3763427734375], "spans": [[22, 0]], "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 22, "row-header": false, "row-span": [22, 23]}, {"bbox": [536.0755004882812, 336.1633605957031, 547.156005859375, 345.3763427734375], "spans": [[22, 1]], "text": "10", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 22, "row-header": false, "row-span": [22, 23]}], [{"bbox": [136.7970428466797, 323.6834716796875, 547.256591796875, 332.8964538574219], "spans": [[23, 0]], "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 23, "row-header": false, "row-span": [23, 24]}, {"bbox": null, "spans": [[23, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 23, "row-header": false, "row-span": [23, 24]}], [{"bbox": [136.79702758789062, 301.183837890625, 530.5396118164062, 310.3968200683594], "spans": [[24, 0]], "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 24, "row-header": false, "row-span": [24, 25]}, {"bbox": [536.0916748046875, 301.183837890625, 547.19580078125, 310.3968200683594], "spans": [[24, 1]], "text": "13", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 24, "row-header": false, "row-span": [24, 25]}], [{"bbox": [136.79702758789062, 289.18402099609375, 530.4808959960938, 298.3970031738281], "spans": [[25, 0]], "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 25, "row-header": false, "row-span": [25, 26]}, {"bbox": [536.04248046875, 289.18402099609375, 547.1657104492188, 298.3970031738281], "spans": [[25, 1]], "text": "14", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 25, "row-header": false, "row-span": [25, 26]}], [{"bbox": [151.1971893310547, 276.6443786621094, 378.2078552246094, 285.85736083984375], "spans": [[26, 0]], "text": "3.1.1 Row permission and column mask definitions", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 26, "row-header": false, "row-span": [26, 27]}, {"bbox": [383.74713134765625, 276.6443786621094, 547.15576171875, 285.85736083984375], "spans": [[26, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 26, "row-header": false, "row-span": [26, 27]}], [{"bbox": [151.1971893310547, 264.16448974609375, 530.4347534179688, 273.3774719238281], "spans": [[27, 0]], "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 27, "row-header": false, "row-span": [27, 28]}, {"bbox": [535.9962158203125, 264.16448974609375, 547.1190795898438, 273.3774719238281], "spans": [[27, 1]], "text": "16", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 27, "row-header": false, "row-span": [27, 28]}], [{"bbox": [136.79702758789062, 251.6248321533203, 530.528076171875, 260.83782958984375], "spans": [[28, 0]], "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 28, "row-header": false, "row-span": [28, 29]}, {"bbox": [536.0670166015625, 251.6248321533203, 547.1448364257812, 260.83782958984375], "spans": [[28, 1]], "text": "18", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 28, "row-header": false, "row-span": [28, 29]}], [{"bbox": [151.1971893310547, 239.14495849609375, 530.4978637695312, 248.3579559326172], "spans": [[29, 0]], "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 29, "row-header": false, "row-span": [29, 30]}, {"bbox": [536.0518798828125, 239.14495849609375, 547.159912109375, 248.3579559326172], "spans": [[29, 1]], "text": "18", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 29, "row-header": false, "row-span": [29, 30]}], [{"bbox": [151.1971893310547, 226.6650848388672, 530.5602416992188, 235.87808227539062], "spans": [[30, 0]], "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 30, "row-header": false, "row-span": [30, 31]}, {"bbox": [536.09912109375, 226.6650848388672, 547.1768798828125, 235.87808227539062], "spans": [[30, 1]], "text": "19", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 30, "row-header": false, "row-span": [30, 31]}], [{"bbox": [136.79702758789062, 214.1254425048828, 530.5302734375, 223.33843994140625], "spans": [[31, 0]], "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 31, "row-header": false, "row-span": [31, 32]}, {"bbox": [536.0615234375, 214.1254425048828, 547.1240234375, 223.33843994140625], "spans": [[31, 1]], "text": "20", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 31, "row-header": false, "row-span": [31, 32]}], [{"bbox": [136.79702758789062, 201.64556884765625, 530.6299438476562, 210.8585662841797], "spans": [[32, 0]], "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 32, "row-header": false, "row-span": [32, 33]}, {"bbox": [536.1631469726562, 201.64556884765625, 547.2295532226562, 210.8585662841797], "spans": [[32, 1]], "text": "21", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 32, "row-header": false, "row-span": [32, 33]}], [{"bbox": null, "spans": [[33, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 33, "row-header": false, "row-span": [33, 34]}, {"bbox": [400.3206481933594, 189.1656951904297, 547.10009765625, 198.37869262695312], "spans": [[33, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 33, "row-header": false, "row-span": [33, 34]}], [{"bbox": [136.79701232910156, 189.1656951904297, 394.78179931640625, 198.37869262695312], "spans": [[34, 0]], "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 34, "row-header": false, "row-span": [34, 35]}, {"bbox": null, "spans": [[34, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 34, "row-header": false, "row-span": [34, 35]}], [{"bbox": [151.19717407226562, 164.14617919921875, 530.4913940429688, 173.3591766357422], "spans": [[35, 0]], "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 35, "row-header": false, "row-span": [35, 36]}, {"bbox": [536.0463256835938, 164.14617919921875, 547.1561889648438, 173.3591766357422], "spans": [[35, 1]], "text": "23", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 35, "row-header": false, "row-span": [35, 36]}], [{"bbox": [151.19717407226562, 151.6663055419922, 530.5645751953125, 160.87930297851562], "spans": [[36, 0]], "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 36, "row-header": false, "row-span": [36, 37]}, {"bbox": [536.0960083007812, 151.6663055419922, 547.1587524414062, 160.87930297851562], "spans": [[36, 1]], "text": "23", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 36, "row-header": false, "row-span": [36, 37]}], [{"bbox": [151.19717407226562, 139.1266632080078, 530.5569458007812, 148.33966064453125], "spans": [[37, 0]], "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 37, "row-header": false, "row-span": [37, 38]}, {"bbox": [536.0881958007812, 139.1266632080078, 547.1507568359375, 148.33966064453125], "spans": [[37, 1]], "text": "24", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 37, "row-header": false, "row-span": [37, 38]}], [{"bbox": [151.19717407226562, 126.64678955078125, 530.5341186523438, 135.8597869873047], "spans": [[38, 0]], "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 38, "row-header": false, "row-span": [38, 39]}, {"bbox": [536.072998046875, 126.64678955078125, 547.15087890625, 135.8597869873047], "spans": [[38, 1]], "text": "25", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 38, "row-header": false, "row-span": [38, 39]}], [{"bbox": [151.19717407226562, 114.16690826416016, 339.4510498046875, 123.37991333007812], "spans": [[39, 0]], "text": "3.6.5 Defining and creating column masks", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 39, "row-header": false, "row-span": [39, 40]}, {"bbox": [344.9899597167969, 114.16690826416016, 547.160888671875, 123.37991333007812], "spans": [[39, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 39, "row-header": false, "row-span": [39, 40]}], [{"bbox": [151.19717407226562, 101.62727355957031, 530.541015625, 110.84027099609375], "spans": [[40, 0]], "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 40, "row-header": false, "row-span": [40, 41]}, {"bbox": [536.087646484375, 101.62727355957031, 547.1808471679688, 110.84027099609375], "spans": [[40, 1]], "text": "28", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 40, "row-header": false, "row-span": [40, 41]}], [{"bbox": [151.19717407226562, 89.14738464355469, 530.5750732421875, 98.36038970947266], "spans": [[41, 0]], "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 41, "row-header": false, "row-span": [41, 42]}, {"bbox": [536.1066284179688, 89.14738464355469, 547.169677734375, 98.36038970947266], "spans": [[41, 1]], "text": "29", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 41, "row-header": false, "row-span": [41, 42]}], [{"bbox": [151.19717407226562, 76.6675033569336, 530.436279296875, 85.88050842285156], "spans": [[42, 0]], "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 42, "row-header": false, "row-span": [42, 43]}, {"bbox": [535.9984741210938, 76.6675033569336, 547.1228637695312, 85.88050842285156], "spans": [[42, 1]], "text": "32", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 42, "row-header": false, "row-span": [42, 43]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [135.92572021484375, 57.76904296875, 547.7196044921875, 721.1874389648438], "page": 6, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "table", "#-cols": 2, "#-rows": 47, "data": [[{"bbox": [136.8000030517578, 711.2783203125, 530.5958862304688, 720.4913330078125], "spans": [[0, 0], [0, 1]], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 0, "row-header": true, "row-span": [0, 1]}, {"bbox": [536.1328125, 711.2783203125, 547.2067260742188, 720.4913330078125], "spans": [[0, 1]], "text": "37", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [136.80001831054688, 699.2785034179688, 530.5200805664062, 708.4915161132812], "spans": [[1, 0], [1, 1]], "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 1, "row-header": true, "row-span": [1, 2]}, {"bbox": [536.0591430664062, 699.2785034179688, 547.13720703125, 708.4915161132812], "spans": [[1, 1]], "text": "38", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [136.80001831054688, 686.7986450195312, 372.6776123046875, 696.0116577148438], "spans": [[2, 0], [2, 1]], "text": "4.2 Description of the users roles and responsibilities", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 2, "row-header": true, "row-span": [2, 3]}, {"bbox": [378.2168884277344, 686.7986450195312, 547.1648559570312, 696.0116577148438], "spans": [[2, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [136.80001831054688, 674.259033203125, 530.5362548828125, 683.4720458984375], "spans": [[3, 0], [3, 1]], "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 3, "row-header": true, "row-span": [3, 4]}, {"bbox": [536.0903930664062, 674.259033203125, 547.19873046875, 683.4720458984375], "spans": [[3, 1]], "text": "42", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [151.20018005371094, 661.7791748046875, 400.5744323730469, 670.9921875], "spans": [[4, 0], [4, 1]], "text": "4.3.1 Reviewing the tables that are used in this example", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 4, "row-header": true, "row-span": [4, 5]}, {"bbox": [406.10546875, 661.7791748046875, 547.14697265625, 670.9921875], "spans": [[4, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [151.20018005371094, 649.29931640625, 516.9255981445312, 658.5123291015625], "spans": [[5, 0], [5, 1]], "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 5, "row-header": true, "row-span": [5, 6]}, {"bbox": [522.4603881835938, 649.29931640625, 547.3670654296875, 658.5123291015625], "spans": [[5, 1]], "text": ". . 47", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [151.20018005371094, 636.7597045898438, 530.5675659179688, 645.9727172851562], "spans": [[6, 0], [6, 1]], "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 6, "row-header": true, "row-span": [6, 7]}, {"bbox": [536.0989379882812, 636.7597045898438, 547.1617431640625, 645.9727172851562], "spans": [[6, 1]], "text": "50", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [151.20018005371094, 624.2798461914062, 411.620849609375, 633.4928588867188], "spans": [[7, 0], [7, 1]], "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 7, "row-header": true, "row-span": [7, 8]}, {"bbox": [417.15240478515625, 624.2798461914062, 547.1438598632812, 633.4928588867188], "spans": [[7, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . 52", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [151.20018005371094, 611.7999877929688, 530.5370483398438, 621.0130004882812], "spans": [[8, 0], [8, 1]], "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 8, "row-header": true, "row-span": [8, 9]}, {"bbox": [536.0759887695312, 611.7999877929688, 547.1538696289062, 621.0130004882812], "spans": [[8, 1]], "text": "54", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [151.20018005371094, 599.2603759765625, 339.45404052734375, 608.473388671875], "spans": [[9, 0], [9, 1]], "text": "4.3.6 Defining and creating column masks", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 9, "row-header": true, "row-span": [9, 10]}, {"bbox": [344.9929504394531, 599.2603759765625, 547.1638793945312, 608.473388671875], "spans": [[9, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [151.20018005371094, 586.780517578125, 530.539306640625, 595.9935302734375], "spans": [[10, 0], [10, 1]], "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 10, "row-header": true, "row-span": [10, 11]}, {"bbox": [536.078125, 586.780517578125, 547.15576171875, 595.9935302734375], "spans": [[10, 1]], "text": "60", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}], [{"bbox": [151.20018005371094, 561.7610473632812, 530.4820556640625, 570.9740600585938], "spans": [[11, 0], [11, 1]], "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 11, "row-header": true, "row-span": [11, 12]}, {"bbox": [536.036376953125, 561.7610473632812, 547.14501953125, 570.9740600585938], "spans": [[11, 1]], "text": "64", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 11, "row-header": false, "row-span": [11, 12]}], [{"bbox": [151.20018005371094, 549.2811889648438, 530.44921875, 558.4942016601562], "spans": [[12, 0], [12, 1]], "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 12, "row-header": true, "row-span": [12, 13]}, {"bbox": [536.0194702148438, 549.2811889648438, 547.1600341796875, 558.4942016601562], "spans": [[12, 1]], "text": "66", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 12, "row-header": false, "row-span": [12, 13]}], [{"bbox": [151.20018005371094, 536.8013305664062, 530.4335327148438, 546.0143432617188], "spans": [[13, 0], [13, 1]], "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 13, "row-header": true, "row-span": [13, 14]}, {"bbox": [536.0037231445312, 536.8013305664062, 547.1441040039062, 546.0143432617188], "spans": [[13, 1]], "text": "75", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 13, "row-header": false, "row-span": [13, 14]}], [{"bbox": [136.80001831054688, 514.3016967773438, 530.5385131835938, 523.5147094726562], "spans": [[14, 0], [14, 1]], "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 14, "row-header": true, "row-span": [14, 15]}, {"bbox": [536.0916137695312, 514.3016967773438, 547.1978149414062, 523.5147094726562], "spans": [[14, 1]], "text": "79", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 14, "row-header": false, "row-span": [14, 15]}], [{"bbox": null, "spans": [[15, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": [156.18524169921875, 502.3018798828125, 547.1768798828125, 511.5148620605469], "spans": [[15, 1]], "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 15, "row-header": false, "row-span": [15, 16]}], [{"bbox": [136.80001831054688, 477.2823486328125, 530.4937744140625, 486.4953308105469], "spans": [[16, 0], [16, 1]], "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 16, "row-header": true, "row-span": [16, 17]}, {"bbox": [536.0474853515625, 477.2823486328125, 547.1549072265625, 486.4953308105469], "spans": [[16, 1]], "text": "81", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 16, "row-header": false, "row-span": [16, 17]}], [{"bbox": [136.80001831054688, 464.8024597167969, 530.5643310546875, 474.01544189453125], "spans": [[17, 0], [17, 1]], "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 17, "row-header": true, "row-span": [17, 18]}, {"bbox": [536.0958251953125, 464.8024597167969, 547.158935546875, 474.01544189453125], "spans": [[17, 1]], "text": "82", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 17, "row-header": false, "row-span": [17, 18]}], [{"bbox": [151.20018005371094, 452.2628173828125, 530.4598999023438, 461.4757995605469], "spans": [[18, 0], [18, 1]], "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 18, "row-header": true, "row-span": [18, 19]}, {"bbox": [536.0228271484375, 452.2628173828125, 547.148681640625, 461.4757995605469], "spans": [[18, 1]], "text": "82", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 18, "row-header": false, "row-span": [18, 19]}], [{"bbox": null, "spans": [[19, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 19, "row-header": false, "row-span": [19, 20]}, {"bbox": [536.0770874023438, 439.7829284667969, 547.1549682617188, 448.99591064453125], "spans": [[19, 1]], "text": "82", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 19, "row-header": false, "row-span": [19, 20]}], [{"bbox": [151.20018005371094, 427.30303955078125, 530.5381469726562, 448.99591064453125], "spans": [[20, 0], [20, 1]], "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 20, "row-header": true, "row-span": [20, 21]}, {"bbox": [530.5494384765625, 242.7461395263672, 547.1646118164062, 251.95913696289062], "spans": [[20, 1]], "text": "100", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 20, "row-header": false, "row-span": [20, 21]}], [{"bbox": null, "spans": [[21, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 21, "row-header": false, "row-span": [21, 22]}, {"bbox": [536.0574340820312, 427.30303955078125, 547.182861328125, 436.5160217285156], "spans": [[21, 1]], "text": "83", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 21, "row-header": false, "row-span": [21, 22]}], [{"bbox": [136.80001831054688, 404.80340576171875, 530.5385131835938, 414.0163879394531], "spans": [[22, 0], [22, 1]], "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 22, "row-header": true, "row-span": [22, 23]}, {"bbox": [400.59185791015625, 342.7645263671875, 547.1687622070312, 364.51715087890625], "spans": [[22, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 22, "row-header": false, "row-span": [22, 23]}], [{"bbox": [136.80003356933594, 367.7840576171875, 530.5139770507812, 389.4769287109375], "spans": [[23, 0], [23, 1]], "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 23, "row-header": true, "row-span": [23, 24]}, {"bbox": [136.80003356933594, 367.7840576171875, 530.5139770507812, 389.4769287109375], "spans": [[23, 0], [23, 1]], "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 1, "col-header": false, "col-span": [0, 2], "row": 23, "row-header": true, "row-span": [23, 24]}], [{"bbox": [151.2001953125, 367.7840576171875, 400.1688232421875, 376.9970397949219], "spans": [[24, 0], [24, 1]], "text": "6.2.1 Effects when RCAC is defined on the source table", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 24, "row-header": true, "row-span": [24, 25]}, {"bbox": [151.2001953125, 367.7840576171875, 400.1688232421875, 376.9970397949219], "spans": [[24, 0], [24, 1]], "text": "6.2.1 Effects when RCAC is defined on the source table", "type": "row_header", "col": 1, "col-header": false, "col-span": [0, 2], "row": 24, "row-header": true, "row-span": [24, 25]}], [{"bbox": null, "spans": [[25, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 25, "row-header": false, "row-span": [25, 26]}, {"bbox": [536.0606079101562, 367.7840576171875, 547.15380859375, 376.9970397949219], "spans": [[25, 1]], "text": "88", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 25, "row-header": false, "row-span": [25, 26]}], [{"bbox": [136.80003356933594, 330.2846374511719, 530.5997924804688, 351.9775085449219], "spans": [[26, 0], [26, 1]], "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 26, "row-header": true, "row-span": [26, 27]}, {"bbox": [536.1390991210938, 330.2846374511719, 547.2177734375, 339.49761962890625], "spans": [[26, 1]], "text": "91", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 26, "row-header": false, "row-span": [26, 27]}], [{"bbox": [151.2001953125, 317.80474853515625, 547.2595825195312, 327.0177307128906], "spans": [[27, 0], [27, 1]], "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 27, "row-header": true, "row-span": [27, 28]}, {"bbox": [151.2001953125, 317.80474853515625, 547.2595825195312, 327.0177307128906], "spans": [[27, 0], [27, 1]], "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "type": "row_header", "col": 1, "col-header": false, "col-span": [0, 2], "row": 27, "row-header": true, "row-span": [27, 28]}], [{"bbox": [151.20016479492188, 305.2651062011719, 547.2595825195312, 314.47808837890625], "spans": [[28, 0], [28, 1]], "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 28, "row-header": true, "row-span": [28, 29]}, {"bbox": [151.20016479492188, 305.2651062011719, 547.2595825195312, 314.47808837890625], "spans": [[28, 0], [28, 1]], "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "type": "row_header", "col": 1, "col-header": false, "col-span": [0, 2], "row": 28, "row-header": true, "row-span": [28, 29]}], [{"bbox": [151.20016479492188, 292.78521728515625, 530.481201171875, 301.9981994628906], "spans": [[29, 0], [29, 1]], "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 29, "row-header": true, "row-span": [29, 30]}, {"bbox": [536.051025390625, 292.78521728515625, 547.1907348632812, 301.9981994628906], "spans": [[29, 1]], "text": "96", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 29, "row-header": false, "row-span": [29, 30]}], [{"bbox": [136.8000030517578, 280.2455749511719, 372.92724609375, 289.45855712890625], "spans": [[30, 0], [30, 1]], "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 30, "row-header": true, "row-span": [30, 31]}, {"bbox": [536.115966796875, 280.2455749511719, 547.1796264648438, 289.45855712890625], "spans": [[30, 1]], "text": "97", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 30, "row-header": false, "row-span": [30, 31]}], [{"bbox": [378.45904541015625, 280.2455749511719, 530.5841674804688, 289.45855712890625], "spans": [[31, 0], [31, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 31, "row-header": true, "row-span": [31, 32]}, {"bbox": [178.8563232421875, 267.76568603515625, 547.1707763671875, 276.9786682128906], "spans": [[31, 1]], "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 31, "row-header": false, "row-span": [31, 32]}], [{"bbox": [151.20016479492188, 255.28578186035156, 530.5306396484375, 264.498779296875], "spans": [[32, 0], [32, 1]], "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 32, "row-header": true, "row-span": [32, 33]}, {"bbox": [536.093017578125, 255.28578186035156, 547.2177124023438, 264.498779296875], "spans": [[32, 1]], "text": "99", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 32, "row-header": false, "row-span": [32, 33]}], [{"bbox": [151.20013427734375, 242.7461395263672, 525.0111083984375, 251.95913696289062], "spans": [[33, 0], [33, 1]], "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 33, "row-header": true, "row-span": [33, 34]}, {"bbox": [151.20013427734375, 242.7461395263672, 525.0111083984375, 251.95913696289062], "spans": [[33, 0], [33, 1]], "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 1, "col-header": false, "col-span": [0, 2], "row": 33, "row-header": true, "row-span": [33, 34]}], [{"bbox": [136.7999725341797, 230.26626586914062, 524.8056640625, 239.47926330566406], "spans": [[34, 0], [34, 1]], "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 34, "row-header": true, "row-span": [34, 35]}, {"bbox": [530.3905029296875, 230.26626586914062, 547.14501953125, 239.47926330566406], "spans": [[34, 1]], "text": "102", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 34, "row-header": false, "row-span": [34, 35]}], [{"bbox": [151.20013427734375, 205.2467498779297, 524.8568115234375, 214.45974731445312], "spans": [[35, 0], [35, 1]], "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 35, "row-header": true, "row-span": [35, 36]}, {"bbox": [530.4345092773438, 205.2467498779297, 547.1676635742188, 214.45974731445312], "spans": [[35, 1]], "text": "103", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 35, "row-header": false, "row-span": [35, 36]}], [{"bbox": null, "spans": [[36, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 36, "row-header": false, "row-span": [36, 37]}, {"bbox": [530.5247192382812, 192.76687622070312, 547.1878051757812, 201.97987365722656], "spans": [[36, 1]], "text": "105", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 36, "row-header": false, "row-span": [36, 37]}], [{"bbox": [151.20013427734375, 180.28700256347656, 524.9703979492188, 201.97987365722656], "spans": [[37, 0], [37, 1]], "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 37, "row-header": true, "row-span": [37, 38]}, {"bbox": [151.20013427734375, 180.28700256347656, 524.9703979492188, 201.97987365722656], "spans": [[37, 0], [37, 1]], "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 1, "col-header": false, "col-span": [0, 2], "row": 37, "row-header": true, "row-span": [37, 38]}], [{"bbox": [136.7999725341797, 180.28700256347656, 150.70437622070312, 189.5], "spans": [[38, 0], [38, 1]], "text": "6.6", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 38, "row-header": true, "row-span": [38, 39]}, {"bbox": [530.4845581054688, 180.28700256347656, 547.1698608398438, 189.5], "spans": [[38, 1]], "text": "105", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 38, "row-header": false, "row-span": [38, 39]}], [{"bbox": null, "spans": [[39, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 39, "row-header": false, "row-span": [39, 40]}, {"bbox": [530.43701171875, 167.7473602294922, 547.1228637695312, 176.96035766601562], "spans": [[39, 1]], "text": "107", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 39, "row-header": false, "row-span": [39, 40]}], [{"bbox": [136.7999725341797, 155.26748657226562, 525.0469970703125, 176.96035766601562], "spans": [[40, 0], [40, 1]], "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 40, "row-header": true, "row-span": [40, 41]}, {"bbox": [530.5781860351562, 155.26748657226562, 547.1717529296875, 164.48048400878906], "spans": [[40, 1]], "text": "108", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 40, "row-header": false, "row-span": [40, 41]}], [{"bbox": null, "spans": [[41, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 41, "row-header": false, "row-span": [41, 42]}, {"bbox": [530.4888916015625, 142.78761291503906, 547.19970703125, 152.0006103515625], "spans": [[41, 1]], "text": "108", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 41, "row-header": false, "row-span": [41, 42]}], [{"bbox": null, "spans": [[42, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 42, "row-header": false, "row-span": [42, 43]}, {"bbox": [530.43359375, 117.7680892944336, 547.1167602539062, 126.98108673095703], "spans": [[42, 1]], "text": "109", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 42, "row-header": false, "row-span": [42, 43]}], [{"bbox": null, "spans": [[43, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 43, "row-header": false, "row-span": [43, 44]}, {"bbox": [530.662841796875, 105.2882080078125, 547.258544921875, 114.50121307373047], "spans": [[43, 1]], "text": "109", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 43, "row-header": false, "row-span": [43, 44]}], [{"bbox": null, "spans": [[44, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 44, "row-header": false, "row-span": [44, 45]}, {"bbox": [530.5514526367188, 57.76904296875, 547.2017211914062, 66.98204803466797], "spans": [[44, 1]], "text": "113", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 44, "row-header": false, "row-span": [44, 45]}], [{"bbox": null, "spans": [[45, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 45, "row-header": false, "row-span": [45, 46]}, {"bbox": [530.3995361328125, 80.26868438720703, 547.1510009765625, 89.481689453125], "spans": [[45, 1]], "text": "111", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 45, "row-header": false, "row-span": [45, 46]}], [{"bbox": [136.79995727539062, 57.76904296875, 525.0014038085938, 66.98204803466797], "spans": [[46, 0], [46, 1]], "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 2], "row": 46, "row-header": true, "row-span": [46, 47]}, {"bbox": [136.79995727539062, 57.76904296875, 525.0014038085938, 66.98204803466797], "spans": [[46, 0], [46, 1]], "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "type": "row_header", "col": 1, "col-header": false, "col-span": [0, 2], "row": 46, "row-header": true, "row-span": [46, 47]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [135.83180236816406, 482.2618713378906, 547.9264526367188, 721.3062744140625], "page": 7, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "table", "#-cols": 2, "#-rows": 17, "data": [[{"bbox": [136.79989624023438, 711.2779541015625, 524.9435424804688, 720.490966796875], "spans": [[0, 0]], "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [530.4978637695312, 711.2779541015625, 547.1608276367188, 720.490966796875], "spans": [[0, 1]], "text": "114", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [151.20005798339844, 698.798095703125, 524.9487915039062, 708.0111083984375], "spans": [[1, 0]], "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [530.510986328125, 698.798095703125, 547.1976318359375, 708.0111083984375], "spans": [[1, 1]], "text": "114", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [151.20005798339844, 686.2584838867188, 524.9796752929688, 695.4714965820312], "spans": [[2, 0]], "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [530.5341796875, 686.2584838867188, 547.1976928710938, 695.4714965820312], "spans": [[2, 1]], "text": "114", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [151.20005798339844, 673.7786254882812, 525.0257568359375, 682.9916381835938], "spans": [[3, 0]], "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [530.5559692382812, 673.7786254882812, 547.1466064453125, 682.9916381835938], "spans": [[3, 1]], "text": "114", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [151.20005798339844, 661.2987670898438, 238.93310546875, 670.5117797851562], "spans": [[4, 0]], "text": "7.1.4 Regenerating", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [244.48696899414062, 661.2987670898438, 547.1724853515625, 670.5117797851562], "spans": [[4, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [136.79989624023438, 648.7591552734375, 524.9177856445312, 657.97216796875], "spans": [[5, 0]], "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [530.4720458984375, 648.7591552734375, 547.134765625, 657.97216796875], "spans": [[5, 1]], "text": "115", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [151.20005798339844, 636.279296875, 524.933349609375, 645.4923095703125], "spans": [[6, 0]], "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [530.4951782226562, 636.279296875, 547.1807250976562, 645.4923095703125], "spans": [[6, 1]], "text": "115", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [151.20005798339844, 623.7994384765625, 524.9628295898438, 633.012451171875], "spans": [[7, 0]], "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [530.5087280273438, 623.7994384765625, 547.1466064453125, 633.012451171875], "spans": [[7, 1]], "text": "116", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [136.79989624023438, 611.2598266601562, 524.9552612304688, 620.4728393554688], "spans": [[8, 0]], "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [530.5089111328125, 611.2598266601562, 547.1697998046875, 620.4728393554688], "spans": [[8, 1]], "text": "117", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [136.79989624023438, 588.7601928710938, 362.6678466796875, 597.9732055664062], "spans": [[9, 0]], "text": "Chapter 8. Designing and planning for success", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [363.9595947265625, 588.7601928710938, 547.1986694335938, 597.9732055664062], "spans": [[9, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [136.7998809814453, 576.7603759765625, 416.633056640625, 585.973388671875], "spans": [[10, 0]], "text": "8.1 Implementing RCAC with good design and proper planning", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [422.1871643066406, 576.7603759765625, 547.1546020507812, 585.973388671875], "spans": [[10, 1]], "text": ". . . . . . . . . . . . . . . . . . . 120", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}], [{"bbox": [136.7998809814453, 564.280517578125, 524.86376953125, 573.4935302734375], "spans": [[11, 0]], "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": [530.440185546875, 564.280517578125, 547.1694946289062, 573.4935302734375], "spans": [[11, 1]], "text": "120", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 11, "row-header": false, "row-span": [11, 12]}], [{"bbox": [136.7998809814453, 541.7808837890625, 447.0309753417969, 550.993896484375], "spans": [[12, 0]], "text": "Appendix A. Database definitions for the RCAC banking example", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": [447.35968017578125, 541.7808837890625, 547.2036743164062, 550.993896484375], "spans": [[12, 1]], "text": ". . . . . . . . . . . . . . 121", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 12, "row-header": false, "row-span": [12, 13]}], [{"bbox": [136.79989624023438, 519.7612915039062, 234.45175170898438, 528.9743041992188], "spans": [[13, 0]], "text": "Related publications", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 13, "row-header": false, "row-span": [13, 14]}, {"bbox": [236.15985107421875, 519.7612915039062, 547.1917114257812, 528.9743041992188], "spans": [[13, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 13, "row-header": false, "row-span": [13, 14]}], [{"bbox": [136.79989624023438, 507.2814025878906, 217.75054931640625, 516.494384765625], "spans": [[14, 0]], "text": "Other publications", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 14, "row-header": false, "row-span": [14, 15]}, {"bbox": [223.33541870117188, 507.2814025878906, 547.258544921875, 516.494384765625], "spans": [[14, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 14, "row-header": false, "row-span": [14, 15]}], [{"bbox": [136.7999267578125, 494.801513671875, 212.61610412597656, 504.0144958496094], "spans": [[15, 0]], "text": "Online resources", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": [218.1934814453125, 494.801513671875, 547.258544921875, 504.0144958496094], "spans": [[15, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 15, "row-header": false, "row-span": [15, 16]}], [{"bbox": [136.7999267578125, 482.2618713378906, 200.54580688476562, 491.474853515625], "spans": [[16, 0]], "text": "Help from IBM", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 16, "row-header": false, "row-span": [16, 17]}, {"bbox": [206.0924072265625, 482.2618713378906, 547.2077026367188, 491.474853515625], "spans": [[16, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 16, "row-header": false, "row-span": [16, 17]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [135.52508544921875, 349.9494934082031, 545.87060546875, 502.2750244140625], "page": 26, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 2-1 FUNCTION_USAGE view", "type": "table", "#-cols": 3, "#-rows": 5, "data": [[{"bbox": [142.8000030517578, 487.1369934082031, 202.2449951171875, 495.4620056152344], "spans": [[0, 0]], "text": "Column name", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [216.8087921142578, 487.1369934082031, 257.210693359375, 495.4620056152344], "spans": [[0, 1]], "text": "Data type", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [289.47479248046875, 487.1369934082031, 338.8946838378906, 495.4620056152344], "spans": [[0, 2]], "text": "Description", "type": "col_header", "col": 2, "col-header": true, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [142.8000030517578, 468.1172790527344, 203.2322998046875, 476.4422912597656], "spans": [[1, 0]], "text": "FUNCTION_ID", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [216.785400390625, 468.1172790527344, 276.00360107421875, 476.4422912597656], "spans": [[1, 1]], "text": "VARCHAR(30)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [289.45770263671875, 468.1172790527344, 359.85394287109375, 476.4422912597656], "spans": [[1, 2]], "text": "ID of the function.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [142.8000030517578, 449.156982421875, 198.66929626464844, 457.48199462890625], "spans": [[2, 0]], "text": "USER_NAME", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [216.74130249023438, 449.156982421875, 275.9234924316406, 457.48199462890625], "spans": [[2, 1]], "text": "VARCHAR(10)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [289.382080078125, 438.1166687011719, 515.0535888671875, 457.48199462890625], "spans": [[2, 2]], "text": "Name of the user profile that has a usage setting for this function.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [142.79998779296875, 419.1563720703125, 173.98318481445312, 427.48138427734375], "spans": [[3, 0]], "text": "USAGE", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [216.773681640625, 419.1563720703125, 270.9797668457031, 427.48138427734375], "spans": [[3, 1]], "text": "VARCHAR(7)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [289.416259765625, 397.13604736328125, 539.1071166992188, 427.48138427734375], "spans": [[3, 2]], "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [142.8000030517578, 378.1163330078125, 196.2248992919922, 386.44134521484375], "spans": [[4, 0]], "text": "USER_TYPE", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [216.75210571289062, 378.1163330078125, 270.99871826171875, 386.44134521484375], "spans": [[4, 1]], "text": "VARCHAR(5)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [289.4316101074219, 356.15631103515625, 448.11962890625, 386.44134521484375], "spans": [[4, 2]], "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [64.41139221191406, 70.39208984375, 547.3950805664062, 398.3863525390625], "page": 27, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "type": "table", "#-cols": 6, "#-rows": 13, "data": [[{"bbox": [70.80030059814453, 383.1567077636719, 119.78550720214844, 391.4817199707031], "spans": [[0, 0]], "text": "User action", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 0, "row-header": true, "row-span": [0, 1]}, {"bbox": [424.93804931640625, 304.9800109863281, 433.2629699707031, 344.4774475097656], "spans": [[0, 1]], "text": "*JOBCTL", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [450.1380615234375, 304.9800109863281, 458.4629821777344, 390.3999328613281], "spans": [[0, 2]], "text": "QIBM_DB_SECADM", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [475.9383544921875, 304.9800109863281, 484.2632751464844, 390.465576171875], "spans": [[0, 3]], "text": "QIBM_DB_SQLADM", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [501.13836669921875, 304.9800109863281, 509.4632873535156, 390.385498046875], "spans": [[0, 4]], "text": "QIBM_DB_SYSMON", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [526.3986206054688, 304.9799499511719, 534.7235717773438, 359.2005615234375], "spans": [[0, 5]], "text": "No Authority", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [70.80000305175781, 285.11700439453125, 220.1568145751953, 293.4420166015625], "spans": [[1, 0]], "text": "SET CURRENT DEGREE (SQL statement)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": true, "row-span": [1, 2]}, {"bbox": [429.0, 285.11700439453125, 435.00299072265625, 293.4420166015625], "spans": [[1, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [480.00030517578125, 285.11700439453125, 486.0032958984375, 293.4420166015625], "spans": [[1, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [70.80001831054688, 266.1567077636719, 264.5538024902344, 274.4817199707031], "spans": [[2, 0]], "text": "CHGQRYA command targeting a different user's job", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": true, "row-span": [2, 3]}, {"bbox": [429.0000305175781, 266.1567077636719, 435.0030212402344, 274.4817199707031], "spans": [[2, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [480.0003356933594, 266.1567077636719, 486.0033264160156, 274.4817199707031], "spans": [[2, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [70.800048828125, 247.1370086669922, 322.5057373046875, 255.46202087402344], "spans": [[3, 0]], "text": "STRDBMON or ENDDBMON commands targeting a different user's job", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": true, "row-span": [3, 4]}, {"bbox": [429.0000305175781, 247.1370086669922, 435.0030212402344, 255.46202087402344], "spans": [[3, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [480.0003356933594, 247.1370086669922, 486.0033264160156, 255.46202087402344], "spans": [[3, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [70.800048828125, 228.1173095703125, 381.0218505859375, 236.44232177734375], "spans": [[4, 0]], "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": true, "row-span": [4, 5]}, {"bbox": [429.0000305175781, 228.1173095703125, 435.0030212402344, 236.44232177734375], "spans": [[4, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [480.0003356933594, 228.1173095703125, 486.0033264160156, 236.44232177734375], "spans": [[4, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [505.2606201171875, 228.1173095703125, 511.26361083984375, 236.44232177734375], "spans": [[4, 4]], "text": "X", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [530.7603149414062, 228.1173095703125, 536.7633056640625, 236.44232177734375], "spans": [[4, 5]], "text": "X", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [70.800048828125, 209.15701293945312, 359.5173645019531, 217.48202514648438], "spans": [[5, 0]], "text": "QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": true, "row-span": [5, 6]}, {"bbox": [429.00006103515625, 209.15701293945312, 435.0030517578125, 217.48202514648438], "spans": [[5, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [480.0003662109375, 209.15701293945312, 486.00335693359375, 217.48202514648438], "spans": [[5, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [505.26068115234375, 209.15701293945312, 511.263671875, 217.48202514648438], "spans": [[5, 4]], "text": "X", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [70.80007934570312, 190.13731384277344, 220.7517852783203, 198.4623260498047], "spans": [[6, 0]], "text": "Visual Explain within Run SQL scripts", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": true, "row-span": [6, 7]}, {"bbox": [429.00006103515625, 190.13731384277344, 435.0030517578125, 198.4623260498047], "spans": [[6, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": null, "spans": [[6, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [480.0003662109375, 190.13731384277344, 486.00335693359375, 198.4623260498047], "spans": [[6, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [505.26068115234375, 190.13731384277344, 511.263671875, 198.4623260498047], "spans": [[6, 4]], "text": "X", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [530.7603759765625, 190.13731384277344, 536.7633666992188, 198.4623260498047], "spans": [[6, 5]], "text": "X", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [70.80007934570312, 171.11761474609375, 236.65480041503906, 179.442626953125], "spans": [[7, 0]], "text": "Visual Explain outside of Run SQL scripts", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": true, "row-span": [7, 8]}, {"bbox": [429.00006103515625, 171.11761474609375, 435.0030517578125, 179.442626953125], "spans": [[7, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [480.0003662109375, 171.11761474609375, 486.00335693359375, 179.442626953125], "spans": [[7, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [70.80007934570312, 152.15731811523438, 213.1296844482422, 160.48233032226562], "spans": [[8, 0]], "text": "ANALYZE PLAN CACHE procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": true, "row-span": [8, 9]}, {"bbox": [429.00006103515625, 152.15731811523438, 435.0030517578125, 160.48233032226562], "spans": [[8, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [480.0003662109375, 152.15731811523438, 486.00335693359375, 160.48233032226562], "spans": [[8, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [70.80007934570312, 133.1376190185547, 199.87808227539062, 141.46263122558594], "spans": [[9, 0]], "text": "DUMP PLAN CACHE procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": true, "row-span": [9, 10]}, {"bbox": [429.00006103515625, 133.1376190185547, 435.0030517578125, 141.46263122558594], "spans": [[9, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [480.0003662109375, 133.1376190185547, 486.00335693359375, 141.46263122558594], "spans": [[9, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [70.80007934570312, 114.11792755126953, 208.36776733398438, 122.44291687011719], "spans": [[10, 0]], "text": "MODIFY PLAN CACHE procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": true, "row-span": [10, 11]}, {"bbox": [429.00006103515625, 114.11792755126953, 435.0030517578125, 122.44291687011719], "spans": [[10, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [480.0003662109375, 114.11792755126953, 486.00335693359375, 122.44291687011719], "spans": [[10, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 10, "row-header": false, "row-span": [10, 11]}], [{"bbox": [70.80007934570312, 95.09822845458984, 411.20263671875, 103.42323303222656], "spans": [[11, 0]], "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 11, "row-header": true, "row-span": [11, 12]}, {"bbox": [429.00006103515625, 95.09822845458984, 435.0030517578125, 103.42323303222656], "spans": [[11, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": [480.0003662109375, 95.09822845458984, 486.00335693359375, 103.42323303222656], "spans": [[11, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 11, "row-header": false, "row-span": [11, 12]}], [{"bbox": [70.80007934570312, 76.13793182373047, 377.1258544921875, 84.46292877197266], "spans": [[12, 0]], "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 12, "row-header": true, "row-span": [12, 13]}, {"bbox": [429.00006103515625, 76.13793182373047, 435.0030517578125, 84.46292877197266], "spans": [[12, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": [480.0003662109375, 76.13793182373047, 486.00335693359375, 84.46292877197266], "spans": [[12, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 12, "row-header": false, "row-span": [12, 13]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [64.12763214111328, 222.45916748046875, 547.230224609375, 721.4774780273438], "page": 28, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "table", "#-cols": 6, "#-rows": 22, "data": [[{"bbox": [70.80136108398438, 706.1392822265625, 119.78656768798828, 714.4642333984375], "spans": [[0, 0]], "text": "User action", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [424.93804931640625, 628.02001953125, 433.262939453125, 667.4706420898438], "spans": [[0, 1]], "text": "*JOBCTL", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [450.1380615234375, 628.02001953125, 458.46295166015625, 713.3759765625], "spans": [[0, 2]], "text": "QIBM_DB_SECADM", "type": "col_header", "col": 2, "col-header": true, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [475.9383544921875, 628.02001953125, 484.26324462890625, 713.3759765625], "spans": [[0, 3]], "text": "QIBM_DB_SQLADM", "type": "col_header", "col": 3, "col-header": true, "col-span": [3, 4], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [501.13836669921875, 628.02001953125, 509.4632568359375, 713.437255859375], "spans": [[0, 4]], "text": "QIBM_DB_SYSMON", "type": "col_header", "col": 4, "col-header": true, "col-span": [4, 5], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [526.3987426757812, 628.02001953125, 534.7235107421875, 682.131591796875], "spans": [[0, 5]], "text": "No Authority", "type": "col_header", "col": 5, "col-header": true, "col-span": [5, 6], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [70.80060577392578, 608.1573486328125, 278.5827331542969, 616.4822998046875], "spans": [[1, 0]], "text": "START PLAN CACHE EVENT MONITOR procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": true, "row-span": [1, 2]}, {"bbox": [429.0005798339844, 608.1573486328125, 435.0035705566406, 616.4822998046875], "spans": [[1, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [480.0008850097656, 608.1573486328125, 486.0038757324219, 616.4822998046875], "spans": [[1, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [70.80059814453125, 589.1376342773438, 269.4494934082031, 597.4625854492188], "spans": [[2, 0]], "text": "END PLAN CACHE EVENT MONITOR procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": true, "row-span": [2, 3]}, {"bbox": [429.0005798339844, 589.1376342773438, 435.0035705566406, 597.4625854492188], "spans": [[2, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [480.0008850097656, 589.1376342773438, 486.0038757324219, 597.4625854492188], "spans": [[2, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [70.80059814453125, 570.117919921875, 293.976318359375, 578.44287109375], "spans": [[3, 0]], "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": true, "row-span": [3, 4]}, {"bbox": [429.0005798339844, 570.117919921875, 435.0035705566406, 578.44287109375], "spans": [[3, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [480.0008850097656, 570.117919921875, 486.0038757324219, 578.44287109375], "spans": [[3, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [70.80059814453125, 551.1575927734375, 311.2257385253906, 559.4825439453125], "spans": [[4, 0]], "text": "Work with RCAC row permissions (Create, modify, or delete)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": true, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [454.50030517578125, 551.1575927734375, 460.5032958984375, 559.4825439453125], "spans": [[4, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [70.80059814453125, 532.1378784179688, 303.5882873535156, 540.4628295898438], "spans": [[5, 0]], "text": "Work with RCAC column masks (Create, modify, or delete)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": true, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [454.50030517578125, 532.1378784179688, 460.5032958984375, 540.4628295898438], "spans": [[5, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [70.80059814453125, 513.1181640625, 264.57958984375, 521.443115234375], "spans": [[6, 0]], "text": "Change Object Owner ( CHGOBJOWN ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": true, "row-span": [6, 7]}, {"bbox": null, "spans": [[6, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [454.50030517578125, 513.1181640625, 460.5032958984375, 521.443115234375], "spans": [[6, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": null, "spans": [[6, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": null, "spans": [[6, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": null, "spans": [[6, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [70.80059814453125, 494.1578369140625, 299.39697265625, 502.48284912109375], "spans": [[7, 0]], "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": true, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [454.50030517578125, 494.1578369140625, 460.5032958984375, 502.48284912109375], "spans": [[7, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [70.80059814453125, 475.13812255859375, 266.843994140625, 483.463134765625], "spans": [[8, 0]], "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": true, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [454.5002746582031, 475.13812255859375, 460.5032653808594, 483.463134765625], "spans": [[8, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [70.80056762695312, 456.118408203125, 271.78857421875, 464.44342041015625], "spans": [[9, 0]], "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": true, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [454.500244140625, 456.118408203125, 460.50323486328125, 464.44342041015625], "spans": [[9, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [70.800537109375, 437.1581115722656, 257.3543395996094, 445.4831237792969], "spans": [[10, 0]], "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": true, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [454.500244140625, 437.1581115722656, 460.50323486328125, 445.4831237792969], "spans": [[10, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 10, "row-header": false, "row-span": [10, 11]}], [{"bbox": [70.800537109375, 418.1383972167969, 271.1882629394531, 426.4634094238281], "spans": [[11, 0]], "text": "Display Object Authority ( DSPOBJAUT ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 11, "row-header": true, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": [454.500244140625, 418.1383972167969, 460.50323486328125, 426.4634094238281], "spans": [[11, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 11, "row-header": false, "row-span": [11, 12]}], [{"bbox": [70.800537109375, 399.1186828613281, 237.0242462158203, 407.4436950683594], "spans": [[12, 0]], "text": "Work with Objects ( WRKOBJ ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 12, "row-header": true, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": [454.500244140625, 399.1186828613281, 460.50323486328125, 407.4436950683594], "spans": [[12, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 12, "row-header": false, "row-span": [12, 13]}], [{"bbox": [70.800537109375, 380.15838623046875, 238.51824951171875, 388.4833984375], "spans": [[13, 0]], "text": "Work with Libraries ( WRKLIB ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 13, "row-header": true, "row-span": [13, 14]}, {"bbox": null, "spans": [[13, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 13, "row-header": false, "row-span": [13, 14]}, {"bbox": [454.5011291503906, 380.15838623046875, 460.5041198730469, 388.4833984375], "spans": [[13, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 13, "row-header": false, "row-span": [13, 14]}, {"bbox": null, "spans": [[13, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 13, "row-header": false, "row-span": [13, 14]}, {"bbox": null, "spans": [[13, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 13, "row-header": false, "row-span": [13, 14]}, {"bbox": null, "spans": [[13, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 13, "row-header": false, "row-span": [13, 14]}], [{"bbox": [70.80142211914062, 361.138671875, 284.7251281738281, 369.46368408203125], "spans": [[14, 0]], "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 14, "row-header": true, "row-span": [14, 15]}, {"bbox": null, "spans": [[14, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 14, "row-header": false, "row-span": [14, 15]}, {"bbox": [454.5010986328125, 361.138671875, 460.50408935546875, 369.46368408203125], "spans": [[14, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 14, "row-header": false, "row-span": [14, 15]}, {"bbox": null, "spans": [[14, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 14, "row-header": false, "row-span": [14, 15]}, {"bbox": null, "spans": [[14, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 14, "row-header": false, "row-span": [14, 15]}, {"bbox": null, "spans": [[14, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 14, "row-header": false, "row-span": [14, 15]}], [{"bbox": [70.8013916015625, 342.11895751953125, 297.70037841796875, 350.4439697265625], "spans": [[15, 0]], "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 15, "row-header": true, "row-span": [15, 16]}, {"bbox": null, "spans": [[15, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": [454.5010986328125, 342.11895751953125, 460.50408935546875, 350.4439697265625], "spans": [[15, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": null, "spans": [[15, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": null, "spans": [[15, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": null, "spans": [[15, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 15, "row-header": false, "row-span": [15, 16]}], [{"bbox": [70.8013916015625, 323.1586608886719, 299.32037353515625, 331.4836730957031], "spans": [[16, 0]], "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 16, "row-header": true, "row-span": [16, 17]}, {"bbox": null, "spans": [[16, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 16, "row-header": false, "row-span": [16, 17]}, {"bbox": [454.5010986328125, 323.1586608886719, 460.50408935546875, 331.4836730957031], "spans": [[16, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 16, "row-header": false, "row-span": [16, 17]}, {"bbox": null, "spans": [[16, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 16, "row-header": false, "row-span": [16, 17]}, {"bbox": null, "spans": [[16, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 16, "row-header": false, "row-span": [16, 17]}, {"bbox": null, "spans": [[16, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 16, "row-header": false, "row-span": [16, 17]}], [{"bbox": [70.8013916015625, 304.1389465332031, 299.32037353515625, 312.4639587402344], "spans": [[17, 0]], "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 17, "row-header": true, "row-span": [17, 18]}, {"bbox": null, "spans": [[17, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 17, "row-header": false, "row-span": [17, 18]}, {"bbox": [454.5010986328125, 304.1389465332031, 460.50408935546875, 312.4639587402344], "spans": [[17, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 17, "row-header": false, "row-span": [17, 18]}, {"bbox": null, "spans": [[17, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 17, "row-header": false, "row-span": [17, 18]}, {"bbox": null, "spans": [[17, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 17, "row-header": false, "row-span": [17, 18]}, {"bbox": null, "spans": [[17, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 17, "row-header": false, "row-span": [17, 18]}], [{"bbox": [70.8013916015625, 285.1192321777344, 269.78509521484375, 293.4442443847656], "spans": [[18, 0]], "text": "Display Authorization List ( DSPAUTL ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 18, "row-header": true, "row-span": [18, 19]}, {"bbox": null, "spans": [[18, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 18, "row-header": false, "row-span": [18, 19]}, {"bbox": [454.5010986328125, 285.1192321777344, 460.50408935546875, 293.4442443847656], "spans": [[18, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 18, "row-header": false, "row-span": [18, 19]}, {"bbox": null, "spans": [[18, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 18, "row-header": false, "row-span": [18, 19]}, {"bbox": null, "spans": [[18, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 18, "row-header": false, "row-span": [18, 19]}, {"bbox": null, "spans": [[18, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 18, "row-header": false, "row-span": [18, 19]}], [{"bbox": [70.8013916015625, 266.158935546875, 313.63848876953125, 274.48394775390625], "spans": [[19, 0]], "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 19, "row-header": true, "row-span": [19, 20]}, {"bbox": null, "spans": [[19, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 19, "row-header": false, "row-span": [19, 20]}, {"bbox": [454.5010986328125, 266.158935546875, 460.50408935546875, 274.48394775390625], "spans": [[19, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 19, "row-header": false, "row-span": [19, 20]}, {"bbox": null, "spans": [[19, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 19, "row-header": false, "row-span": [19, 20]}, {"bbox": null, "spans": [[19, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 19, "row-header": false, "row-span": [19, 20]}, {"bbox": null, "spans": [[19, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 19, "row-header": false, "row-span": [19, 20]}], [{"bbox": [70.8013916015625, 247.1392364501953, 253.48878479003906, 255.46424865722656], "spans": [[20, 0]], "text": "Edit Authorization List ( EDTAUTL ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 20, "row-header": true, "row-span": [20, 21]}, {"bbox": null, "spans": [[20, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 20, "row-header": false, "row-span": [20, 21]}, {"bbox": [454.5010681152344, 247.1392364501953, 460.5040588378906, 255.46424865722656], "spans": [[20, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 20, "row-header": false, "row-span": [20, 21]}, {"bbox": null, "spans": [[20, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 20, "row-header": false, "row-span": [20, 21]}, {"bbox": null, "spans": [[20, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 20, "row-header": false, "row-span": [20, 21]}, {"bbox": null, "spans": [[20, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 20, "row-header": false, "row-span": [20, 21]}], [{"bbox": [70.80136108398438, 228.11953735351562, 281.80908203125, 236.44454956054688], "spans": [[21, 0]], "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 21, "row-header": true, "row-span": [21, 22]}, {"bbox": null, "spans": [[21, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 21, "row-header": false, "row-span": [21, 22]}, {"bbox": [454.5010681152344, 228.11953735351562, 460.5040588378906, 236.44454956054688], "spans": [[21, 2]], "text": "X", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 21, "row-header": false, "row-span": [21, 22]}, {"bbox": null, "spans": [[21, 3]], "text": "", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 21, "row-header": false, "row-span": [21, 22]}, {"bbox": null, "spans": [[21, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 21, "row-header": false, "row-span": [21, 22]}, {"bbox": null, "spans": [[21, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 21, "row-header": false, "row-span": [21, 22]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [134.54624938964844, 587.7283935546875, 542.0460815429688, 688.5811157226562], "page": 35, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 3-1 Special registers and their corresponding values", "type": "table", "#-cols": 2, "#-rows": 4, "data": [[{"bbox": [142.8000030517578, 673.1370239257812, 209.67091369628906, 681.4619750976562], "spans": [[0, 0]], "text": "Special register", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [230.18911743164062, 673.1370239257812, 319.9352722167969, 681.4619750976562], "spans": [[0, 1]], "text": "Corresponding value", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [142.80001831054688, 643.1364135742188, 212.7012176513672, 662.5016479492188], "spans": [[1, 0]], "text": "USER or SESSION_USER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [230.2197265625, 654.1766967773438, 467.9906921386719, 662.5016479492188], "spans": [[1, 1]], "text": "The effective user of the thread excluding adopted authority.", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [142.80003356933594, 624.11669921875, 216.63963317871094, 632.441650390625], "spans": [[2, 0]], "text": "CURRENT_USER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [230.19813537597656, 613.13671875, 535.6508178710938, 632.441650390625], "spans": [[2, 1]], "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [142.8009033203125, 594.1170043945312, 209.73570251464844, 602.4419555664062], "spans": [[3, 0]], "text": "SYSTEM_USER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [230.24490356445312, 594.1170043945312, 425.64569091796875, 602.4419555664062], "spans": [[3, 1]], "text": "The authorization ID that initiated the connection.", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [63.556331634521484, 495.7753601074219, 548.5687255859375, 687.76611328125], "page": 36, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 3-2 Built-in global variables", "type": "table", "#-cols": 3, "#-rows": 10, "data": [[{"bbox": [70.80000305175781, 673.1370239257812, 134.99070739746094, 681.4619750976562], "spans": [[0, 0]], "text": "Global variable", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [202.889404296875, 673.1370239257812, 223.34640502929688, 681.4619750976562], "spans": [[0, 1]], "text": "Type", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [281.8247985839844, 673.1370239257812, 331.3428039550781, 681.4619750976562], "spans": [[0, 2]], "text": "Description", "type": "col_header", "col": 2, "col-header": true, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [70.80000305175781, 654.1766967773438, 132.7209014892578, 662.5016479492188], "spans": [[1, 0]], "text": "CLIENT_HOST", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [202.89028930664062, 654.1766967773438, 267.0765075683594, 662.5016479492188], "spans": [[1, 1]], "text": "VARCHAR(255)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [281.8473205566406, 654.1766967773438, 510.17547607421875, 662.5016479492188], "spans": [[1, 2]], "text": "Host name of the current client as returned by the system", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [70.80001831054688, 635.156982421875, 140.66522216796875, 643.48193359375], "spans": [[2, 0]], "text": "CLIENT_IPADDR", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [202.872314453125, 635.156982421875, 267.077392578125, 643.48193359375], "spans": [[2, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [281.8454895019531, 635.156982421875, 509.6058349609375, 643.48193359375], "spans": [[2, 2]], "text": "IP address of the current client as returned by the system", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [70.80001831054688, 616.1372680664062, 134.98263549804688, 624.4622192382812], "spans": [[3, 0]], "text": "CLIENT_PORT", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [202.90293884277344, 616.1372680664062, 242.80084228515625, 624.4622192382812], "spans": [[3, 1]], "text": "INTEGER", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [281.7978515625, 616.1372680664062, 527.5922241210938, 624.4622192382812], "spans": [[3, 2]], "text": "Port used by the current client to communicate with the server", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [70.80001831054688, 597.1175537109375, 143.50924682617188, 605.4425048828125], "spans": [[4, 0]], "text": "PACKAGE_NAME", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [202.80575561523438, 597.1175537109375, 267.0693664550781, 605.4425048828125], "spans": [[4, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [281.85186767578125, 597.1175537109375, 436.5726013183594, 605.4425048828125], "spans": [[4, 2]], "text": "Name of the currently running package", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [70.80001831054688, 578.1572265625, 156.01654052734375, 586.482177734375], "spans": [[5, 0]], "text": "PACKAGE_SCHEMA", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [202.83544921875, 578.1572265625, 267.0864562988281, 586.482177734375], "spans": [[5, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [281.8707580566406, 578.1572265625, 470.44677734375, 586.482177734375], "spans": [[5, 2]], "text": "Schema name of the currently running package", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [70.80001831054688, 559.1375122070312, 157.89932250976562, 567.4624633789062], "spans": [[6, 0]], "text": "PACKAGE_VERSION", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [202.72471618652344, 559.1375122070312, 261.9825439453125, 567.4624633789062], "spans": [[6, 1]], "text": "VARCHAR(64)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [281.7492370605469, 559.1375122070312, 478.84381103515625, 567.4624633789062], "spans": [[6, 2]], "text": "Version identifier of the currently running package", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [70.80001831054688, 540.1177978515625, 154.419921875, 548.4427490234375], "spans": [[7, 0]], "text": "ROUTINE_SCHEMA", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [202.79312133789062, 540.1177978515625, 267.0927429199219, 548.4427490234375], "spans": [[7, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [281.87164306640625, 540.1177978515625, 464.2602233886719, 548.4427490234375], "spans": [[7, 2]], "text": "Schema name of the currently running routine", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [70.80001831054688, 521.157470703125, 188.43991088867188, 529.482421875], "spans": [[8, 0]], "text": "ROUTINE_SPECIFIC_NAME", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [202.8444061279297, 521.157470703125, 267.03692626953125, 529.482421875], "spans": [[8, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [281.80682373046875, 521.157470703125, 430.40045166015625, 529.482421875], "spans": [[8, 2]], "text": "Name of the currently running routine", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [70.80003356933594, 502.1377258300781, 139.4313507080078, 510.4627380371094], "spans": [[9, 0]], "text": "ROUTINE_TYPE", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [202.74635314941406, 502.1377258300781, 239.2899627685547, 510.4627380371094], "spans": [[9, 1]], "text": "CHAR(1)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [281.7906494140625, 502.1377258300781, 425.09130859375, 510.4627380371094], "spans": [[9, 2]], "text": "Type of the currently running routine", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 9, "row-header": false, "row-span": [9, 10]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [135.74551391601562, 393.6541442871094, 529.2235107421875, 684.2587280273438], "page": 57, "span": [0, 0], "__ref_s3_data": null}], "text": "Figure 4-3 Column masks", "type": "table", "#-cols": 4, "#-rows": 7, "data": [[{"bbox": null, "spans": [[0, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": null, "spans": [[0, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [287.8096923828125, 668.81640625, 355.4244689941406, 680.1975708007812], "spans": [[0, 2]], "text": "CUSTOMERS", "type": "col_header", "col": 2, "col-header": true, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [428.24420166015625, 668.81640625, 488.26617431640625, 680.1975708007812], "spans": [[0, 3]], "text": "ACCOUNTS", "type": "col_header", "col": 3, "col-header": true, "col-span": [3, 4], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [150.03750610351562, 608.87744140625, 193.05224609375, 618.352294921875], "spans": [[1, 0]], "text": "SECURITY", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [212.63400268554688, 607.9304809570312, 248.9210205078125, 616.476318359375], "spans": [[1, 1]], "text": "No Rows", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [263.1838073730469, 589.69384765625, 382.3654479980469, 635.3184814453125], "spans": [[1, 2]], "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [427.81256103515625, 609.6608276367188, 482.86053466796875, 615.3514404296875], "spans": [[1, 3]], "text": "ACCOUNT_NUMBER", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [174.79660034179688, 555.6320190429688, 193.04815673828125, 565.1068725585938], "spans": [[2, 0]], "text": "DBE", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [213.1331024169922, 556.0161743164062, 248.37786865234375, 564.56201171875], "spans": [[2, 1]], "text": "All Rows", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [263.1838073730469, 537.7796020507812, 382.3654479980469, 583.404296875], "spans": [[2, 2]], "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [427.8116149902344, 557.7466430664062, 482.92327880859375, 563.437255859375], "spans": [[2, 3]], "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [160.38710021972656, 521.521728515625, 193.08364868164062, 530.99658203125], "spans": [[3, 0]], "text": "ADMIN", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [213.1331024169922, 520.4083862304688, 248.45372009277344, 528.9542236328125], "spans": [[3, 1]], "text": "All Rows", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [315.5306091308594, 522.1387329101562, 330.12255859375, 527.829345703125], "spans": [[3, 2]], "text": "None", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [448.0835266113281, 522.1387329101562, 462.67547607421875, 527.829345703125], "spans": [[3, 3]], "text": "None", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [161.48519897460938, 489.0753479003906, 193.04367065429688, 498.5502014160156], "spans": [[4, 0]], "text": "TELLER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [213.1331024169922, 488.7939453125, 248.45372009277344, 497.3398132324219], "spans": [[4, 1]], "text": "All Rows", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [263.1838073730469, 474.550537109375, 382.3654479980469, 512.1885375976562], "spans": [[4, 2]], "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [448.07916259765625, 490.52423095703125, 462.6711120605469, 496.2148742675781], "spans": [[4, 3]], "text": "None", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [141.65139770507812, 457.7271423339844, 193.06382751464844, 467.2019958496094], "spans": [[5, 0]], "text": "CUSTOMER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [208.84030151367188, 457.179443359375, 252.7267608642578, 465.7253112792969], "spans": [[5, 1]], "text": "Own Rows", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [315.5306091308594, 458.9099426269531, 330.12255859375, 464.6005859375], "spans": [[5, 2]], "text": "None", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [448.0835266113281, 458.9099426269531, 462.67547607421875, 464.6005859375], "spans": [[5, 3]], "text": "None", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [160.8197021484375, 422.5186462402344, 193.05859375, 431.9934997558594], "spans": [[6, 0]], "text": "PUBLIC", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [212.63400268554688, 421.5716247558594, 248.9210205078125, 430.11749267578125], "spans": [[6, 1]], "text": "No Rows", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [263.18353271484375, 403.33502197265625, 382.3654479980469, 448.9596862792969], "spans": [[6, 2]], "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [427.81256103515625, 423.3021240234375, 482.86053466796875, 428.9927673339844], "spans": [[6, 3]], "text": "ACCOUNT_NUMBER", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 6, "row-header": false, "row-span": [6, 7]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [143.16891479492188, 327.46435546875, 300.13482666015625, 479.0935363769531], "page": 102, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "table", "#-cols": 2, "#-rows": 11, "data": [[{"bbox": [149.45120239257812, 467.8338623046875, 233.62379455566406, 474.97100830078125], "spans": [[0, 0]], "text": "CREDIT CARD NUMBER _ _", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [257.74920654296875, 467.8338623046875, 279.168212890625, 474.97100830078125], "spans": [[0, 1]], "text": "TOTAL", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [148.50592041015625, 454.30743408203125, 221.83938598632812, 461.4362487792969], "spans": [[1, 0]], "text": "3785 0000 0000 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [272.42230224609375, 454.30743408203125, 295.6497497558594, 461.4362487792969], "spans": [[1, 1]], "text": "233.50", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [148.50592041015625, 440.8002014160156, 221.83853149414062, 447.92901611328125], "spans": [[2, 0]], "text": "3785 1111 1111 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [272.42144775390625, 440.8002014160156, 295.6488952636719, 447.92901611328125], "spans": [[2, 1]], "text": "105.10", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [148.50619506835938, 427.264892578125, 221.84132385253906, 434.3937072753906], "spans": [[3, 0]], "text": "3785 2222 2222 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [272.4057922363281, 427.264892578125, 295.6465759277344, 434.3937072753906], "spans": [[3, 1]], "text": "300 00 300.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [148.50619506835938, 413.7298889160156, 221.85214233398438, 420.85870361328125], "spans": [[4, 0]], "text": "3785 3333 3333 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [266.1250305175781, 413.7298889160156, 295.6675109863281, 420.85870361328125], "spans": [[4, 1]], "text": "1,775.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [148.50619506835938, 400.22265625, 221.83880615234375, 407.3514709472656], "spans": [[5, 0]], "text": "5466 4444 4444 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [272.4217529296875, 400.22265625, 295.6492004394531, 407.3514709472656], "spans": [[5, 1]], "text": "601.70", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [148.50619506835938, 386.6877136230469, 221.83880615234375, 393.8165283203125], "spans": [[6, 0]], "text": "5466 5555 5555 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [276.646484375, 386.6877136230469, 295.6483154296875, 393.8165283203125], "spans": [[6, 1]], "text": "37.80", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [148.50619506835938, 373.1529541015625, 221.83880615234375, 380.2817687988281], "spans": [[7, 0]], "text": "5466 6666 6666 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [272.4217529296875, 373.1529541015625, 295.6492004394531, 380.2817687988281], "spans": [[7, 1]], "text": "490.45", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [148.50619506835938, 359.6453857421875, 221.84132385253906, 366.7742004394531], "spans": [[8, 0]], "text": "6011 7777 7777 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [268.1813049316406, 359.6453857421875, 295.6460266113281, 366.7742004394531], "spans": [[8, 1]], "text": "1005.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [148.50619506835938, 346.11041259765625, 221.83880615234375, 353.2392272949219], "spans": [[9, 0]], "text": "6011 8888 8888 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [272.4217529296875, 346.11041259765625, 295.6492004394531, 353.2392272949219], "spans": [[9, 1]], "text": "750.33", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [148.50619506835938, 332.5756530761719, 221.83880615234375, 339.7044677734375], "spans": [[10, 0]], "text": "6011 9999 9999 0001", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [276.646484375, 332.5756530761719, 295.6483154296875, 339.7044677734375], "spans": [[10, 1]], "text": "10.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [313.3494567871094, 327.06817626953125, 470.7187805175781, 479.4356994628906], "page": 102, "span": [0, 0], "__ref_s3_data": null}], "text": "Figure 6-1 Timing of column masking", "type": "table", "#-cols": 2, "#-rows": 11, "data": [[{"bbox": [318.9862060546875, 467.8338623046875, 403.1588134765625, 474.97100830078125], "spans": [[0, 0]], "text": "CREDIT CARD NUMBER _ _", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [427.28424072265625, 467.8338623046875, 448.7032470703125, 474.97100830078125], "spans": [[0, 1]], "text": "TOTAL", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [318.041015625, 454.30743408203125, 390.6849365234375, 461.4362487792969], "spans": [[1, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [441.9682312011719, 454.30743408203125, 465.16064453125, 461.4362487792969], "spans": [[1, 1]], "text": "233.50", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [318.041015625, 440.8002014160156, 390.6849365234375, 447.92901611328125], "spans": [[2, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [441.9682312011719, 440.8002014160156, 465.16064453125, 447.92901611328125], "spans": [[2, 1]], "text": "105.10", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [318.0412902832031, 427.264892578125, 390.6543273925781, 434.3937072753906], "spans": [[3, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [441.9408874511719, 427.264892578125, 465.1816711425781, 434.3937072753906], "spans": [[3, 1]], "text": "300 00 300.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [318.0412902832031, 413.7298889160156, 390.69854736328125, 420.85870361328125], "spans": [[4, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [435.6726379394531, 413.7298889160156, 465.1684265136719, 420.85870361328125], "spans": [[4, 1]], "text": "1,775.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [318.0412902832031, 400.22265625, 390.6852111816406, 407.3514709472656], "spans": [[5, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [441.968505859375, 400.22265625, 465.1609191894531, 407.3514709472656], "spans": [[5, 1]], "text": "601.70", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [318.0412902832031, 386.6877136230469, 390.6852111816406, 393.8165283203125], "spans": [[6, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [446.19329833984375, 386.6877136230469, 465.16595458984375, 393.8165283203125], "spans": [[6, 1]], "text": "37.80", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [318.0412902832031, 373.1529541015625, 390.6852111816406, 380.2817687988281], "spans": [[7, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [441.968505859375, 373.1529541015625, 465.1609191894531, 380.2817687988281], "spans": [[7, 1]], "text": "490.45", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [318.0412902832031, 359.6453857421875, 390.6678771972656, 366.7745361328125], "spans": [[8, 0]], "text": "**** **** **** 1234 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [437.7164001464844, 359.6453857421875, 465.1811218261719, 366.7742004394531], "spans": [[8, 1]], "text": "1005.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [318.0412902832031, 346.11041259765625, 390.6852111816406, 353.2392272949219], "spans": [[9, 0]], "text": "**** **** **** 1234", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [441.968505859375, 346.11041259765625, 465.1609191894531, 353.2392272949219], "spans": [[9, 1]], "text": "750.33", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [318.0412902832031, 332.5756530761719, 390.6852111816406, 339.7044677734375], "spans": [[10, 0]], "text": "**** **** **** 0001", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [446.19329833984375, 332.5756530761719, 465.16595458984375, 339.7044677734375], "spans": [[10, 1]], "text": "10.00", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}]], "model": null, "bounding-box": null}], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 792.0, "page": 1, "width": 612.0}, {"height": 792.0, "page": 2, "width": 612.0}, {"height": 792.0, "page": 3, "width": 612.0}, {"height": 792.0, "page": 4, "width": 612.0}, {"height": 792.0, "page": 5, "width": 612.0}, {"height": 792.0, "page": 6, "width": 612.0}, {"height": 792.0, "page": 7, "width": 612.0}, {"height": 792.0, "page": 8, "width": 612.0}, {"height": 792.0, "page": 9, "width": 612.0}, {"height": 792.0, "page": 10, "width": 612.0}, {"height": 792.0, "page": 11, "width": 612.0}, {"height": 792.0, "page": 12, "width": 612.0}, {"height": 792.0, "page": 13, "width": 612.0}, {"height": 792.0, "page": 14, "width": 612.0}, {"height": 792.0, "page": 15, "width": 612.0}, {"height": 792.0, "page": 16, "width": 612.0}, {"height": 792.0, "page": 17, "width": 612.0}, {"height": 792.0, "page": 18, "width": 612.0}, {"height": 792.0, "page": 19, "width": 612.0}, {"height": 792.0, "page": 20, "width": 612.0}, {"height": 792.0, "page": 21, "width": 612.0}, {"height": 792.0, "page": 22, "width": 612.0}, {"height": 792.0, "page": 23, "width": 612.0}, {"height": 792.0, "page": 24, "width": 612.0}, {"height": 792.0, "page": 25, "width": 612.0}, {"height": 792.0, "page": 26, "width": 612.0}, {"height": 792.0, "page": 27, "width": 612.0}, {"height": 792.0, "page": 28, "width": 612.0}, {"height": 792.0, "page": 29, "width": 612.0}, {"height": 792.0, "page": 30, "width": 612.0}, {"height": 792.0, "page": 31, "width": 612.0}, {"height": 792.0, "page": 32, "width": 612.0}, {"height": 792.0, "page": 33, "width": 612.0}, {"height": 792.0, "page": 34, "width": 612.0}, {"height": 792.0, "page": 35, "width": 612.0}, {"height": 792.0, "page": 36, "width": 612.0}, {"height": 792.0, "page": 37, "width": 612.0}, {"height": 792.0, "page": 38, "width": 612.0}, {"height": 792.0, "page": 39, "width": 612.0}, {"height": 792.0, "page": 40, "width": 612.0}, {"height": 792.0, "page": 41, "width": 612.0}, {"height": 792.0, "page": 42, "width": 612.0}, {"height": 792.0, "page": 43, "width": 612.0}, {"height": 792.0, "page": 44, "width": 612.0}, {"height": 792.0, "page": 45, "width": 612.0}, {"height": 792.0, "page": 46, "width": 612.0}, {"height": 792.0, "page": 47, "width": 612.0}, {"height": 792.0, "page": 48, "width": 612.0}, {"height": 792.0, "page": 49, "width": 612.0}, {"height": 792.0, "page": 50, "width": 612.0}, {"height": 792.0, "page": 51, "width": 612.0}, {"height": 792.0, "page": 52, "width": 612.0}, {"height": 792.0, "page": 53, "width": 612.0}, {"height": 792.0, "page": 54, "width": 612.0}, {"height": 792.0, "page": 55, "width": 612.0}, {"height": 792.0, "page": 56, "width": 612.0}, {"height": 792.0, "page": 57, "width": 612.0}, {"height": 792.0, "page": 58, "width": 612.0}, {"height": 792.0, "page": 59, "width": 612.0}, {"height": 792.0, "page": 60, "width": 612.0}, {"height": 792.0, "page": 61, "width": 612.0}, {"height": 792.0, "page": 62, "width": 612.0}, {"height": 792.0, "page": 63, "width": 612.0}, {"height": 792.0, "page": 64, "width": 612.0}, {"height": 792.0, "page": 65, "width": 612.0}, {"height": 792.0, "page": 66, "width": 612.0}, {"height": 792.0, "page": 67, "width": 612.0}, {"height": 792.0, "page": 68, "width": 612.0}, {"height": 792.0, "page": 69, "width": 612.0}, {"height": 792.0, "page": 70, "width": 612.0}, {"height": 792.0, "page": 71, "width": 612.0}, {"height": 792.0, "page": 72, "width": 612.0}, {"height": 792.0, "page": 73, "width": 612.0}, {"height": 792.0, "page": 74, "width": 612.0}, {"height": 792.0, "page": 75, "width": 612.0}, {"height": 792.0, "page": 76, "width": 612.0}, {"height": 792.0, "page": 77, "width": 612.0}, {"height": 792.0, "page": 78, "width": 612.0}, {"height": 792.0, "page": 79, "width": 612.0}, {"height": 792.0, "page": 80, "width": 612.0}, {"height": 792.0, "page": 81, "width": 612.0}, {"height": 792.0, "page": 82, "width": 612.0}, {"height": 792.0, "page": 83, "width": 612.0}, {"height": 792.0, "page": 84, "width": 612.0}, {"height": 792.0, "page": 85, "width": 612.0}, {"height": 792.0, "page": 86, "width": 612.0}, {"height": 792.0, "page": 87, "width": 612.0}, {"height": 792.0, "page": 88, "width": 612.0}, {"height": 792.0, "page": 89, "width": 612.0}, {"height": 792.0, "page": 90, "width": 612.0}, {"height": 792.0, "page": 91, "width": 612.0}, {"height": 792.0, "page": 92, "width": 612.0}, {"height": 792.0, "page": 93, "width": 612.0}, {"height": 792.0, "page": 94, "width": 612.0}, {"height": 792.0, "page": 95, "width": 612.0}, {"height": 792.0, "page": 96, "width": 612.0}, {"height": 792.0, "page": 97, "width": 612.0}, {"height": 792.0, "page": 98, "width": 612.0}, {"height": 792.0, "page": 99, "width": 612.0}, {"height": 792.0, "page": 100, "width": 612.0}, {"height": 792.0, "page": 101, "width": 612.0}, {"height": 792.0, "page": 102, "width": 612.0}, {"height": 792.0, "page": 103, "width": 612.0}, {"height": 792.0, "page": 104, "width": 612.0}, {"height": 792.0, "page": 105, "width": 612.0}, {"height": 792.0, "page": 106, "width": 612.0}, {"height": 792.0, "page": 107, "width": 612.0}, {"height": 792.0, "page": 108, "width": 612.0}, {"height": 792.0, "page": 109, "width": 612.0}, {"height": 792.0, "page": 110, "width": 612.0}, {"height": 792.0, "page": 111, "width": 612.0}, {"height": 792.0, "page": 112, "width": 612.0}, {"height": 792.0, "page": 113, "width": 612.0}, {"height": 792.0, "page": 114, "width": 612.0}, {"height": 792.0, "page": 115, "width": 612.0}, {"height": 792.0, "page": 116, "width": 612.0}, {"height": 792.0, "page": 117, "width": 612.0}, {"height": 792.0, "page": 118, "width": 612.0}, {"height": 792.0, "page": 119, "width": 612.0}, {"height": 792.0, "page": 120, "width": 612.0}, {"height": 792.0, "page": 121, "width": 612.0}, {"height": 792.0, "page": 122, "width": 612.0}, {"height": 792.0, "page": 123, "width": 612.0}, {"height": 792.0, "page": 124, "width": 612.0}, {"height": 792.0, "page": 125, "width": 612.0}, {"height": 792.0, "page": 126, "width": 612.0}, {"height": 792.0, "page": 127, "width": 612.0}, {"height": 792.0, "page": 128, "width": 612.0}, {"height": 792.0, "page": 129, "width": 612.0}, {"height": 792.0, "page": 130, "width": 612.0}, {"height": 792.0, "page": 131, "width": 612.0}, {"height": 792.0, "page": 132, "width": 612.0}, {"height": 792.0, "page": 133, "width": 612.0}, {"height": 792.0, "page": 134, "width": 612.0}, {"height": 792.0, "page": 135, "width": 612.0}, {"height": 792.0, "page": 136, "width": 612.0}, {"height": 792.0, "page": 137, "width": 612.0}, {"height": 792.0, "page": 138, "width": 612.0}, {"height": 792.0, "page": 139, "width": 612.0}, {"height": 792.0, "page": 140, "width": 612.0}, {"height": 792.0, "page": 141, "width": 612.0}, {"height": 792.0, "page": 142, "width": 612.0}, {"height": 792.0, "page": 143, "width": 612.0}, {"height": 792.0, "page": 144, "width": 612.0}, {"height": 792.0, "page": 145, "width": 612.0}, {"height": 792.0, "page": 146, "width": 612.0}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5110.md b/tests/data/groundtruth/docling_v1/redp5110.md deleted file mode 100644 index aebba526..00000000 --- a/tests/data/groundtruth/docling_v1/redp5110.md +++ /dev/null @@ -1,2732 +0,0 @@ -Front cover - - - - -## Row and Column Access Control Support in IBM DB2 for i - -Implement roles and separation of duties - -Leverage row permissions on the database - -Protect columns by defining column masks - -Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan - -Redpaper - - - - -## International Technical Support Organization - -## Row and Column Access Control Support in IBM DB2 for i - -November 2014 - -Note: Before using this information and the product it supports, read the information in "Notices" on page vii. - -## First Edition (November 2014) - -This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1). - -Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. - -## Contents - - - -| Notices | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii | -|------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| -| Trademarks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii | -| DB2 for i Center of Excellence | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix | -| Preface | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | -| Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | | -| Now you can become a published author, too! | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii | -| Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | xiii | -| Stay connected to IBM Redbooks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv | -| Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1 | -| 1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | | -| 1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 2 | -| 1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | | -| 1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 4 | -| 1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . . | 5 | -| Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 7 | -| 2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 8 | -| 2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . . | 8 | -| 2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . . | 8 | -| 2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . . | 9 | -| 2.1.4 Database Information function: QIBM_DB_SYSMON | . . . . . . . . . . . . . . . . . . . . . . 9 | -| 2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . . | 9 | -| 2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 10 | -| 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . . | 10 | -| 2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | | -| Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 13 | -| 3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . . | 14 | -| 3.1.1 Row permission and column mask definitions | . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | -| 3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 16 | -| 3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | -| 3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | -| 3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 19 | -| 3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 20 | -| 3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . . | 21 | -| | . . . . . . . . . . . . . . . . . . . . . . . . 22 | -| 3.5 SELECT, INSERT, and UPDATE behavior with RCAC | | -| 3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . . | 23 | -| 3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . . | 23 | -| 3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 24 | -| 3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 25 | -| 3.6.5 Defining and creating column masks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | -| 3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 28 | -| 3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 29 | -| 3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . . | 32 | - - - -| Chapter 4. Implementing Row and Column Access Control: Banking example . . . . . | 37 | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . . | 38 | -| 4.2 Description of the users roles and responsibilities | . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | -| 4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 42 | -| 4.3.1 Reviewing the tables that are used in this example | . . . . . . . . . . . . . . . . . . . . . . . 42 | -| 4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group | . . 47 | -| 4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . . | 50 | -| 4.3.4 Creating the CUSTOMER_LOGIN_ID global variable | . . . . . . . . . . . . . . . . . . . . . 52 | -| 4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 54 | -| 4.3.6 Defining and creating column masks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | -| 4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . . | 60 | -| 4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 64 | -| 4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 66 | -| 4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 75 | -| Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 79 | -| | Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 | -| 5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 81 | -| 5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 82 | -| 5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . . | 82 | -| | 82 | -| 5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 100 | -| | 83 | -| Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . 89 90 | -| 6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | -| 6.2.1 Effects when RCAC is defined on the source table | 6.2.1 Effects when RCAC is defined on the source table | -| | 88 | -| 6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 91 | -| 6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 | 6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 | -| 6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 | 6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 | -| 6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 96 | -| 6.4 Monitoring, analyzing, and debugging with RCAC | 97 | -| . . . . . . . . . . . . . . . . . . . . . . . . . . . . | Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 | -| 6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 99 | -| 6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | -| 6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . . | 102 | -| 6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 103 | -| | 105 | -| 6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | -| 6.6 | 105 | -| | 107 | -| 6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 108 | -| | 108 | -| | 109 | -| | 109 | -| | 113 | -| | 111 | -| Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . . | Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . . | - - - -| 7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -|---------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------| -| 7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -| 7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -| 7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -| 7.1.4 Regenerating | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 | -| 7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . . | 115 | -| 7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 115 | -| 7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 116 | -| 7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 117 | -| Chapter 8. Designing and planning for success | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 | -| 8.1 Implementing RCAC with good design and proper planning | . . . . . . . . . . . . . . . . . . . 120 | -| 8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 120 | -| Appendix A. Database definitions for the RCAC banking example | . . . . . . . . . . . . . . 121 | -| Related publications | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 | -| Other publications | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 | -| Online resources | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 | -| Help from IBM | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 | - -## Notices - -This information was developed for products and services offered in the U.S.A. - -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. - -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: - -IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A. - -The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. - -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. - -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. - -IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. - -Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment. - -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. - -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. - -## COPYRIGHT LICENSE: - -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. - -## Trademarks - -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or ™), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml - -The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: - -AS/400fi - -DB2fi - -DRDAfi - -IBMfi - -Power Systems™ - -Redbooksfi - -Redpaper™ - -Redbooks (log o) fi System - -ifi - -The following terms are trademarks of other companies: - -Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. - -Other company, product, or service names may be trademarks or service marks of others. - - - - -DB2 for i Center of Excellence - -Solution Brief IBM Systems Lab Services and Training - - - - -## Highlights - -- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH - -- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH - -- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH - -- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH - - - - -Power Services - -## DB2 for i Center of Excellence - -Expert help to achieve your business requirements - -## We build confident, satisfied clients - -No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. - -Because no one else is IBM. - -With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. - -## Who we are, some of what we do - -Global CoE engagements cover topics including: - -- r Database performance and scalability - -- r Advanced SQL knowledge and skills transfer - -- r Business intelligence and analytics - -- r DB2 Web Query - -- r Query/400 modernization for better reporting and analysis capabilities - -- r Database modernization and re-engineering - -- r Data-centric architecture and design - -- r Extremely large database and overcoming limits to growth - -- r ISV education and enablement - -## What you can expect - -Depending on the engagement, our team of consultants offer: - -- r Briefings, consulting and guidance on demand - -- r Illumination of the DB2 for i capabilities and leadership to exploit them - -- r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation - -- r Configuration of systems, operating system and products to fully leverage database capabilities - -## Key client benefits - -T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes. - -## For more information - -Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit: - -ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH - - - - -© Copyright IBM Corporation 2013 - -IBM Corporation Route 100 Somers, NY 10589 - -Produced in the United States of America March 2013 - -IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at www.ibm.com/legal/ copytrade.shtml . - -This document is current as of the initial date of publication and may be changed by IBM at any time. - -Not all offerings are available in every country in which IBM operates. - - - - -Please Recycle - -QLS12392-USEN-00 - -## Preface - -This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. - -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. - -This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. - - - - - - - -Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. - -Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . - -## Authors - - - - - - - - - - - - - - - - -Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i. - -Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes. - -Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services. - -Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead "JDE on i" analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i. - -Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems™ Lab Services organization. Doug's 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings. - - - - - - - -Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36. - -Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester. - -Thanks to the following people for their contributions to this project: - -Debra Landon - -International Technical Support Organization, Rochester Center - -Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development - -## Now you can become a published author, too! - -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. - -Find out more about the residency program, browse the residency index, and apply online at: - -ibm.com /redbooks/residencies.html - -## Comments welcome - -Your comments are important to us! - -We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways: - -- GLYPH Use the online Contact us review Redbooks form found at: - -ibm.com /redbooks - -- GLYPH Send your comments in an email to: - -redbooks@us.ibm.com - -- GLYPH Mail your comments to: - -IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400 - -## Stay connected to IBM Redbooks - -- GLYPH Find us on Facebook: - -http://www.facebook.com/IBMRedbooks - -- GLYPH Follow us on Twitter: - -http://twitter.com/ibmredbooks - -- GLYPH Look for us on LinkedIn: - -http://www.linkedin.com/groups?home=&gid=2130806 - -- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: - -https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm - -- GLYPH Stay current on recent Redbooks publications with RSS Feeds: - -http://www.redbooks.ibm.com/rss.html - - - - -Chapter 1. - -1 - -## Securing and protecting IBM DB2 data - -Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. - -Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. - -This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: - -- GLYPH Security fundamentals - -- GLYPH Current state of IBM i security - -- GLYPH DB2 for i security controls - -## 1.1 Security fundamentals - -Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: - -- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. - -- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. - -A security policy is what defines whether the system and its settings are secure (or not). - -- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. - -With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. - -## 1.2 Current state of IBM i security - -Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. - -Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. - -Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. - -Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day. - -Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces. - -An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level. - -## 1.3 DB2 for i security controls - -As described in 1.2, "Current state of IBM i security" on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table. - -As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table. - -Figure 1-1 All-or-nothing access to the rows of a table - - -Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. - -## 1.3.1 Existing row and column control - -Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. - -Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. - -Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. - -Figure 1-2 Existing row and column controls - - -## 1.3.2 New controls: Row and Column Access Control - -Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC). - -The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place. - - - - -Chapter 2. - -2 - -## Roles and separation of duties - -One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs. - -To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks. - -This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics: - -- GLYPH Roles - -- GLYPH Separation of duties - -## 2.1 Roles - -Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization's requirements for limiting access to data or separation of duties. - -To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service. - -Roles are divided among the following DB2 functions and their corresponding function usage IDs: - -- GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA - -- GLYPH Toolbox application server access: QIBM_DB_ZDA - -- GLYPH Database Administrator function: QIBM_DB_SQLADM - -- GLYPH Database Information function: QIBM_DB_SYSMON - -- GLYPH Security Administrator function: QIBM_DB_SECADM - -## 2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA - -The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. - -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. - -## 2.1.2 Toolbox application server access: QIBM_DB_ZDA - -The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console. - -This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. - -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. - -## 2.1.3 Database Administrator function: QIBM_DB_SQLADM - -The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own. - -The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization. - -To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM. - -## Granting QIBM_DB_SQLADM function usage - -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions. - -## 2.1.4 Database Information function: QIBM_DB_SYSMON - -The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties. - -For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization. - -## Granting QIBM_DB_SYSMON function usage - -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions. - -## 2.1.5 Security Administrator function: QIBM_DB_SECADM - -The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. - -Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization. - -## Granting QIBM_DB_SECADM function usage - -Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group. - -## 2.1.6 Change Function Usage CL command - -The following CL commands can be used to work with, display, or change function usage IDs: - -- GLYPH Work Function Usage ( WRKFCNUSG ) - -- GLYPH Change Function Usage ( CHGFCNUSG ) - -- GLYPH Display Function Usage ( DSPFCNUSG ) - -For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: - -CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) - -## 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view - -The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view. - -Table 2-1 FUNCTION_USAGE view - -| Column name | Data type | Description | -|---------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| FUNCTION_ID | VARCHAR(30) | ID of the function. | -| USER_NAME | VARCHAR(10) | Name of the user profile that has a usage setting for this function. | -| USAGE | VARCHAR(7) | Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. | -| USER_TYPE | VARCHAR(5) | Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. | - -To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. - -Example 2-1 Query to determine who has authority to define and manage RCAC - -SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name; - -## 2.2 Separation of duties - -Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. - -For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. - -In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. - -QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. - -QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. - -A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. - -Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. - -Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority - -| User action | *JOBCTL | QIBM_DB_SECADM | QIBM_DB_SQLADM | QIBM_DB_SYSMON | No Authority | -|--------------------------------------------------------------------------------|-----------|------------------|------------------|------------------|----------------| -| SET CURRENT DEGREE (SQL statement) | X | | X | | | -| CHGQRYA command targeting a different user's job | X | | X | | | -| STRDBMON or ENDDBMON commands targeting a different user's job | X | | X | | | -| STRDBMON or ENDDBMON commands targeting a job that matches the current user | X | | X | X | X | -| QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job | X | | X | X | | -| Visual Explain within Run SQL scripts | X | | X | X | X | -| Visual Explain outside of Run SQL scripts | X | | X | | | -| ANALYZE PLAN CACHE procedure | X | | X | | | -| DUMP PLAN CACHE procedure | X | | X | | | -| MODIFY PLAN CACHE procedure | X | | X | | | -| MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority) | X | | X | | | -| CHANGE PLAN CACHE SIZE procedure (currently does not check authority) | X | | X | | | - - - -| User action | *JOBCTL | QIBM_DB_SECADM | QIBM_DB_SQLADM | QIBM_DB_SYSMON | No Authority | -|--------------------------------------------------------------|-----------|------------------|------------------|------------------|----------------| -| START PLAN CACHE EVENT MONITOR procedure | X | | X | | | -| END PLAN CACHE EVENT MONITOR procedure | X | | X | | | -| END ALL PLAN CACHE EVENT MONITORS procedure | X | | X | | | -| Work with RCAC row permissions (Create, modify, or delete) | | X | | | | -| Work with RCAC column masks (Create, modify, or delete) | | X | | | | -| Change Object Owner ( CHGOBJOWN ) CL command | | X | | | | -| Change Object Primary Group ( CHGOBJPGP ) CL command | | X | | | | -| Grant Object Authority ( GRTOBJAUT ) CL command | | X | | | | -| Revoke Object Authority ( RVKOBJAUT ) CL command | | X | | | | -| Edit Object Authority ( EDTOBJAUT ) CL command | | X | | | | -| Display Object Authority ( DSPOBJAUT ) CL command | | X | | | | -| Work with Objects ( WRKOBJ ) CL command | | X | | | | -| Work with Libraries ( WRKLIB ) CL command | | X | | | | -| Add Authorization List Entry ( ADDAUTLE ) CL command | | X | | | | -| Change Authorization List Entry ( CHGAUTLE ) CL command | | X | | | | -| Remove Authorization List Entry ( RMVAUTLE ) CL command | | X | | | | -| Retrieve Authorization List Entry ( RTVAUTLE ) CL command | | X | | | | -| Display Authorization List ( DSPAUTL ) CL command | | X | | | | -| Display Authorization List Objects ( DSPAUTLOBJ ) CL command | | X | | | | -| Edit Authorization List ( EDTAUTL ) CL command | | X | | | | -| Work with Authorization Lists ( WRKAUTL ) CL command | | X | | | | - - - - -Chapter 3. - -3 - -## Row and Column Access Control - -This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example. - -The following topics are covered in this chapter: - -- GLYPH Explanation of RCAC and the concept of access control - -- GLYPH Special registers and built-in global variables - -- GLYPH VERIFY_GROUP_FOR_USER function - -- GLYPH Establishing and controlling accessibility by using the RCAC rule text - -- GLYPH SELECT, INSERT, and UPDATE behavior with RCAC - -- GLYPH Human resources example - -## 3.1 Explanation of RCAC and the concept of access control - -RCAC limits data access to those users who have a business "need to know". RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called "IBM Advanced Data Security for i", also known as option 47 of IBM i 7.2. - -In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms: - -- GLYPH Row permissions - -- GLYPH Column masks - -Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements. - -Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data. - -RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic. - -Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility. - -## 3.1.1 Row permission and column mask definitions - -The following sections define row permission and column masks. - -## Row permission - -A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees. - -The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules. - -Figure 3-1 CREATE PERMISSION SQL statement - -The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement - - -## Column mask - -A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. - -Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules. - -Figure 3-2 CREATE MASK SQL statement - - -## 3.1.2 Enabling and activating RCAC - -You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17. - -Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table. - -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. - -Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements - - -You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC. - -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. - -Figure 3-4 ALTER TABLE SQL statement - - -When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set. - -It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user's ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first. - -Note: If a user does not have permission to access the row, the column mask logic is not invoked. - -## 3.2 Special registers and built-in global variables - -This section describes how you can use special registers and built-in global variables to implement RCAC. - -## 3.2.1 Special registers - -A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server. - -IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers: - -- GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION . - -- GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128). - -- GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller's or the owner's user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner's authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128). - -- GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128). - -In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text. - -Table 3-1 summarizes these special registers and their values. - -Table 3-1 Special registers and their corresponding values - -| Special register | Corresponding value | -|----------------------|---------------------------------------------------------------------------------------------------------------------------------------| -| USER or SESSION_USER | The effective user of the thread excluding adopted authority. | -| CURRENT_USER | The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. | -| SYSTEM_USER | The authorization ID that initiated the connection. | - -Figure 3-5 shows the difference in the special register values when an adopted authority is used: - -- GLYPH A user connects to the server using the user profile ALICE. - -- GLYPH USER and CURRENT USER initially have the same value of ALICE. - -- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. - -- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. - -- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. - -Figure 3-5 Special registers and adopted authority - - -## 3.2.2 Built-in global variables - -Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. - -IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. - -Table 3-2 lists the nine built-in global variables. - -Table 3-2 Built-in global variables - -| Global variable | Type | Description | -|-----------------------|--------------|----------------------------------------------------------------| -| CLIENT_HOST | VARCHAR(255) | Host name of the current client as returned by the system | -| CLIENT_IPADDR | VARCHAR(128) | IP address of the current client as returned by the system | -| CLIENT_PORT | INTEGER | Port used by the current client to communicate with the server | -| PACKAGE_NAME | VARCHAR(128) | Name of the currently running package | -| PACKAGE_SCHEMA | VARCHAR(128) | Schema name of the currently running package | -| PACKAGE_VERSION | VARCHAR(64) | Version identifier of the currently running package | -| ROUTINE_SCHEMA | VARCHAR(128) | Schema name of the currently running routine | -| ROUTINE_SPECIFIC_NAME | VARCHAR(128) | Name of the currently running routine | -| ROUTINE_TYPE | CHAR(1) | Type of the currently running routine | - -## 3.3 VERIFY_GROUP_FOR_USER function - -The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. - -If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. - -Here is an example of using the VERIFY_GROUP_FOR_USER function: - -- 1. There are user profiles for MGR, JANE, JUDY, and TONY. - -- 2. The user profile JANE specifies a group profile of MGR. - -- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: - -VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY') - -## 3.4 Establishing and controlling accessibility by using the RCAC rule text - -When defining a row permission or column mask, the "magic" of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine. - -In the case of a row permission, the rule text is the "test" of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot. - -In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value. - -For a simple example of implementing row permissions and column masks, see 3.6, "Human resources example" on page 22. - -In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause. - -For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking. - -For more information about what is permitted, see the "Database programming" topic of the IBM i 7.2 Knowledge Center, found at: - -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en - -One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user's identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques. - -More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1. - -Example 3-1 Subquery that is used as part of the rule - -DATE_MASTER D - -D.BUSINESS_DAY = 'Y') - -CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE - -Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions. - -## 3.5 SELECT, INSERT, and UPDATE behavior with RCAC - -RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis. - -Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you. - -For more information and considerations about data movement in an RCAC environment, see Chapter 6, "Additional considerations" on page 85. - -Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data. - -## 3.6 Human resources example - -This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users: - -- GLYPH Tax_Id information - -- GLYPH YEAR of the birth date of the employee (hiding the age of the employee) - -In this example, there are four different types of users: - -- GLYPH Employees - -- GLYPH Managers - -- GLYPH Human Resources Manager - -- GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.) - -The following sections describe step-by-step what is needed to be done to implement RCAC in this environment. - -## 3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants - -The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, "Security Administrator function: QIBM_DB_SECADM" on page 9). Complete the following steps: - -- 1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority. - -Example 3-2 Function ID required to implement RCAC - -CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED) - -- 2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3. - -Example 3-3 Verifying what user profiles have authorization to implement RCAC - -SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id ='QIBM_DB_SECADM' ORDER BY user_name; - -- 3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database. - -Figure 3-6 Result of the function ID query - -## 3.6.2 Creating group profiles for the users and their roles - -Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps: - -- 1. In this example, there are three group profiles: - -- -HR (Human Resource personnel) - -- -MGR (Managers) - -- -EMP (Employees) - -These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles. - -Example 3-4 Creating group profiles - -CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group') - -- 2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS). - -Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile. - -## 3.6.3 Demonstrating data access without RCAC - -Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps: - -- 1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table. - -Example 3-5 Counting the number of employees - -SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES; - -The result of this query is shown in Figure 3-7, which is the total number of employees of the company. - -Figure 3-7 Number of employees - - -- 2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are. - -Example 3-6 Displaying the information of the Employees - -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES - -## The result of this query is shown in Figure 3-8. - -Figure 3-8 List of employees without RCAC enabled - -## 3.6.4 Defining and creating row permissions - -Implement RCAC on the EMPLOYEES table by completing the following steps: - -- 1. Start by defining a row permission. In this example, the rules to enforce include the following ones: - -- -Human Resources employees can see all the rows. - -- -Managers can see only information for the employees that they manage. - -- -Employees can see only their own information. - -- -Consultants are not allowed to see any rows in the table. - -To implement this row permission, run the SQL statement that is shown in Example 3-7. - -Example 3-7 Creating a permission for the EMPLOYEE table - -CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ; - -- 2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, "Enabling and activating RCAC" on page 16. - -Figure 3-9 Row permissions that are shown in System i Navigator - - -## 3.6.5 Defining and creating column masks - -Define the different masks for the columns that are sensitive by completing the following steps: - -- 1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones: - -- -Human Resources can see the entire date of birth of the employees. - -- -Employees can see only their own date of birth. - -- -Managers can see the date of birth of their employees masked with YEAR being 9999. - -To implement this column mask, run the SQL statement that is shown in Example 3-8. - -Example 3-8 Creation of a mask on the DATE_OF_BIRTH column - -CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH - -RETURN CASE - -WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ; - -- 2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones: - -- -Human Resources can see the unmasked TAX_ID of the employees. - -- -Employees can see only their own unmasked TAX_ID. - -- -Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). - -- -Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX. - -- To implement this column mask, run the SQL statement that is shown in Example 3-9. - -Example 3-9 Creating a mask on the TAX_ID column - -CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; - -- 3. Figure 3-10 shows the masks that are created in the HR_SCHEMA. - -Figure 3-10 Column masks shown in System i Navigator - - -## 3.6.6 Activating RCAC - -Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: - -- 1. Run the SQL statements that are shown in Example 3-10. - -## Example 3-10 Activating RCAC on the EMPLOYEES table - -- /* Active Row Access Control (permissions) */ - -/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; - -*/ - -- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . - -Figure 3-11 Selecting the EMPLOYEES table from System i Navigator - - -- 3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked. - -Figure 3-12 RCAC enabled on the EMPLOYEES table - - -## 3.6.7 Demonstrating data access with RCAC - -You are now ready to start testing RCAC with the four different users. Complete the following steps: - -- 1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, "Demonstrating data access without RCAC" on page 24). - -Example 3-11 EMPLOYEES count - -SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES; - -- 2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees). - -Figure 3-13 Count of EMPLOYEES by HR - - -- 3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6. - -Figure 3-14 Count of EMPLOYEES by a manager - - -- 4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row). - -Figure 3-15 Count of EMPLOYEES by an employee - - -- 5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all. - -Figure 3-16 Count of EMPLOYEES by a consultant - - -Does the result make sense? Yes, it does because RCAC is enabled. - -- 6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, "Demonstrating data access without RCAC" on page 24. It is shown in Example 3-12. - -Example 3-12 SELECT statement to test with the different users - -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES - -- 7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns. - -Figure 3-17 SQL statement result by Human Resources user profile - -- 8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns. - -Figure 3-18 SQL statement result by Manager profile - -- 9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all. - -Figure 3-19 SQL statement result by an employee profile - -- 10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company's employees. - -Figure 3-20 SQL statement result by Consultant/DBE profile - -## 3.6.8 Demonstrating data access with a view and RCAC - -This section covers data access with a view and RCAC. Complete the following steps: - -- 1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave. - -Figure 3-21 Employees on leave - -- 2. Example 3-13 shows the definition of the view. - -Example 3-13 VIew of employees on leave - -CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, - -TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG ) - -AS - -SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, - -ON_LEAVE_FLAG - -FROM - -HR_SCHEMA.EMPLOYEES - -WHERE - -ON_LEAVE_FLAG = 'Y'; - -- 3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14: - -Example 3-14 SQL statement for employees on leave - -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM - -HR_SCHEMA.EMPLOYEES_ON_LEAVE; - -- 4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22. - -Figure 3-22 Employees on leave - Human Resources user - -- 5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well. - -Figure 3-23 Employee on leave - Manager of Field Reps user - -- 6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave. - -. - -Figure 3-24 Employees on leave - employee user - - - - -Chapter 4. - -4 - -## Implementing Row and Column Access Control: Banking example - -This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. - -The following topics are covered in this chapter: - -- GLYPH Business requirements for the RCAC banking scenario - -- GLYPH Description of the users roles and responsibilities - -- GLYPH Implementation of RCAC - -## 4.1 Business requirements for the RCAC banking scenario - -As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application: - -- GLYPH CUSTOMERS - -- GLYPH ACCOUNTS - -- GLYPH TRANSACTIONS - -RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values. - -In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee's personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet. - -Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile. - -The customer's identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer's login value. This value is compared to the customer's login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table. - -Applications that do not use the web interface do not have to be changed because the global variable is NULL by default. - -A diagram of the internet banking architecture is shown in Figure 4-1: - -- GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested. - -- GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent). - -- GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent). - -Figure 4-1 Internet banking example - - -## 4.2 Description of the users roles and responsibilities - -During the requirements gathering phase, the following groups of users are identified and codified: - -- GLYPH SECURITY: Security officer and security administrators - -- GLYPH DBE: Database engineers - -- GLYPH ADMIN: Bank business administrators - -- GLYPH TELLER: Bank tellers - -- GLYPH CUSTOMER: Bank customers using the internet - -- GLYPH PUBLIC: Anyone not already in a group - -Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example. - -Figure 4-2 Rules for row and column access - - -The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table. - -Figure 4-3 Column masks - -| | | CUSTOMERS | ACCOUNTS | -|----------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------| -| SECURITY | No Rows | CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID | ACCOUNT_NUMBER | -| DBE | All Rows | CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID | ACCOUNT NUMBER ACCOUNT_NUMBER | -| ADMIN | All Rows | None | None | -| TELLER | All Rows | CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _ | None | -| CUSTOMER | Own Rows | None | None | -| PUBLIC | No Rows | CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID | ACCOUNT_NUMBER | - -For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur. - -- GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group. - -- GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group. - -- GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group. - -- GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group. - -- GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group. - -- GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed. - -- GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG. - -## 4.3 Implementation of RCAC - -Figure 4-4 shows the data model of the banking scenario that is used in this example. - -Figure 4-4 Data model of the banking scenario - - -This section covers the following steps: - -- GLYPH Reviewing the tables that are used in this example - -- GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group - -- GLYPH Creating group profiles for the users and their roles - -- GLYPH Creating the CUSTOMER_LOGIN_ID global variable - -- GLYPH Defining and creating row permissions - -- GLYPH Defining and creating column masks - -- GLYPH Restricting the inserting and updating of masked data - -- GLYPH Activating row and column access control - -- GLYPH Reviewing row permissions - -- GLYPH Demonstrating data access with RCAC - -- GLYPH Query implementation with RCAC activated - -## 4.3.1 Reviewing the tables that are used in this example - -This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers. - -Figure 4-5 Tables that are used in the banking example - - -Note: Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. - -To review the attributes of each table that is used in this banking example, complete the following steps: - -- 1. Review the columns of each the tables through System i Navigator. Expand Database  named Database  Schemas  BANK_SCHEMA  Tables . - -- 2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented. - -Figure 4-6 CUSTOMERS table attributes - - -- 3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7. - -Figure 4-7 Column definitions of the CUSTOMERS table - -- 4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table. - -Figure 4-8 Reviewing the constraints on the CUSTOMERS table - - -- 5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet. - -Figure 4-9 ACCOUNTS table attributes - - -- 6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10. - -Figure 4-10 Column definitions of the ACCOUNTS table - -- 7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table. - -Figure 4-11 Reviewing the constraints on the ACCOUNTS table - - -- 8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet. - -Figure 4-12 TRANSACTIONS table attributes - - -- 9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13. - -Figure 4-13 Column definitions of the TRANSACTIONS table - -- 10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table. - -Figure 4-14 Reviewing the constraints on the TRANSACTIONS table - - -Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario. - -## 4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group - -The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, "Roles" on page 8. In this example, the DBEs are users MCAIN and HBEDOYA. - -## Complete the following steps: - -- 1. Right-click the database connection and select Application Administration , as shown in Figure 4-15. - -Figure 4-15 Application administration - - -- 2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i  Database and select the function usage ID of Database Security Administrator . - -Figure 4-16 Application administration for IBM i - - -- 3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17. - -Figure 4-17 Customizing the Database Security Administrator function usage ID - - -- 4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK . - -Figure 4-18 Customize Access window - - -- 5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19. - -Figure 4-19 Function usage ID Database Security Administrator customized - - -- 6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20. - -Figure 4-20 Query to display user profiles with function usage ID for RCAC - - -## 4.3.3 Creating group profiles for the users and their roles - -The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, "Description of the users roles and responsibilities" on page 39. - -## Complete the following steps: - -- 1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21. - -Figure 4-21 Creating group profiles - - -- 2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add . - -Figure 4-22 shows adding user TQSPENCER to the TELLER group profile. - -Figure 4-22 Creating group profiles and adding users - - -- 3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups  Groups , as shown in Figure 4-23. - -Figure 4-23 Newly created group profiles - - -## 4.3.4 Creating the CUSTOMER_LOGIN_ID global variable - -In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, "Built-in global variables" on page 19. - -## Complete the following steps: - -- 1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New  Global Variable , as shown in Figure 4-24. - -Figure 4-24 Creating a global variable - - -- 2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK . - -Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID - - -- 3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26. - -Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable - - -- 4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable. - -Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable - - -## 4.3.5 Defining and creating row permissions - -You now ready to define the row permissions of the tables. Complete the following steps: - -- 1. From the navigation pane of System i Navigator, click Schemas  BANK_SCHEMA , right-click Row Permissions , and select New  Row Permission , as shown in Figure 4-28. - -Figure 4-28 Selecting new row permissions - - -- 2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy: - -- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows. - -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. - -- -Any other user profile cannot see any rows at all. - -Select the Enabled option. Click OK . - -Figure 4-29 New row permissions on the CUSTOMERS table - - -- 3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy: - -- -User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows. - -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. - -- -Any other user profile cannot see any rows at all. - -Select the Enabled option. Click OK . - -Figure 4-30 New row permissions on the ACCOUNTS table - - -- 4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy: - -- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows. - -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. - -Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored. - -- -Any other user profile cannot see any rows at all. - -Select the Enabled option. Click OK . - -Figure 4-31 New row permissions on the TRANSACTIONS table - - -- 5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled. - -Figure 4-32 List of row permissions on BANK_SCHEMA - - -## 4.3.6 Defining and creating column masks - -This section defines the masks on the columns. Complete the following steps: - -- 1. From the main navigation pane of System i Navigator, click Schemas  BANK_SCHEMA , right-click Column Masks , and select New  Column Mask , as shown in Figure 4-33. - -Figure 4-33 Creating a column mask - - -- 2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information: - -- -Select the CUSTOMERS table on which to create the column mask. - -- -Select the Column to mask; in this example, it is CUSTOMER_EMAIL. - -- -Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****. - -Select the Enabled option. Click OK . - -Figure 4-34 Defining a column mask on the CUSTOMERS table - - -- 3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns: - -- -MASK_DRIVERS_LICENSE_ON_CUSTOMERS - -- -MASK_LOGIN_ID_ON_CUSTOMERS - -- -MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS - -- -MASK_ACCOUNT_NUMBER_ON_ACCOUNTS - -- -MASK_SECURITY_QUESTION_ON_CUSTOMERS - -- -MASK_TAX_ID_ON_CUSTOMERS - -- 4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled. - -Figure 4-35 List of column masks on BANK_SCHEMA - - -## 4.3.7 Restricting the inserting and updating of masked data - -This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, "Avoiding propagation of masked data" on page 108. - -## Complete the following steps: - -- 1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36 - -Figure 4-36 Definition of the CUSTOMERS table - - -- 2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37. - -Figure 4-37 Adding a check constraint - - -- 3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps: - -- a. Select the CUSTOMER_EMAIL column. - -- b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value. - -- c. Select the On update violation, preserve column value option and click OK . - -Figure 4-38 Specifying a new check constraint on the CUSTOMERS table - - -- 4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column. - -Figure 4-39 Check constraint on the CUSTOMERS table - - -- 5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40. - -Figure 4-40 List of check constraints on the CUSTOMERS table - - -## 4.3.8 Activating row and column access control - -You are now ready to activate RCAC on all three tables in this example. Complete the following steps: - -- 1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK . - -Figure 4-41 Enabling RCAC on the CUSTOMERS table - - -- 2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK . - -Figure 4-42 Enabling RCAC on ACCOUNTS - - -- 3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK . - -Figure 4-43 Enabling RCAC on TRANSACTIONS - - -## 4.3.9 Reviewing row permissions - -This section displays all the row permissions after enabling RCAC. Complete the following steps: - -- 1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission. - -Figure 4-44 Row permissions after enabling RCAC - - -- 2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45. - -Figure 4-45 Selecting row permission definition - - -- 3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied. - -Figure 4-46 Search condition of the QIBM_DEFAULT row permission - - -## 4.3.10 Demonstrating data access with RCAC - -You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER): - -- GLYPH A SELECT statement that returns the SESSION_USER. - -- GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table. - -- GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name: - -- -c u s t o m e r _ i d - -- -customer_name - -- -customer_email - -- -c u s t o m e r _ t a x _ i d - -- -customer_drivers_license_number - -## Data access for a DBE user with RCAC - -To test a DBE (MCAIN) user, complete the following steps: - -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user. - -Figure 4-47 DBE session user - - -- 2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48. - -Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table - - -- 3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked. - -Figure 4-49 SQL statement that is run by the DBE user with masked columns - -## Data access for SECURITY user with RCAC - -To test a SECURITY user, complete the following steps: - -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer. - -Figure 4-50 SECURITY session user - - -- 2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all. - -Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table - - -- 3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer. - -Figure 4-52 SQL statement that is run by the SECURITY user - no results - - -## Data access for TELLER user with RCAC - -To test a Teller (TQSPENCER) user, complete the following steps: - -- 1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user. - -Figure 4-53 TELLER session user - - -- 2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows. - -Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table - - -- 3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked. - -Figure 4-55 SQL statement that is run by the TELLER user with masked columns - - -## Data access for ADMIN user with RCAC - -To test an ADMIN (VGLUCCHESS) user, complete the following steps: - -- 1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user. - -Figure 4-56 ADMIN session user - - -- 2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows. - -Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table - - -- 3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns. - -Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns - -## Data access for WEBUSER user with RCAC - -To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps: - -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user. - -Figure 4-59 WEBUSER session user - - -- 2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID. - -Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID - - -- 3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61. - -Figure 4-61 Viewing the global variable value - - -- 4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID. - -Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table - - -- 5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user's own row. - -Figure 4-63 SQL statement that is run by WEBUSER - no masked columns - - -## Other examples of data access with RCAC - -To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps: - -- 1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts. - -Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile - -- 2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions. - -Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile - -- 3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table. - -Figure 4-66 List of accounts and current balance by customer using a TELLER user profile - -## 4.3.11 Query implementation with RCAC activated - -This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer. - -## Complete the following steps: - -- 1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing. - -Figure 4-67 Visual Explain with no RCAC enabled - - -- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. - -Figure 4-68 Visual Explain with RCAC enabled - - -- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. - -Figure 4-69 Index advice with no RCAC - - -- 4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, "Index advisor" on page 99. - -Figure 4-70 Index advice with RCAC enabled - - - - - -Chapter 5. - -5 - -## RCAC and non-SQL interfaces - -A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF ). - -This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter. - -The following topics are covered in this chapter in this chapter: - -- GLYPH Unsupported interfaces - -- GLYPH Native query result differences - -- GLYPH Accidental updates with masked values - -- GLYPH System CL commands considerations - -## 5.1 Unsupported interfaces - -It is not possible to create a row permission or column mask on a distributed table or a program-described file. - -After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message: - -- GLYPH A logical file with multiple formats if the open attempt requests more than one format. - -- GLYPH A table or query that specifies an ICU 2.6.1 sort sequence. - -- GLYPH A table with read triggers. - -This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated. - -For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1. - -Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC. - -## 5.2 Native query result differences - -The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items: - -- GLYPH Query/400 - -- GLYPH QQQQRY API - -- GLYPH Open Query File ( OPNQRYF ) command - -- GLYPH Run Query ( RUNQRY ) command - -- GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view - -Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default. - -The following list documents some of the query output differences that can occur when native query requests are processed by CQE: - -- GLYPH Different ordering in the result set - -- GLYPH Different values for null columns or columns with errors - -- GLYPH Suppression of some mapping error messages - -- GLYPH Loss of RRN positioning capabilities - -- GLYPH Duplicate key processing behavior differences - -- GLYPH Missing key feedback - -For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at: - -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm - -In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance. - -Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces. - -## 5.3 Accidental updates with masked values - -The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access. - -For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program's record buffer, as shown Figure 5-1. - -In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value. - -Figure 5-1 Accidental update with masked values scenario - - -Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values. - -DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, "Check constraint solution" on page 108. - -## 5.4 System CL commands considerations - -As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC. - -## 5.4.1 Create Duplicate Object (CRTDUPOBJ) command - -The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL . - -If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error. - -When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object. - -## 5.4.2 Copy File (CPYF) command - -The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table. - -When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command. - -If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received. - -## 5.4.3 Copy Library (CPYLIB) command - -The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, "Create Duplicate Object (CRTDUPOBJ) command" on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL . - - - - -Chapter 6. - -## Additional considerations - -This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions: - -- GLYPH Timing of column masking - -- GLYPH Data movement - -- GLYPH Joins - -- GLYPH Views - -- GLYPH Materialized query tables - -- GLYPH Index advisor - -- GLYPH Monitoring, analysis, and debugging - -- GLYPH Performance and scalability - -The following topics are covered in this chapter: - -- GLYPH Timing of column masking - -- GLYPH RCAC effects on data movement - -- GLYPH RCAC effects on joins - -- GLYPH Monitoring, analyzing, and debugging with RCAC - -- GLYPH Views, materialized query tables, and query rewrite with RCAC - -- GLYPH RCAC effects on performance and scalability - -- GLYPH Exclusive lock to implement RCAC (availability issues) - -- GLYPH Avoiding propagation of masked data - -- GLYPH Triggers and functions (SECURED) - -- GLYPH RCAC is only one part of the solution - -6 - -## 6.1 Timing of column masking - -An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking. - -An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values. - -SELECT - -CREDIT_CARD_NUMBER, - -FROM - -GROUP BY - -CREDIT_CARD_NUMBER - -ORDER BY - -CREDIT_CARD_NUMBER; - -## Without RCAC Masking - -## With RCAC Masking - - - -| CREDIT CARD NUMBER _ _ | TOTAL | -|--------------------------|---------------| -| 3785 0000 0000 1234 | 233.50 | -| 3785 1111 1111 1234 | 105.10 | -| 3785 2222 2222 1234 | 300 00 300.00 | -| 3785 3333 3333 1234 | 1,775.00 | -| 5466 4444 4444 1234 | 601.70 | -| 5466 5555 5555 1234 | 37.80 | -| 5466 6666 6666 1234 | 490.45 | -| 6011 7777 7777 1234 | 1005.00 | -| 6011 8888 8888 1234 | 750.33 | -| 6011 9999 9999 0001 | 10.00 | - -Figure 6-1 Timing of column masking - -| CREDIT CARD NUMBER _ _ | TOTAL | -|---------------------------|---------------| -| **** **** **** 1234 | 233.50 | -| **** **** **** 1234 | 105.10 | -| **** **** **** 1234 | 300 00 300.00 | -| **** **** **** 1234 | 1,775.00 | -| **** **** **** 1234 | 601.70 | -| **** **** **** 1234 | 37.80 | -| **** **** **** 1234 | 490.45 | -| **** **** **** 1234 1234 | 1005.00 | -| **** **** **** 1234 | 750.33 | -| **** **** **** 0001 | 10.00 | - -SUM(AMOUNT) AS TOTAL TRANSACTIONS - -Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query's final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2. - -Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask. - -Figure 6-2 Masking differences between Fieldproc and RCAC - - -## 6.2 RCAC effects on data movement - -As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss. - -Figure 6-3 RCAC and data movement - - -The "user" that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization's object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC. - -Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data. - -This section covers in detail the following three examples: - -- GLYPH Effects when RCAC is defined on the source table - -- GLYPH Effects when RCAC is defined on the target table - -- GLYPH Effects when RCAC is defined on both source and target tables - -## 6.2.1 Effects when RCAC is defined on the source table - -Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table. - -Example 6-1 INSERT INTO TARGET statement - -INSERT INTO TARGET (SELECT * FROM SOURCE); - -For example, given a "source" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4. - -Figure 6-4 RCAC effects on data movement from SOURCE - - -## 6.2.2 Effects when RCAC is defined on the target table - -Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table. - -Example 6-2 INSERT INTO TARGET statement - -INSERT INTO TARGET (SELECT * FROM SOURCE); - -Given a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the "target", and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table's permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read. - -Figure 6-5 RCAC effects on data movement on TARGET - - -## 6.2.3 Effects when RCAC is defined on both source and target tables - -Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables. - -Example 6-3 INSERT INTO TARGET statement - -INSERT INTO TARGET (SELECT * FROM SOURCE); - -Given a "source" table and a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned. - -Although the source rows where NAME <> 'CAIN' do satisfy the target table's permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data. - -Figure 6-6 RCAC effects on data movement on SOURCE and TARGET - - -## 6.3 RCAC effects on joins - -As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled. - -Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation. - -As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see. - -Figure 6-7 Set A and set B with row permissions - - -## 6.3.1 Inner joins - -Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8. - -Figure 6-8 Inner join without RCAC permission - - -Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9. - -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. - -Figure 6-9 Inner join with RCAC permission - - -## 6.3.2 Outer joins - -Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default. - -Figure 6-10 Outer join without RCAC permission - - -Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11. - -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. - -Figure 6-11 Outer join with RCAC permission - - -## 6.3.3 Exception joins - -Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default. - -Figure 6-12 Exception join without RCAC permission - - -Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. - -Figure 6-13 Exception join with RCAC permission - - -## 6.4 Monitoring, analyzing, and debugging with RCAC - -It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques. - -The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences: - -- GLYPH The underlying data access plan can be different and more complex based on the rule text. - -- GLYPH The database results can be reduced or modified based on the rule text and user profile. - -- GLYPH The run time of the request can be affected either positively or negatively based on the rule text. - -- GLYPH For high-level language record level access, query plans must be considered, and not just program code. - -During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different. - -RCAC is designed and implemented to be transparent to the user. It is possible for user "Mike" and user "Hernando" to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user "Mike" and user "Hernando" have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query. - -When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the "variables" the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different. - -To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of "database engineer" becomes even more important. - -## 6.4.1 Query monitoring and analysis tools - -When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor. - -Figure 6-14 shows how Visual Explain externalizes RCAC. - -Figure 6-14 Visual Explain indicating that RCAC is applied - - -Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary . - -Figure 6-15 SQL Performance Monitor - - -Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied. - -Figure 6-16 SQL Performance Monitor indicating that RCAC is applied - - -Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized. - -Figure 6-17 SQL Performance Monitor showing statements and RCAC - - -When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer's policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows: - -WHERE CUSTOMER_TAX_ID = '123-45-7890' - -The literal value of '123-45-7890' is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure. - -The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain. - -## 6.4.2 Index advisor - -Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point. - -The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised. - -For example, the query that is shown in Figure 6-18 produces index advice for the user's predicate and the RCAC predicate. - -Figure 6-18 Index advice and RCAC - - -In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text. - -Figure 6-19 Index advisor based on the RCAC rule - - -For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at: - -http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies - -## 6.4.3 Metadata using catalogs - -To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively. - -## Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view. - -Figure 6-20 RCAC and catalogs - -The SYSCONTROLS catalog view contains the following columns: - -- GLYPH COLUMN_NAME - -- GLYPH CONTROL_TYPE - -- GLYPH CREATE_TIME - -- GLYPH ENABLE - -- GLYPH ENFORCED - -- GLYPH ASP_NUMBER - -- GLYPH IMPLICIT - -- GLYPH LABEL - -- GLYPH LAST_ALTERED - -- GLYPH LONG_COMMENT - -- GLYPH RCAC_NAME - -- GLYPH RCAC_OWNER - -- GLYPH RCAC_SCHEMA - -- GLYPH RULETEXT - -- GLYPH SYSTEM_COLUMN_NAME - -- GLYPH SYSTEM_TABLE_NAME - -- GLYPH SYSTEM_TABLE_SCHEMA - -- GLYPH TABLE_NAME - -- GLYPH TABLE_SCHEMA - -- GLYPH TBCORRELATION - -The SYSCONTROLSDEP catalog view contains the following columns: - -- GLYPH COLUMN_NAME - -- GLYPH CONTROL_TYPE - -- GLYPH IASP_NUMBER - -- GLYPH OBJECT_NAME - -- GLYPH OBJECT_SCHEMA - -- GLYPH OBJECT_TYPE - -- GLYPH PARM_SIGNATURE - -- GLYPH RCAC_NAME - -- GLYPH RCAC_SCHEMA - -- GLYPH SYSTEM_TABLE_NAME - -- GLYPH SYSTEM_TABLE_SCHEMA - -For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at: - -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en - -## 6.5 Views, materialized query tables, and query rewrite with RCAC - -This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table. - -## 6.5.1 Views - -Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query. - -Figure 6-21 View definition and user query - - -What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22. - -Figure 6-22 Query rewrite with RCAC - - -## 6.5.2 Materialized query tables - -When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data. - -Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried. - -When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks. - -The following example illustrates this scenario: - -- 1. Create schema and tables: - -CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER); - -- 2. Create a row permission that allows the employees to see only rows from the region they work in: - -/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE; - -- 3. Create an MQT to summarize sales by location: - --- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; - -- 4. Populate the MQT (permission is not applied): - -/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT - -The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission: - -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; - -- 5. Create an MQT to summarize by region and location: - --- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; - -- 6. Populate the Region_location_Sales_MQT (permission not applied): - -/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT - -The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission: - -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; - -This example has the following additional implications: - -- GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables. - -- GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results. - -- GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT. - -## 6.5.3 Query rewrite - -Query rewrite is a technique that the optimizer can use to change the original request to improve performance. - -For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1. - -As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC. - -## 6.6 RCAC effects on performance and scalability - -As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a "query", and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user's query, much like a query referencing a view. - -For native record level access, this RCAC "query" is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user's permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned. - -A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original "random read" request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of "not found" if the user is not entitled to any of the records. - -For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the "next record" in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23. - -Figure 6-23 Native record access with no RCAC - - -Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24. - -Figure 6-24 Native record level access with RCAC - - -After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended. - -## 6.7 Exclusive lock to implement RCAC (availability issues) - -When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC. - -Consider the following scenarios: - -- GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table: - -- -Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data. - -- -Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data. - -- -Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data. - -- -Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data. - -The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table. - -- GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table. - -- GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message: - -SQ20471] INSERT or UPDATE does not satisfy row permissions. - -To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission. - -## 6.8 Avoiding propagation of masked data - -Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control. - -For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error: - -INSERT INTO TABLE1 SELECT * FROM TABLE2 - -The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint. - -There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger. - -## 6.8.1 Check constraint solution - -One way to prevent this problem is to define a check constraint. - -As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements. - -In the Example 6-4, the mask is defined to return a value of 'XXX-XX-nnnn' for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value. - -Example 6-4 Check constraint to avoid masked data - -CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn - -ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value. - -## 6.8.2 Before trigger solution - -The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5. - -Example 6-5 Before trigger to avoid masked data - -CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END - -## 6.9 Triggers and functions (SECURED) - -There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see. - -## 6.9.1 Triggers - -Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission. - -Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over. - -Example 6-6 Trigger SECURED - -/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END - -## 6.9.2 Functions - -Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7. - -Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED - -The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure. - -Consider the following examples: - -- GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1. - -- MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED. - -- NOT SECURED is the default on the create function unless SECURED is explicitly selected. - -This same rule applies for any function that might be invoked with a masked column specified as an argument. - -- GLYPH Table2 column SSN has a column mask that is defined on it. - -- SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute. - -## 6.10 RCAC is only one part of the solution - -When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges. - -Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files. - -Figure 6-25 Object-level security and RCAC permissions - - -To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test. - -The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver. - -Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements. - -The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of "restricting access to data", and "needing access to data". - - - - -Chapter 7. - -7 - -## Row and Column Access Control management - -After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered. - -The following topics are covered in this chapter: - -- GLYPH Managing row permissions and column masks - -- GLYPH Managing tables with row permissions and column masks - -- GLYPH Monitoring and auditing function usage - -## 7.1 Managing row permissions and column masks - -This section focuses on the management of the RCAC row permissions and column masks. - -## 7.1.1 Source management - -The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions. - -If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table. - -## 7.1.2 Modifying definitions - -After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition. - -This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process. - -## 7.1.3 Turning on and off - -As described in 3.1.2, "Enabling and activating RCAC" on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table. - -Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages. - -## 7.1.4 Regenerating - -DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects. - -For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table. - -Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error. - -## 7.2 Managing tables with row permissions and column masks - -This section examines the object management considerations after RCAC is added to a DB2 table. - -## 7.2.1 Save and restore - -Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC. - -Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging. - -For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, "Regenerating" on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (… SELECT C.CUSTOMER_ID FROM CUSTOMERS C …). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1. - -Figure 7-1 Restoring tables to different schemas - - -The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the "Schema qualify names for objects" and select the "OR REPLACE clause", and then run the generated script. - -## 7.2.2 Table migration - -There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes. - -The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing. - -Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas. - -## 7.3 Monitoring and auditing function usage - -While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events. - -The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization's data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed. - -A new journal entry type of "AX" for journal entry code "T" (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents: - -- GLYPH IBM i Version 7.2 Journal Management Guide , found at: - -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en - -- GLYPH IBM i Version 7.2 Security Reference Guide , found at: - -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en - - - - -Chapter 8. - -## Designing and planning for success - -Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing. - -The following topics are covered in this chapter: - -- GLYPH Implementing RCAC with good design and proper planning - -- GLYPH DB2 for i Center of Excellence - -8 - -## 8.1 Implementing RCAC with good design and proper planning - -By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i. - -RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility. - -This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read. - -This paper has described the following pervasive power and advantages of RCAC: - -- GLYPH Access can be controlled through simple or sophisticated logic. - -- GLYPH Virtually no application changes are required. - -- GLYPH The implementation of the access policy is part of the DB2 data access layer. - -- GLYPH Table data is protected regardless of the interface that is used. - -- GLYPH No user is inherently exempted from the access control policies. - -- GLYPH Groups of users can share policies and permissions. - -A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance. - -With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown. - -## 8.2 DB2 for i Center of Excellence - -To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design. - -If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com . - - - - -Appendix A. - -## Database definitions for the RCAC banking example - -This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, "Implementing Row and Column Access Control: Banking example" on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example. - -Example A-1 DDL script to implement the RCAC banking example - -/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , - -A - -CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); - -ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 - -THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; - -CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */ - -## Related publications - -The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper. - -## Other publications - -These publications are relevant as further information sources: - -- GLYPH IBM DB2 for i indexing methods and strategies white paper: - -- http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies - -- GLYPH IBM i Memo to Users Version 7.2 : - -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm - -- GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide : - -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en - -- GLYPH IBM i Version 7.2 Journal Management Guide : - -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en - -- GLYPH IBM i Version 7.2 Security Reference Guide : - -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en - -## Online resources - -These websites are relevant as further information sources: - -- GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center: - -- http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en - -- GLYPH Identity Theft Resource Center - -- http://www.idtheftcenter.org - -- GLYPH Ponemon Institute - -- http://www.ponemon.org/ - -## Help from IBM - -IBM Support and downloads - -ibm.com /support - -IBM Global Services - -ibm.com /services - -Back cover - -## Row and Column Access Control Support in IBM DB2 for i - -Implement roles and separation of duties - -Leverage row permissions on the database - -Protect columns by defining column masks - -This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. - -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. - - - - - - - -INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION - -BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE - -IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. - -For more information: ibm.com /redbooks \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5110.pages.json b/tests/data/groundtruth/docling_v1/redp5110.pages.json deleted file mode 100644 index ddd38715..00000000 --- a/tests/data/groundtruth/docling_v1/redp5110.pages.json +++ /dev/null @@ -1 +0,0 @@ -[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "section_header", "bbox": {"l": 192.0, "t": 70.99520874023438, "r": 468.15952000000004, "b": 85.18834686279297, "coord_origin": "TOPLEFT"}, "confidence": 0.723362147808075, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 191.42994689941406, "t": 103.42080688476562, "r": 551.77112, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6808906197547913, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 191.8452911376953, "t": 149.2097625732422, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7205957770347595, "cells": [{"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "page_footer", "bbox": {"l": 479.1854553222656, "t": 753.9530639648438, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155997037887573, "cells": [{"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 80.21302032470703, "t": 71.03994750976562, "r": 142.7141876220703, "b": 95.86432647705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9511593580245972, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "section_header", "bbox": {"l": 192.0, "t": 70.99520874023438, "r": 468.15952000000004, "b": 85.18834686279297, "coord_origin": "TOPLEFT"}, "confidence": 0.723362147808075, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization"}, {"label": "section_header", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 191.42994689941406, "t": 103.42080688476562, "r": 551.77112, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6808906197547913, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 191.8452911376953, "t": 149.2097625732422, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7205957770347595, "cells": [{"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}]}, "text": "November 2014"}, {"label": "page_footer", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 479.1854553222656, "t": 753.9530639648438, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155997037887573, "cells": [{"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "picture", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 80.21302032470703, "t": 71.03994750976562, "r": 142.7141876220703, "b": 95.86432647705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9511593580245972, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "section_header", "bbox": {"l": 192.0, "t": 70.99520874023438, "r": 468.15952000000004, "b": 85.18834686279297, "coord_origin": "TOPLEFT"}, "confidence": 0.723362147808075, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization"}, {"label": "section_header", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 191.42994689941406, "t": 103.42080688476562, "r": 551.77112, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6808906197547913, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 191.8452911376953, "t": 149.2097625732422, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7205957770347595, "cells": [{"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}]}, "text": "November 2014"}, {"label": "picture", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 80.21302032470703, "t": 71.03994750976562, "r": 142.7141876220703, "b": 95.86432647705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9511593580245972, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 479.1854553222656, "t": 753.9530639648438, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155997037887573, "cells": [{"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.55229949951172, "t": 737.2064208984375, "r": 426.39117, "b": 746.8391723632812, "coord_origin": "TOPLEFT"}, "confidence": 0.6578707098960876, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 64.10758972167969, "t": 747.6624755859375, "r": 547.20087, "b": 768.422899, "coord_origin": "TOPLEFT"}, "confidence": 0.739277184009552, "cells": [{"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.49017333984375, "t": 685.248046875, "r": 206.09755, "b": 695.7449340820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7352388501167297, "cells": [{"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 63.900901794433594, "t": 707.9268798828125, "r": 422.24246, "b": 718.252685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.8905011415481567, "cells": [{"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 70.31981658935547, "t": 88.49734497070312, "r": 511.22507, "b": 111.23179626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9383615851402283, "cells": [{"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.55229949951172, "t": 737.2064208984375, "r": 426.39117, "b": 746.8391723632812, "coord_origin": "TOPLEFT"}, "confidence": 0.6578707098960876, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved."}, {"label": "text", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "text", "bbox": {"l": 64.10758972167969, "t": 747.6624755859375, "r": 547.20087, "b": 768.422899, "coord_origin": "TOPLEFT"}, "confidence": 0.739277184009552, "cells": [{"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}]}, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp."}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.49017333984375, "t": 685.248046875, "r": 206.09755, "b": 695.7449340820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7352388501167297, "cells": [{"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}]}, "text": "First Edition (November 2014)"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.900901794433594, "t": 707.9268798828125, "r": 422.24246, "b": 718.252685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.8905011415481567, "cells": [{"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}]}, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1)."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 70.31981658935547, "t": 88.49734497070312, "r": 511.22507, "b": 111.23179626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9383615851402283, "cells": [{"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Before using this information and the product it supports, read the information in \u201cNotices\u201d on page vii."}], "body": [{"label": "text", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "text", "bbox": {"l": 64.10758972167969, "t": 747.6624755859375, "r": 547.20087, "b": 768.422899, "coord_origin": "TOPLEFT"}, "confidence": 0.739277184009552, "cells": [{"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}]}, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp."}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.49017333984375, "t": 685.248046875, "r": 206.09755, "b": 695.7449340820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7352388501167297, "cells": [{"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}]}, "text": "First Edition (November 2014)"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.900901794433594, "t": 707.9268798828125, "r": 422.24246, "b": 718.252685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.8905011415481567, "cells": [{"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}]}, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1)."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 70.31981658935547, "t": 88.49734497070312, "r": 511.22507, "b": 111.23179626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9383615851402283, "cells": [{"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Before using this information and the product it supports, read the information in \u201cNotices\u201d on page vii."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.55229949951172, "t": 737.2064208984375, "r": 426.39117, "b": 746.8391723632812, "coord_origin": "TOPLEFT"}, "confidence": 0.6578707098960876, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved."}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4805679321289, "t": 754.1161499023438, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8876830339431763, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 90.44805145263672, "t": 754.6052856445312, "r": 331.7034606933594, "b": 763.9476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.936427891254425, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"2": {"label": "table", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl"], "num_rows": 47, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.99295, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 530.53815, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 277.79886, "t": 377.98361, "r": 547.19684, "b": 399.19641, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2002, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.59186, "t": 427.48285, "r": 547.16876, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 440.02249, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.2002, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.8, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 178.85632, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20016, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 590.02013, "r": 524.9704, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 615.03964, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79996, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4805679321289, "t": 754.1161499023438, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8876830339431763, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iv"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.44805145263672, "t": 754.6052856445312, "r": 331.7034606933594, "b": 763.9476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.936427891254425, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "table", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl"], "num_rows": 47, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.99295, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 530.53815, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 277.79886, "t": 377.98361, "r": 547.19684, "b": 399.19641, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2002, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.59186, "t": 427.48285, "r": 547.16876, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 440.02249, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.2002, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.8, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 178.85632, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20016, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 590.02013, "r": 524.9704, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 615.03964, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79996, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "table", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl"], "num_rows": 47, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.99295, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 530.53815, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 277.79886, "t": 377.98361, "r": 547.19684, "b": 399.19641, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2002, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.59186, "t": 427.48285, "r": 547.16876, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 440.02249, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.2002, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.8, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 178.85632, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20016, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 590.02013, "r": 524.9704, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 615.03964, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79996, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4805679321289, "t": 754.1161499023438, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8876830339431763, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iv"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.44805145263672, "t": 754.6052856445312, "r": 331.7034606933594, "b": 763.9476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.936427891254425, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 488.22, "t": 754.8673095703125, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.9201837182044983, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.8323974609375, "t": 754.848721, "r": 547.3976440429688, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8568527102470398, "cells": [{"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"2": {"label": "table", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 17, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.95959, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.18716, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.09241, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 488.22, "t": 754.8673095703125, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.9201837182044983, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8323974609375, "t": 754.848721, "r": 547.3976440429688, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8568527102470398, "cells": [{"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "v"}, {"label": "table", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 17, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.95959, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.18716, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.09241, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "table", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 17, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.95959, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.18716, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.09241, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 488.22, "t": 754.8673095703125, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.9201837182044983, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8323974609375, "t": 754.848721, "r": 547.3976440429688, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8568527102470398, "cells": [{"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "v"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.35196685791016, "t": 754.20947265625, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8942763209342957, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 90.52510833740234, "t": 754.4613647460938, "r": 331.7355651855469, "b": 764.1465454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9421936273574829, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35196685791016, "t": 754.20947265625, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8942763209342957, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vi"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.52510833740234, "t": 754.4613647460938, "r": 331.7355651855469, "b": 764.1465454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9421936273574829, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35196685791016, "t": 754.20947265625, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8942763209342957, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vi"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.52510833740234, "t": 754.4613647460938, "r": 331.7355651855469, "b": 764.1465454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9421936273574829, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.6475715637207, "t": 754.7320556640625, "r": 257.24335, "b": 764.1610717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9500033855438232, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3445434570312, "t": 754.3482666015625, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9123973846435547, "cells": [{"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.94640350341797, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9534567594528198, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 63.85922622680664, "t": 131.95469665527344, "r": 413.70071, "b": 141.96286010742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9347162246704102, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 64.08584594726562, "t": 151.7967071533203, "r": 547.2356, "b": 212.513427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879042506217957, "cells": [{"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 64.23300170898438, "t": 221.91311645507812, "r": 547.29926, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9709556102752686, "cells": [{"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 64.32848358154297, "t": 251.89076232910156, "r": 489.19962, "b": 262.3831481933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9133641123771667, "cells": [{"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 63.91102600097656, "t": 271.83697509765625, "r": 547.19171, "b": 332.256591796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9860420823097229, "cells": [{"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 63.85258865356445, "t": 342.0672912597656, "r": 547.27838, "b": 381.85791, "coord_origin": "TOPLEFT"}, "confidence": 0.9850608706474304, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 64.01903533935547, "t": 391.9712219238281, "r": 539.79742, "b": 422.1513366699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852286577224731, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 64.25189208984375, "t": 432.0647888183594, "r": 547.19867, "b": 452.3858337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9783881306648254, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 64.00050354003906, "t": 462.2513732910156, "r": 544.15875, "b": 521.8851928710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882644414901733, "cells": [{"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 64.13472747802734, "t": 532.0626831054688, "r": 547.23169, "b": 572.26904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.986961841583252, "cells": [{"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 63.89973449707031, "t": 582.2474365234375, "r": 545.78656, "b": 622.1400756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.985973596572876, "cells": [{"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "section_header", "bbox": {"l": 64.30471801757812, "t": 631.6611938476562, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.879513144493103, "cells": [{"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 63.98580551147461, "t": 651.967041015625, "r": 547.24377, "b": 712.5435791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9882200956344604, "cells": [{"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.6475715637207, "t": 754.7320556640625, "r": 257.24335, "b": 764.1610717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9500033855438232, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3445434570312, "t": 754.3482666015625, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9123973846435547, "cells": [{"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vii"}, {"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.94640350341797, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9534567594528198, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.85922622680664, "t": 131.95469665527344, "r": 413.70071, "b": 141.96286010742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9347162246704102, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the U.S.A."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.08584594726562, "t": 151.7967071533203, "r": 547.2356, "b": 212.513427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879042506217957, "cells": [{"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.23300170898438, "t": 221.91311645507812, "r": 547.29926, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9709556102752686, "cells": [{"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.32848358154297, "t": 251.89076232910156, "r": 489.19962, "b": 262.3831481933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9133641123771667, "cells": [{"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.91102600097656, "t": 271.83697509765625, "r": 547.19171, "b": 332.256591796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9860420823097229, "cells": [{"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}]}, "text": "The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.85258865356445, "t": 342.0672912597656, "r": 547.27838, "b": 381.85791, "coord_origin": "TOPLEFT"}, "confidence": 0.9850608706474304, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "text", "bbox": {"l": 64.01903533935547, "t": 391.9712219238281, "r": 539.79742, "b": 422.1513366699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852286577224731, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 8, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.25189208984375, "t": 432.0647888183594, "r": 547.19867, "b": 452.3858337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9783881306648254, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 8, "cluster": {"id": 11, "label": "text", "bbox": {"l": 64.00050354003906, "t": 462.2513732910156, "r": 544.15875, "b": 521.8851928710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882644414901733, "cells": [{"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}]}, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment."}, {"label": "text", "id": 12, "page_no": 8, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.13472747802734, "t": 532.0626831054688, "r": 547.23169, "b": 572.26904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.986961841583252, "cells": [{"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 8, "cluster": {"id": 13, "label": "text", "bbox": {"l": 63.89973449707031, "t": 582.2474365234375, "r": 545.78656, "b": 622.1400756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.985973596572876, "cells": [{"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental."}, {"label": "section_header", "id": 14, "page_no": 8, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.30471801757812, "t": 631.6611938476562, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.879513144493103, "cells": [{"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 15, "page_no": 8, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.98580551147461, "t": 651.967041015625, "r": 547.24377, "b": 712.5435791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9882200956344604, "cells": [{"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs."}], "body": [{"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.94640350341797, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9534567594528198, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.85922622680664, "t": 131.95469665527344, "r": 413.70071, "b": 141.96286010742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9347162246704102, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the U.S.A."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.08584594726562, "t": 151.7967071533203, "r": 547.2356, "b": 212.513427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879042506217957, "cells": [{"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.23300170898438, "t": 221.91311645507812, "r": 547.29926, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9709556102752686, "cells": [{"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.32848358154297, "t": 251.89076232910156, "r": 489.19962, "b": 262.3831481933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9133641123771667, "cells": [{"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.91102600097656, "t": 271.83697509765625, "r": 547.19171, "b": 332.256591796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9860420823097229, "cells": [{"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}]}, "text": "The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.85258865356445, "t": 342.0672912597656, "r": 547.27838, "b": 381.85791, "coord_origin": "TOPLEFT"}, "confidence": 0.9850608706474304, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "text", "bbox": {"l": 64.01903533935547, "t": 391.9712219238281, "r": 539.79742, "b": 422.1513366699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852286577224731, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 8, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.25189208984375, "t": 432.0647888183594, "r": 547.19867, "b": 452.3858337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9783881306648254, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 8, "cluster": {"id": 11, "label": "text", "bbox": {"l": 64.00050354003906, "t": 462.2513732910156, "r": 544.15875, "b": 521.8851928710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882644414901733, "cells": [{"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}]}, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment."}, {"label": "text", "id": 12, "page_no": 8, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.13472747802734, "t": 532.0626831054688, "r": 547.23169, "b": 572.26904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.986961841583252, "cells": [{"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 8, "cluster": {"id": 13, "label": "text", "bbox": {"l": 63.89973449707031, "t": 582.2474365234375, "r": 545.78656, "b": 622.1400756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.985973596572876, "cells": [{"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental."}, {"label": "section_header", "id": 14, "page_no": 8, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.30471801757812, "t": 631.6611938476562, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.879513144493103, "cells": [{"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 15, "page_no": 8, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.98580551147461, "t": 651.967041015625, "r": 547.24377, "b": 712.5435791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9882200956344604, "cells": [{"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.6475715637207, "t": 754.7320556640625, "r": 257.24335, "b": 764.1610717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9500033855438232, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3445434570312, "t": 754.3482666015625, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9123973846435547, "cells": [{"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vii"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85106658935547, "t": 755.861328125, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9069269299507141, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 95.8013916015625, "t": 755.7946166992188, "r": 337.03378, "b": 765.3360595703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9419320821762085, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09756469726562, "t": 70.1291275024414, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9517050385475159, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.14087677001953, "t": 102.73088073730469, "r": 547.26044, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9863917827606201, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 63.81353759765625, "t": 172.72238159179688, "r": 546.61505, "b": 192.74036, "coord_origin": "TOPLEFT"}, "confidence": 0.9608373641967773, "cells": [{"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 75.01971435546875, "t": 200.92349243164062, "r": 112.14369201660156, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8121887445449829, "cells": [{"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 75.20001220703125, "t": 211.9452667236328, "r": 100.03594970703125, "b": 221.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.7914246916770935, "cells": [{"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 75.27558898925781, "t": 223.59620666503906, "r": 107.95845794677734, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.822727382183075, "cells": [{"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 235.85794067382812, "t": 201.27745056152344, "r": 259.61248779296875, "b": 210.8429, "coord_origin": "TOPLEFT"}, "confidence": 0.837928831577301, "cells": [{"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 235.99562072753906, "t": 212.1666717529297, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8122887015342712, "cells": [{"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 236.1086883544922, "t": 223.76063537597656, "r": 283.57794189453125, "b": 232.86316, "coord_origin": "TOPLEFT"}, "confidence": 0.8228758573532104, "cells": [{"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 396.9049377441406, "t": 201.1180419921875, "r": 445.7533874511719, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7675914764404297, "cells": [{"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 397.0493469238281, "t": 212.6171417236328, "r": 464.00567626953125, "b": 222.2538604736328, "coord_origin": "TOPLEFT"}, "confidence": 0.7420825958251953, "cells": [{"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 396.6751708984375, "t": 223.71835327148438, "r": 438.42291259765625, "b": 233.55853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8272937536239624, "cells": [{"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 63.997196197509766, "t": 244.85638427734375, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}, "confidence": 0.9434750080108643, "cells": [{"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 63.95560073852539, "t": 264.8189392089844, "r": 509.53705, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9707977771759033, "cells": [{"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 64.17562103271484, "t": 294.56353759765625, "r": 464.51569, "b": 305.0062561035156, "coord_origin": "TOPLEFT"}, "confidence": 0.959129810333252, "cells": [{"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "picture", "bbox": {"l": 465.2912902832031, "t": 210.87185668945312, "r": 487.54522705078125, "b": 223.7872772216797, "coord_origin": "TOPLEFT"}, "confidence": 0.6540718078613281, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85106658935547, "t": 755.861328125, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9069269299507141, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "viii"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.8013916015625, "t": 755.7946166992188, "r": 337.03378, "b": 765.3360595703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9419320821762085, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09756469726562, "t": 70.1291275024414, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9517050385475159, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.14087677001953, "t": 102.73088073730469, "r": 547.26044, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9863917827606201, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.81353759765625, "t": 172.72238159179688, "r": 546.61505, "b": 192.74036, "coord_origin": "TOPLEFT"}, "confidence": 0.9608373641967773, "cells": [{"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both:"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.01971435546875, "t": 200.92349243164062, "r": 112.14369201660156, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8121887445449829, "cells": [{"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "AS/400fi"}, {"label": "text", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.20001220703125, "t": 211.9452667236328, "r": 100.03594970703125, "b": 221.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.7914246916770935, "cells": [{"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}]}, "text": "DB2fi"}, {"label": "text", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.27558898925781, "t": 223.59620666503906, "r": 107.95845794677734, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.822727382183075, "cells": [{"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "DRDAfi"}, {"label": "text", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "text", "bbox": {"l": 235.85794067382812, "t": 201.27745056152344, "r": 259.61248779296875, "b": 210.8429, "coord_origin": "TOPLEFT"}, "confidence": 0.837928831577301, "cells": [{"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}]}, "text": "IBMfi"}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 235.99562072753906, "t": 212.1666717529297, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8122887015342712, "cells": [{"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Power Systems\u2122"}, {"label": "text", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "text", "bbox": {"l": 236.1086883544922, "t": 223.76063537597656, "r": 283.57794189453125, "b": 232.86316, "coord_origin": "TOPLEFT"}, "confidence": 0.8228758573532104, "cells": [{"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 11, "page_no": 9, "cluster": {"id": 11, "label": "text", "bbox": {"l": 396.9049377441406, "t": 201.1180419921875, "r": 445.7533874511719, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7675914764404297, "cells": [{"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper\u2122"}, {"label": "text", "id": 12, "page_no": 9, "cluster": {"id": 12, "label": "text", "bbox": {"l": 397.0493469238281, "t": 212.6171417236328, "r": 464.00567626953125, "b": 222.2538604736328, "coord_origin": "TOPLEFT"}, "confidence": 0.7420825958251953, "cells": [{"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi System"}, {"label": "text", "id": 13, "page_no": 9, "cluster": {"id": 13, "label": "text", "bbox": {"l": 396.6751708984375, "t": 223.71835327148438, "r": 438.42291259765625, "b": 233.55853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8272937536239624, "cells": [{"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}]}, "text": "ifi"}, {"label": "text", "id": 14, "page_no": 9, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.997196197509766, "t": 244.85638427734375, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}, "confidence": 0.9434750080108643, "cells": [{"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 15, "page_no": 9, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.95560073852539, "t": 264.8189392089844, "r": 509.53705, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9707977771759033, "cells": [{"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both."}, {"label": "text", "id": 16, "page_no": 9, "cluster": {"id": 16, "label": "text", "bbox": {"l": 64.17562103271484, "t": 294.56353759765625, "r": 464.51569, "b": 305.0062561035156, "coord_origin": "TOPLEFT"}, "confidence": 0.959129810333252, "cells": [{"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}, {"label": "picture", "id": 17, "page_no": 9, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 465.2912902832031, "t": 210.87185668945312, "r": 487.54522705078125, "b": 223.7872772216797, "coord_origin": "TOPLEFT"}, "confidence": 0.6540718078613281, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09756469726562, "t": 70.1291275024414, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9517050385475159, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.14087677001953, "t": 102.73088073730469, "r": 547.26044, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9863917827606201, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.81353759765625, "t": 172.72238159179688, "r": 546.61505, "b": 192.74036, "coord_origin": "TOPLEFT"}, "confidence": 0.9608373641967773, "cells": [{"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both:"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.01971435546875, "t": 200.92349243164062, "r": 112.14369201660156, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8121887445449829, "cells": [{"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "AS/400fi"}, {"label": "text", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.20001220703125, "t": 211.9452667236328, "r": 100.03594970703125, "b": 221.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.7914246916770935, "cells": [{"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}]}, "text": "DB2fi"}, {"label": "text", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.27558898925781, "t": 223.59620666503906, "r": 107.95845794677734, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.822727382183075, "cells": [{"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "DRDAfi"}, {"label": "text", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "text", "bbox": {"l": 235.85794067382812, "t": 201.27745056152344, "r": 259.61248779296875, "b": 210.8429, "coord_origin": "TOPLEFT"}, "confidence": 0.837928831577301, "cells": [{"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}]}, "text": "IBMfi"}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 235.99562072753906, "t": 212.1666717529297, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8122887015342712, "cells": [{"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Power Systems\u2122"}, {"label": "text", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "text", "bbox": {"l": 236.1086883544922, "t": 223.76063537597656, "r": 283.57794189453125, "b": 232.86316, "coord_origin": "TOPLEFT"}, "confidence": 0.8228758573532104, "cells": [{"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 11, "page_no": 9, "cluster": {"id": 11, "label": "text", "bbox": {"l": 396.9049377441406, "t": 201.1180419921875, "r": 445.7533874511719, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7675914764404297, "cells": [{"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper\u2122"}, {"label": "text", "id": 12, "page_no": 9, "cluster": {"id": 12, "label": "text", "bbox": {"l": 397.0493469238281, "t": 212.6171417236328, "r": 464.00567626953125, "b": 222.2538604736328, "coord_origin": "TOPLEFT"}, "confidence": 0.7420825958251953, "cells": [{"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi System"}, {"label": "text", "id": 13, "page_no": 9, "cluster": {"id": 13, "label": "text", "bbox": {"l": 396.6751708984375, "t": 223.71835327148438, "r": 438.42291259765625, "b": 233.55853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8272937536239624, "cells": [{"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}]}, "text": "ifi"}, {"label": "text", "id": 14, "page_no": 9, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.997196197509766, "t": 244.85638427734375, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}, "confidence": 0.9434750080108643, "cells": [{"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 15, "page_no": 9, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.95560073852539, "t": 264.8189392089844, "r": 509.53705, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9707977771759033, "cells": [{"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both."}, {"label": "text", "id": 16, "page_no": 9, "cluster": {"id": 16, "label": "text", "bbox": {"l": 64.17562103271484, "t": 294.56353759765625, "r": 464.51569, "b": 305.0062561035156, "coord_origin": "TOPLEFT"}, "confidence": 0.959129810333252, "cells": [{"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}, {"label": "picture", "id": 17, "page_no": 9, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 465.2912902832031, "t": 210.87185668945312, "r": 487.54522705078125, "b": 223.7872772216797, "coord_origin": "TOPLEFT"}, "confidence": 0.6540718078613281, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85106658935547, "t": 755.861328125, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9069269299507141, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "viii"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.8013916015625, "t": 755.7946166992188, "r": 337.03378, "b": 765.3360595703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9419320821762085, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 10, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 10, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 10, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 10, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 10, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 10, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 10, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 10, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 10, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 10, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 10, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 10, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 10, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 10, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 10, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 10, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 10, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 10, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 10, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 10, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 10, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 10, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 93.23255920410156, "t": 288.25800000000004, "r": 282.49176, "b": 353.5527038574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9835546612739563, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 333.32159423828125, "t": 363.5240173339844, "r": 375.9523010253906, "b": 370.23272705078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7944505214691162, "cells": [{"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 309.5291748046875, "t": 208.71022033691406, "r": 409.85666, "b": 215.99896240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8416581153869629, "cells": [{"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 309.4497985839844, "t": 223.8454132080078, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.6710495352745056, "cells": [{"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 309.4351501464844, "t": 254.4227752685547, "r": 420.78116, "b": 269.1181, "coord_origin": "TOPLEFT"}, "confidence": 0.7655534744262695, "cells": [{"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 309.1927795410156, "t": 275.1529541015625, "r": 505.15802, "b": 320.81719970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9793416857719421, "cells": [{"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 309.322998046875, "t": 327.22723388671875, "r": 500.27194000000003, "b": 341.859130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9277064204216003, "cells": [{"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 309.2567138671875, "t": 347.97686767578125, "r": 494.2681884765625, "b": 355.2289733886719, "coord_origin": "TOPLEFT"}, "confidence": 0.9116950035095215, "cells": [{"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 446.00567626953125, "t": 666.8178100585938, "r": 504.98651123046875, "b": 673.75719, "coord_origin": "TOPLEFT"}, "confidence": 0.7542392015457153, "cells": [{"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 93.356689453125, "t": 158.2716064453125, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.9251776337623596, "cells": [{"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 93.58877563476562, "t": 170.04763793945312, "r": 283.61542, "b": 177.87142944335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9153581857681274, "cells": [{"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 93.6685562133789, "t": 189.83038330078125, "r": 243.1177520751953, "b": 198.0092010498047, "coord_origin": "TOPLEFT"}, "confidence": 0.9365891814231873, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 93.72789001464844, "t": 199.86427307128906, "r": 282.72513, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9610549211502075, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 93.56942749023438, "t": 220.2848358154297, "r": 274.40585, "b": 248.44556, "coord_origin": "TOPLEFT"}, "confidence": 0.9730463027954102, "cells": [{"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 93.60421752929688, "t": 250.44761657714844, "r": 285.81323, "b": 269.4346618652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9686199426651001, "cells": [{"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 93.41441345214844, "t": 282.9095458984375, "r": 179.16822814941406, "b": 292.61377, "coord_origin": "TOPLEFT"}, "confidence": 0.9390802979469299, "cells": [{"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 93.40412902832031, "t": 365.70770263671875, "r": 192.24819946289062, "b": 375.04626, "coord_origin": "TOPLEFT"}, "confidence": 0.9252138733863831, "cells": [{"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 93.551025390625, "t": 376.95263671875, "r": 274.90921, "b": 405.5931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9603047966957092, "cells": [{"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 93.61650085449219, "t": 417.3977966308594, "r": 216.61273193359375, "b": 424.85425, "coord_origin": "TOPLEFT"}, "confidence": 0.8876497745513916, "cells": [{"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "picture", "bbox": {"l": 309.1715087890625, "t": 157.70965576171875, "r": 372.07818603515625, "b": 183.2933349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477246999740601, "cells": []}, {"id": 20, "label": "picture", "bbox": {"l": 309.91729736328125, "t": 357.83355712890625, "r": 327.7751159667969, "b": 376.003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.907178521156311, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "text", "bbox": {"l": 93.23255920410156, "t": 288.25800000000004, "r": 282.49176, "b": 353.5527038574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9835546612739563, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}]}, "text": "T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes."}, {"label": "text", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "text", "bbox": {"l": 333.32159423828125, "t": 363.5240173339844, "r": 375.9523010253906, "b": 370.23272705078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7944505214691162, "cells": [{"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}]}, "text": "Please Recycle"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 309.5291748046875, "t": 208.71022033691406, "r": 409.85666, "b": 215.99896240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8416581153869629, "cells": [{"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}]}, "text": "\u00a9 Copyright IBM Corporation 2013"}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 309.4497985839844, "t": 223.8454132080078, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.6710495352745056, "cells": [{"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation Route 100 Somers, NY 10589"}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 309.4351501464844, "t": 254.4227752685547, "r": 420.78116, "b": 269.1181, "coord_origin": "TOPLEFT"}, "confidence": 0.7655534744262695, "cells": [{"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}]}, "text": "Produced in the United States of America March 2013"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 309.1927795410156, "t": 275.1529541015625, "r": 505.15802, "b": 320.81719970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9793416857719421, "cells": [{"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at www.ibm.com/legal/ copytrade.shtml ."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 309.322998046875, "t": 327.22723388671875, "r": 500.27194000000003, "b": 341.859130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9277064204216003, "cells": [{"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}]}, "text": "This document is current as of the initial date of publication and may be changed by IBM at any time."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 309.2567138671875, "t": 347.97686767578125, "r": 494.2681884765625, "b": 355.2289733886719, "coord_origin": "TOPLEFT"}, "confidence": 0.9116950035095215, "cells": [{"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}]}, "text": "Not all offerings are available in every country in which IBM operates."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 446.00567626953125, "t": 666.8178100585938, "r": 504.98651123046875, "b": 673.75719, "coord_origin": "TOPLEFT"}, "confidence": 0.7542392015457153, "cells": [{"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}]}, "text": "QLS12392-USEN-00"}, {"label": "section_header", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 93.356689453125, "t": 158.2716064453125, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.9251776337623596, "cells": [{"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}]}, "text": "What you can expect"}, {"label": "text", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "text", "bbox": {"l": 93.58877563476562, "t": 170.04763793945312, "r": 283.61542, "b": 177.87142944335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9153581857681274, "cells": [{"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Depending on the engagement, our team of consultants offer:"}, {"label": "list_item", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 93.6685562133789, "t": 189.83038330078125, "r": 243.1177520751953, "b": 198.0092010498047, "coord_origin": "TOPLEFT"}, "confidence": 0.9365891814231873, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}]}, "text": "r Briefings, consulting and guidance on demand"}, {"label": "list_item", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 93.72789001464844, "t": 199.86427307128906, "r": 282.72513, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9610549211502075, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}]}, "text": "r Illumination of the DB2 for i capabilities and leadership to exploit them"}, {"label": "list_item", "id": 13, "page_no": 11, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 93.56942749023438, "t": 220.2848358154297, "r": 274.40585, "b": 248.44556, "coord_origin": "TOPLEFT"}, "confidence": 0.9730463027954102, "cells": [{"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}]}, "text": "r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation"}, {"label": "list_item", "id": 14, "page_no": 11, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 93.60421752929688, "t": 250.44761657714844, "r": 285.81323, "b": 269.4346618652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9686199426651001, "cells": [{"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}]}, "text": "r Configuration of systems, operating system and products to fully leverage database capabilities"}, {"label": "section_header", "id": 15, "page_no": 11, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 93.41441345214844, "t": 282.9095458984375, "r": 179.16822814941406, "b": 292.61377, "coord_origin": "TOPLEFT"}, "confidence": 0.9390802979469299, "cells": [{"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}]}, "text": "Key client benefits"}, {"label": "section_header", "id": 16, "page_no": 11, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 93.40412902832031, "t": 365.70770263671875, "r": 192.24819946289062, "b": 375.04626, "coord_origin": "TOPLEFT"}, "confidence": 0.9252138733863831, "cells": [{"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}]}, "text": "For more information"}, {"label": "text", "id": 17, "page_no": 11, "cluster": {"id": 17, "label": "text", "bbox": {"l": 93.551025390625, "t": 376.95263671875, "r": 274.90921, "b": 405.5931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9603047966957092, "cells": [{"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}]}, "text": "Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit:"}, {"label": "text", "id": 18, "page_no": 11, "cluster": {"id": 18, "label": "text", "bbox": {"l": 93.61650085449219, "t": 417.3977966308594, "r": 216.61273193359375, "b": 424.85425, "coord_origin": "TOPLEFT"}, "confidence": 0.8876497745513916, "cells": [{"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 19, "page_no": 11, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 309.1715087890625, "t": 157.70965576171875, "r": 372.07818603515625, "b": 183.2933349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477246999740601, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 20, "page_no": 11, "cluster": {"id": 20, "label": "picture", "bbox": {"l": 309.91729736328125, "t": 357.83355712890625, "r": 327.7751159667969, "b": 376.003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.907178521156311, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "text", "bbox": {"l": 93.23255920410156, "t": 288.25800000000004, "r": 282.49176, "b": 353.5527038574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9835546612739563, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}]}, "text": "T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes."}, {"label": "text", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "text", "bbox": {"l": 333.32159423828125, "t": 363.5240173339844, "r": 375.9523010253906, "b": 370.23272705078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7944505214691162, "cells": [{"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}]}, "text": "Please Recycle"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 309.5291748046875, "t": 208.71022033691406, "r": 409.85666, "b": 215.99896240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8416581153869629, "cells": [{"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}]}, "text": "\u00a9 Copyright IBM Corporation 2013"}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 309.4497985839844, "t": 223.8454132080078, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.6710495352745056, "cells": [{"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation Route 100 Somers, NY 10589"}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 309.4351501464844, "t": 254.4227752685547, "r": 420.78116, "b": 269.1181, "coord_origin": "TOPLEFT"}, "confidence": 0.7655534744262695, "cells": [{"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}]}, "text": "Produced in the United States of America March 2013"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 309.1927795410156, "t": 275.1529541015625, "r": 505.15802, "b": 320.81719970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9793416857719421, "cells": [{"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at www.ibm.com/legal/ copytrade.shtml ."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 309.322998046875, "t": 327.22723388671875, "r": 500.27194000000003, "b": 341.859130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9277064204216003, "cells": [{"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}]}, "text": "This document is current as of the initial date of publication and may be changed by IBM at any time."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 309.2567138671875, "t": 347.97686767578125, "r": 494.2681884765625, "b": 355.2289733886719, "coord_origin": "TOPLEFT"}, "confidence": 0.9116950035095215, "cells": [{"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}]}, "text": "Not all offerings are available in every country in which IBM operates."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 446.00567626953125, "t": 666.8178100585938, "r": 504.98651123046875, "b": 673.75719, "coord_origin": "TOPLEFT"}, "confidence": 0.7542392015457153, "cells": [{"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}]}, "text": "QLS12392-USEN-00"}, {"label": "section_header", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 93.356689453125, "t": 158.2716064453125, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.9251776337623596, "cells": [{"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}]}, "text": "What you can expect"}, {"label": "text", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "text", "bbox": {"l": 93.58877563476562, "t": 170.04763793945312, "r": 283.61542, "b": 177.87142944335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9153581857681274, "cells": [{"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Depending on the engagement, our team of consultants offer:"}, {"label": "list_item", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 93.6685562133789, "t": 189.83038330078125, "r": 243.1177520751953, "b": 198.0092010498047, "coord_origin": "TOPLEFT"}, "confidence": 0.9365891814231873, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}]}, "text": "r Briefings, consulting and guidance on demand"}, {"label": "list_item", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 93.72789001464844, "t": 199.86427307128906, "r": 282.72513, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9610549211502075, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}]}, "text": "r Illumination of the DB2 for i capabilities and leadership to exploit them"}, {"label": "list_item", "id": 13, "page_no": 11, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 93.56942749023438, "t": 220.2848358154297, "r": 274.40585, "b": 248.44556, "coord_origin": "TOPLEFT"}, "confidence": 0.9730463027954102, "cells": [{"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}]}, "text": "r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation"}, {"label": "list_item", "id": 14, "page_no": 11, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 93.60421752929688, "t": 250.44761657714844, "r": 285.81323, "b": 269.4346618652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9686199426651001, "cells": [{"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}]}, "text": "r Configuration of systems, operating system and products to fully leverage database capabilities"}, {"label": "section_header", "id": 15, "page_no": 11, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 93.41441345214844, "t": 282.9095458984375, "r": 179.16822814941406, "b": 292.61377, "coord_origin": "TOPLEFT"}, "confidence": 0.9390802979469299, "cells": [{"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}]}, "text": "Key client benefits"}, {"label": "section_header", "id": 16, "page_no": 11, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 93.40412902832031, "t": 365.70770263671875, "r": 192.24819946289062, "b": 375.04626, "coord_origin": "TOPLEFT"}, "confidence": 0.9252138733863831, "cells": [{"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}]}, "text": "For more information"}, {"label": "text", "id": 17, "page_no": 11, "cluster": {"id": 17, "label": "text", "bbox": {"l": 93.551025390625, "t": 376.95263671875, "r": 274.90921, "b": 405.5931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9603047966957092, "cells": [{"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}]}, "text": "Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit:"}, {"label": "text", "id": 18, "page_no": 11, "cluster": {"id": 18, "label": "text", "bbox": {"l": 93.61650085449219, "t": 417.3977966308594, "r": 216.61273193359375, "b": 424.85425, "coord_origin": "TOPLEFT"}, "confidence": 0.8876497745513916, "cells": [{"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 19, "page_no": 11, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 309.1715087890625, "t": 157.70965576171875, "r": 372.07818603515625, "b": 183.2933349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477246999740601, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 20, "page_no": 11, "cluster": {"id": 20, "label": "picture", "bbox": {"l": 309.91729736328125, "t": 357.83355712890625, "r": 327.7751159667969, "b": 376.003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.907178521156311, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.18641662597656, "t": 754.4242553710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.91111159324646, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32842254638672, "t": 754.7139282226562, "r": 334.42142, "b": 763.9345703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9425985813140869, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 262.9671630859375, "t": 76.57386779785156, "r": 541.20526, "b": 135.15176391601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9491702318191528, "cells": [{"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 262.94354248046875, "t": 191.9833984375, "r": 541.17163, "b": 334.21887, "coord_origin": "TOPLEFT"}, "confidence": 0.9866385459899902, "cells": [{"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 262.7120666503906, "t": 344.05780029296875, "r": 541.32196, "b": 450.19717, "coord_origin": "TOPLEFT"}, "confidence": 0.9859716296195984, "cells": [{"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 262.76617431640625, "t": 462.0334167480469, "r": 541.24127, "b": 604.21465, "coord_origin": "TOPLEFT"}, "confidence": 0.9878524541854858, "cells": [{"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 262.9361877441406, "t": 614.0336303710938, "r": 541.1944, "b": 708.252808, "coord_origin": "TOPLEFT"}, "confidence": 0.9843889474868774, "cells": [{"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 141.68251037597656, "t": 77.3314437866211, "r": 249.5221405029297, "b": 183.49258422851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875855445861816, "cells": []}, {"id": 8, "label": "picture", "bbox": {"l": 141.71910095214844, "t": 192.56460571289062, "r": 251.5185546875, "b": 319.4869079589844, "coord_origin": "TOPLEFT"}, "confidence": 0.9871560335159302, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 141.89089965820312, "t": 344.6142883300781, "r": 251.38380432128906, "b": 454.1204833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9869871139526367, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 141.69131469726562, "t": 614.610107421875, "r": 250.86129760742188, "b": 724.1473999023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9869828224182129, "cells": []}, {"id": 11, "label": "picture", "bbox": {"l": 141.57579040527344, "t": 462.79840087890625, "r": 249.41360473632812, "b": 568.6048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861478805541992, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.18641662597656, "t": 754.4242553710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.91111159324646, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xii"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32842254638672, "t": 754.7139282226562, "r": 334.42142, "b": 763.9345703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9425985813140869, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 262.9671630859375, "t": 76.57386779785156, "r": 541.20526, "b": 135.15176391601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9491702318191528, "cells": [{"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 262.94354248046875, "t": 191.9833984375, "r": 541.17163, "b": 334.21887, "coord_origin": "TOPLEFT"}, "confidence": 0.9866385459899902, "cells": [{"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}]}, "text": "Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 262.7120666503906, "t": 344.05780029296875, "r": 541.32196, "b": 450.19717, "coord_origin": "TOPLEFT"}, "confidence": 0.9859716296195984, "cells": [{"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}]}, "text": "Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services."}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 262.76617431640625, "t": 462.0334167480469, "r": 541.24127, "b": 604.21465, "coord_origin": "TOPLEFT"}, "confidence": 0.9878524541854858, "cells": [{"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead \u201cJDE on i\u201d analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i."}, {"label": "text", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "text", "bbox": {"l": 262.9361877441406, "t": 614.0336303710938, "r": 541.1944, "b": 708.252808, "coord_origin": "TOPLEFT"}, "confidence": 0.9843889474868774, "cells": [{"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}]}, "text": "Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems\u2122 Lab Services organization. Doug\u2019s 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings."}, {"label": "picture", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 141.68251037597656, "t": 77.3314437866211, "r": 249.5221405029297, "b": 183.49258422851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875855445861816, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 141.71910095214844, "t": 192.56460571289062, "r": 251.5185546875, "b": 319.4869079589844, "coord_origin": "TOPLEFT"}, "confidence": 0.9871560335159302, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 141.89089965820312, "t": 344.6142883300781, "r": 251.38380432128906, "b": 454.1204833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9869871139526367, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 141.69131469726562, "t": 614.610107421875, "r": 250.86129760742188, "b": 724.1473999023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9869828224182129, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 141.57579040527344, "t": 462.79840087890625, "r": 249.41360473632812, "b": 568.6048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861478805541992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 262.9671630859375, "t": 76.57386779785156, "r": 541.20526, "b": 135.15176391601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9491702318191528, "cells": [{"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 262.94354248046875, "t": 191.9833984375, "r": 541.17163, "b": 334.21887, "coord_origin": "TOPLEFT"}, "confidence": 0.9866385459899902, "cells": [{"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}]}, "text": "Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 262.7120666503906, "t": 344.05780029296875, "r": 541.32196, "b": 450.19717, "coord_origin": "TOPLEFT"}, "confidence": 0.9859716296195984, "cells": [{"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}]}, "text": "Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services."}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 262.76617431640625, "t": 462.0334167480469, "r": 541.24127, "b": 604.21465, "coord_origin": "TOPLEFT"}, "confidence": 0.9878524541854858, "cells": [{"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead \u201cJDE on i\u201d analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i."}, {"label": "text", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "text", "bbox": {"l": 262.9361877441406, "t": 614.0336303710938, "r": 541.1944, "b": 708.252808, "coord_origin": "TOPLEFT"}, "confidence": 0.9843889474868774, "cells": [{"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}]}, "text": "Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems\u2122 Lab Services organization. Doug\u2019s 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings."}, {"label": "picture", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 141.68251037597656, "t": 77.3314437866211, "r": 249.5221405029297, "b": 183.49258422851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875855445861816, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 141.71910095214844, "t": 192.56460571289062, "r": 251.5185546875, "b": 319.4869079589844, "coord_origin": "TOPLEFT"}, "confidence": 0.9871560335159302, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 141.89089965820312, "t": 344.6142883300781, "r": 251.38380432128906, "b": 454.1204833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9869871139526367, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 141.69131469726562, "t": 614.610107421875, "r": 250.86129760742188, "b": 724.1473999023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9869828224182129, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 141.57579040527344, "t": 462.79840087890625, "r": 249.41360473632812, "b": 568.6048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861478805541992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.18641662597656, "t": 754.4242553710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.91111159324646, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xii"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32842254638672, "t": 754.7139282226562, "r": 334.42142, "b": 763.9345703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9425985813140869, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 485.10001, "t": 754.75048828125, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.914573073387146, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 532.5994262695312, "t": 754.2633056640625, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8934566974639893, "cells": [{"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.6240234375, "t": 338.7327880859375, "r": 432.1602500000001, "b": 348.8023986816406, "coord_origin": "TOPLEFT"}, "confidence": 0.8790541291236877, "cells": [{"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.3055877685547, "t": 360.45208740234375, "r": 200.390869140625, "b": 370.70148, "coord_origin": "TOPLEFT"}, "confidence": 0.7089823484420776, "cells": [{"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.32855224609375, "t": 372.4372863769531, "r": 439.0932312011719, "b": 383.3298034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7829126119613647, "cells": [{"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.09214782714844, "t": 394.6581115722656, "r": 457.72974, "b": 416.9281921386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9423409700393677, "cells": [{"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.71363067626953, "t": 443.82012939453125, "r": 413.15256, "b": 460.31988525390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9612258076667786, "cells": [{"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.805419921875, "t": 476.6553039550781, "r": 547.23267, "b": 558.74059, "coord_origin": "TOPLEFT"}, "confidence": 0.9876447319984436, "cells": [{"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.59922790527344, "t": 570.6795654296875, "r": 546.81647, "b": 581.0769653320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9406706094741821, "cells": [{"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.80002, "t": 587.9857788085938, "r": 301.67783, "b": 597.50092, "coord_origin": "TOPLEFT"}, "confidence": 0.8938496112823486, "cells": [{"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.52783966064453, "t": 625.3417358398438, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}, "confidence": 0.9593470096588135, "cells": [{"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.9565887451172, "t": 657.9795532226562, "r": 294.74969, "b": 667.8671875, "coord_origin": "TOPLEFT"}, "confidence": 0.926453173160553, "cells": [{"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8791961669922, "t": 679.3858642578125, "r": 547.25244, "b": 701.721336, "coord_origin": "TOPLEFT"}, "confidence": 0.9736941456794739, "cells": [{"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.62045288085938, "t": 708.805908203125, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}, "confidence": 0.8550623655319214, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 151.20013, "t": 726.4096069335938, "r": 231.11916999999997, "b": 735.501671, "coord_origin": "TOPLEFT"}, "confidence": 0.7705531120300293, "cells": [{"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 262.7662658691406, "t": 76.673583984375, "r": 541.15515, "b": 206.9925079345703, "coord_origin": "TOPLEFT"}, "confidence": 0.9826179146766663, "cells": [{"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 262.6918029785156, "t": 216.41091918945312, "r": 541.26654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9823182821273804, "cells": [{"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "picture", "bbox": {"l": 142.26431274414062, "t": 77.12178802490234, "r": 251.69140625, "b": 192.6881103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871392846107483, "cells": []}, {"id": 18, "label": "picture", "bbox": {"l": 142.39024353027344, "t": 216.5591278076172, "r": 251.9964141845703, "b": 326.3576965332031, "coord_origin": "TOPLEFT"}, "confidence": 0.9861040711402893, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 485.10001, "t": 754.75048828125, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.914573073387146, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 532.5994262695312, "t": 754.2633056640625, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8934566974639893, "cells": [{"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiii"}, {"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6240234375, "t": 338.7327880859375, "r": 432.1602500000001, "b": 348.8023986816406, "coord_origin": "TOPLEFT"}, "confidence": 0.8790541291236877, "cells": [{"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3055877685547, "t": 360.45208740234375, "r": 200.390869140625, "b": 370.70148, "coord_origin": "TOPLEFT"}, "confidence": 0.7089823484420776, "cells": [{"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}]}, "text": "Debra Landon"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.32855224609375, "t": 372.4372863769531, "r": 439.0932312011719, "b": 383.3298034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7829126119613647, "cells": [{"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization, Rochester Center"}, {"label": "text", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.09214782714844, "t": 394.6581115722656, "r": 457.72974, "b": 416.9281921386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9423409700393677, "cells": [{"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}]}, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development"}, {"label": "section_header", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.71363067626953, "t": 443.82012939453125, "r": 413.15256, "b": 460.31988525390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9612258076667786, "cells": [{"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.805419921875, "t": 476.6553039550781, "r": 547.23267, "b": 558.74059, "coord_origin": "TOPLEFT"}, "confidence": 0.9876447319984436, "cells": [{"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.59922790527344, "t": 570.6795654296875, "r": 546.81647, "b": 581.0769653320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9406706094741821, "cells": [{"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.80002, "t": 587.9857788085938, "r": 301.67783, "b": 597.50092, "coord_origin": "TOPLEFT"}, "confidence": 0.8938496112823486, "cells": [{"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}, {"label": "section_header", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.52783966064453, "t": 625.3417358398438, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}, "confidence": 0.9593470096588135, "cells": [{"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}]}, "text": "Comments welcome"}, {"label": "text", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9565887451172, "t": 657.9795532226562, "r": 294.74969, "b": 667.8671875, "coord_origin": "TOPLEFT"}, "confidence": 0.926453173160553, "cells": [{"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Your comments are important to us!"}, {"label": "text", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8791961669922, "t": 679.3858642578125, "r": 547.25244, "b": 701.721336, "coord_origin": "TOPLEFT"}, "confidence": 0.9736941456794739, "cells": [{"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}]}, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways:"}, {"label": "list_item", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.62045288085938, "t": 708.805908203125, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}, "confidence": 0.8550623655319214, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use the online Contact us review Redbooks form found at:"}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 151.20013, "t": 726.4096069335938, "r": 231.11916999999997, "b": 735.501671, "coord_origin": "TOPLEFT"}, "confidence": 0.7705531120300293, "cells": [{"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 15, "page_no": 14, "cluster": {"id": 15, "label": "text", "bbox": {"l": 262.7662658691406, "t": 76.673583984375, "r": 541.15515, "b": 206.9925079345703, "coord_origin": "TOPLEFT"}, "confidence": 0.9826179146766663, "cells": [{"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36."}, {"label": "text", "id": 16, "page_no": 14, "cluster": {"id": 16, "label": "text", "bbox": {"l": 262.6918029785156, "t": 216.41091918945312, "r": 541.26654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9823182821273804, "cells": [{"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester."}, {"label": "picture", "id": 17, "page_no": 14, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 142.26431274414062, "t": 77.12178802490234, "r": 251.69140625, "b": 192.6881103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871392846107483, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 18, "page_no": 14, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 142.39024353027344, "t": 216.5591278076172, "r": 251.9964141845703, "b": 326.3576965332031, "coord_origin": "TOPLEFT"}, "confidence": 0.9861040711402893, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6240234375, "t": 338.7327880859375, "r": 432.1602500000001, "b": 348.8023986816406, "coord_origin": "TOPLEFT"}, "confidence": 0.8790541291236877, "cells": [{"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3055877685547, "t": 360.45208740234375, "r": 200.390869140625, "b": 370.70148, "coord_origin": "TOPLEFT"}, "confidence": 0.7089823484420776, "cells": [{"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}]}, "text": "Debra Landon"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.32855224609375, "t": 372.4372863769531, "r": 439.0932312011719, "b": 383.3298034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7829126119613647, "cells": [{"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization, Rochester Center"}, {"label": "text", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.09214782714844, "t": 394.6581115722656, "r": 457.72974, "b": 416.9281921386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9423409700393677, "cells": [{"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}]}, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development"}, {"label": "section_header", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.71363067626953, "t": 443.82012939453125, "r": 413.15256, "b": 460.31988525390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9612258076667786, "cells": [{"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.805419921875, "t": 476.6553039550781, "r": 547.23267, "b": 558.74059, "coord_origin": "TOPLEFT"}, "confidence": 0.9876447319984436, "cells": [{"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.59922790527344, "t": 570.6795654296875, "r": 546.81647, "b": 581.0769653320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9406706094741821, "cells": [{"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.80002, "t": 587.9857788085938, "r": 301.67783, "b": 597.50092, "coord_origin": "TOPLEFT"}, "confidence": 0.8938496112823486, "cells": [{"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}, {"label": "section_header", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.52783966064453, "t": 625.3417358398438, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}, "confidence": 0.9593470096588135, "cells": [{"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}]}, "text": "Comments welcome"}, {"label": "text", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9565887451172, "t": 657.9795532226562, "r": 294.74969, "b": 667.8671875, "coord_origin": "TOPLEFT"}, "confidence": 0.926453173160553, "cells": [{"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Your comments are important to us!"}, {"label": "text", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8791961669922, "t": 679.3858642578125, "r": 547.25244, "b": 701.721336, "coord_origin": "TOPLEFT"}, "confidence": 0.9736941456794739, "cells": [{"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}]}, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways:"}, {"label": "list_item", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.62045288085938, "t": 708.805908203125, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}, "confidence": 0.8550623655319214, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use the online Contact us review Redbooks form found at:"}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 151.20013, "t": 726.4096069335938, "r": 231.11916999999997, "b": 735.501671, "coord_origin": "TOPLEFT"}, "confidence": 0.7705531120300293, "cells": [{"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 15, "page_no": 14, "cluster": {"id": 15, "label": "text", "bbox": {"l": 262.7662658691406, "t": 76.673583984375, "r": 541.15515, "b": 206.9925079345703, "coord_origin": "TOPLEFT"}, "confidence": 0.9826179146766663, "cells": [{"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36."}, {"label": "text", "id": 16, "page_no": 14, "cluster": {"id": 16, "label": "text", "bbox": {"l": 262.6918029785156, "t": 216.41091918945312, "r": 541.26654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9823182821273804, "cells": [{"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester."}, {"label": "picture", "id": 17, "page_no": 14, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 142.26431274414062, "t": 77.12178802490234, "r": 251.69140625, "b": 192.6881103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871392846107483, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 18, "page_no": 14, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 142.39024353027344, "t": 216.5591278076172, "r": 251.9964141845703, "b": 326.3576965332031, "coord_origin": "TOPLEFT"}, "confidence": 0.9861040711402893, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 485.10001, "t": 754.75048828125, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.914573073387146, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 532.5994262695312, "t": 754.2633056640625, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8934566974639893, "cells": [{"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiii"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.0907974243164, "t": 754.5955200195312, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9144188761711121, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 95.71053314208984, "t": 754.6729736328125, "r": 337.03378, "b": 763.97509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9409525394439697, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.5431365966797, "t": 70.70941925048828, "r": 310.37393, "b": 81.28385162353516, "coord_origin": "TOPLEFT"}, "confidence": 0.8883165717124939, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 150.99362182617188, "t": 87.82772064208984, "r": 246.22007751464844, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.6984229683876038, "cells": [{"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 104.9468002319336, "r": 254.27019999999996, "b": 114.9759292602539, "coord_origin": "TOPLEFT"}, "confidence": 0.8724080324172974, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 150.4449005126953, "t": 120.91980743408203, "r": 426.99243, "b": 167.9119873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.8001936674118042, "cells": [{"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.44961547851562, "t": 194.60934448242188, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9598472118377686, "cells": [{"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.58946228027344, "t": 227.83482360839844, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8748195767402649, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.674072265625, "t": 244.8909912109375, "r": 326.09775, "b": 254.91514587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.7252531051635742, "cells": [{"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.61866760253906, "t": 261.4954833984375, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}, "confidence": 0.8754413723945618, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 150.70498657226562, "t": 278.7747497558594, "r": 301.07822, "b": 288.4688720703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6634963750839233, "cells": [{"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.6381072998047, "t": 295.406982421875, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}, "confidence": 0.8954482078552246, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 150.5355224609375, "t": 312.7005920410156, "r": 391.07678, "b": 322.6709289550781, "coord_origin": "TOPLEFT"}, "confidence": 0.7177077531814575, "cells": [{"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.53648376464844, "t": 330.0694580078125, "r": 546.2179, "b": 352.36749267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449265599250793, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 150.64300537109375, "t": 358.7694091796875, "r": 451.45623779296875, "b": 368.8676452636719, "coord_origin": "TOPLEFT"}, "confidence": 0.7377406358718872, "cells": [{"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.8739471435547, "t": 375.3260498046875, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}, "confidence": 0.9105416536331177, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 150.6341552734375, "t": 392.9015197753906, "r": 331.07773, "b": 402.52935791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.766843855381012, "cells": [{"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0907974243164, "t": 754.5955200195312, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9144188761711121, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiv"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.71053314208984, "t": 754.6729736328125, "r": 337.03378, "b": 763.97509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9409525394439697, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.5431365966797, "t": 70.70941925048828, "r": 310.37393, "b": 81.28385162353516, "coord_origin": "TOPLEFT"}, "confidence": 0.8883165717124939, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Send your comments in an email to:"}, {"label": "text", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.99362182617188, "t": 87.82772064208984, "r": 246.22007751464844, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.6984229683876038, "cells": [{"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}]}, "text": "redbooks@us.ibm.com"}, {"label": "list_item", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 104.9468002319336, "r": 254.27019999999996, "b": 114.9759292602539, "coord_origin": "TOPLEFT"}, "confidence": 0.8724080324172974, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mail your comments to:"}, {"label": "text", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4449005126953, "t": 120.91980743408203, "r": 426.99243, "b": 167.9119873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.8001936674118042, "cells": [{"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400"}, {"label": "section_header", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.44961547851562, "t": 194.60934448242188, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9598472118377686, "cells": [{"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.58946228027344, "t": 227.83482360839844, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8748195767402649, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on Facebook:"}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.674072265625, "t": 244.8909912109375, "r": 326.09775, "b": 254.91514587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.7252531051635742, "cells": [{"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.facebook.com/IBMRedbooks"}, {"label": "list_item", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.61866760253906, "t": 261.4954833984375, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}, "confidence": 0.8754413723945618, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Follow us on Twitter:"}, {"label": "text", "id": 10, "page_no": 15, "cluster": {"id": 10, "label": "text", "bbox": {"l": 150.70498657226562, "t": 278.7747497558594, "r": 301.07822, "b": 288.4688720703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6634963750839233, "cells": [{"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}]}, "text": "http://twitter.com/ibmredbooks"}, {"label": "list_item", "id": 11, "page_no": 15, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.6381072998047, "t": 295.406982421875, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}, "confidence": 0.8954482078552246, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Look for us on LinkedIn:"}, {"label": "text", "id": 12, "page_no": 15, "cluster": {"id": 12, "label": "text", "bbox": {"l": 150.5355224609375, "t": 312.7005920410156, "r": 391.07678, "b": 322.6709289550781, "coord_origin": "TOPLEFT"}, "confidence": 0.7177077531814575, "cells": [{"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 13, "page_no": 15, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.53648376464844, "t": 330.0694580078125, "r": 546.2179, "b": 352.36749267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449265599250793, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "text", "id": 14, "page_no": 15, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.64300537109375, "t": 358.7694091796875, "r": 451.45623779296875, "b": 368.8676452636719, "coord_origin": "TOPLEFT"}, "confidence": 0.7377406358718872, "cells": [{"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 15, "page_no": 15, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8739471435547, "t": 375.3260498046875, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}, "confidence": 0.9105416536331177, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 16, "page_no": 15, "cluster": {"id": 16, "label": "text", "bbox": {"l": 150.6341552734375, "t": 392.9015197753906, "r": 331.07773, "b": 402.52935791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.766843855381012, "cells": [{"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "body": [{"label": "list_item", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.5431365966797, "t": 70.70941925048828, "r": 310.37393, "b": 81.28385162353516, "coord_origin": "TOPLEFT"}, "confidence": 0.8883165717124939, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Send your comments in an email to:"}, {"label": "text", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.99362182617188, "t": 87.82772064208984, "r": 246.22007751464844, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.6984229683876038, "cells": [{"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}]}, "text": "redbooks@us.ibm.com"}, {"label": "list_item", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 104.9468002319336, "r": 254.27019999999996, "b": 114.9759292602539, "coord_origin": "TOPLEFT"}, "confidence": 0.8724080324172974, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mail your comments to:"}, {"label": "text", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4449005126953, "t": 120.91980743408203, "r": 426.99243, "b": 167.9119873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.8001936674118042, "cells": [{"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400"}, {"label": "section_header", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.44961547851562, "t": 194.60934448242188, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9598472118377686, "cells": [{"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.58946228027344, "t": 227.83482360839844, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8748195767402649, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on Facebook:"}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.674072265625, "t": 244.8909912109375, "r": 326.09775, "b": 254.91514587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.7252531051635742, "cells": [{"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.facebook.com/IBMRedbooks"}, {"label": "list_item", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.61866760253906, "t": 261.4954833984375, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}, "confidence": 0.8754413723945618, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Follow us on Twitter:"}, {"label": "text", "id": 10, "page_no": 15, "cluster": {"id": 10, "label": "text", "bbox": {"l": 150.70498657226562, "t": 278.7747497558594, "r": 301.07822, "b": 288.4688720703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6634963750839233, "cells": [{"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}]}, "text": "http://twitter.com/ibmredbooks"}, {"label": "list_item", "id": 11, "page_no": 15, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.6381072998047, "t": 295.406982421875, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}, "confidence": 0.8954482078552246, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Look for us on LinkedIn:"}, {"label": "text", "id": 12, "page_no": 15, "cluster": {"id": 12, "label": "text", "bbox": {"l": 150.5355224609375, "t": 312.7005920410156, "r": 391.07678, "b": 322.6709289550781, "coord_origin": "TOPLEFT"}, "confidence": 0.7177077531814575, "cells": [{"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 13, "page_no": 15, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.53648376464844, "t": 330.0694580078125, "r": 546.2179, "b": 352.36749267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449265599250793, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "text", "id": 14, "page_no": 15, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.64300537109375, "t": 358.7694091796875, "r": 451.45623779296875, "b": 368.8676452636719, "coord_origin": "TOPLEFT"}, "confidence": 0.7377406358718872, "cells": [{"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 15, "page_no": 15, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8739471435547, "t": 375.3260498046875, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}, "confidence": 0.9105416536331177, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 16, "page_no": 15, "cluster": {"id": 16, "label": "text", "bbox": {"l": 150.6341552734375, "t": 392.9015197753906, "r": 331.07773, "b": 402.52935791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.766843855381012, "cells": [{"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0907974243164, "t": 754.5955200195312, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9144188761711121, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiv"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.71053314208984, "t": 754.6729736328125, "r": 337.03378, "b": 763.97509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9409525394439697, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 18, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 328.2245788574219, "t": 754.796142578125, "r": 529.10632, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508112072944641, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.928466796875, "t": 754.3477783203125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8825920820236206, "cells": [{"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.11676025390625, "t": 70.81370544433594, "r": 546.43982, "b": 165.12799072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9880445599555969, "cells": [{"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7813262939453, "t": 176.89154052734375, "r": 547.2666, "b": 271.1439514160156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884217381477356, "cells": [{"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8739471435547, "t": 282.6854553222656, "r": 546.22662, "b": 329.1358337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.987811267375946, "cells": [{"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.800003, "t": 356.1169738769531, "r": 295.20493, "b": 372.2132873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.9654257893562317, "cells": [{"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.9359893798828, "t": 388.60498046875, "r": 547.16888, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9873308539390564, "cells": [{"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.52011108398438, "t": 470.60333251953125, "r": 466.31863, "b": 480.9595947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9494351744651794, "cells": [{"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 135.93324279785156, "t": 702.1747436523438, "r": 354.8916015625, "b": 711.3971557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9390377402305603, "cells": [{"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 136.6387176513672, "t": 495.7486877441406, "r": 491.2538146972656, "b": 699.0596923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797728061676025, "cells": [{"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2245788574219, "t": 754.796142578125, "r": 529.10632, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508112072944641, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.928466796875, "t": 754.3477783203125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8825920820236206, "cells": [{"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "text", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.11676025390625, "t": 70.81370544433594, "r": 546.43982, "b": 165.12799072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9880445599555969, "cells": [{"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day."}, {"label": "text", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7813262939453, "t": 176.89154052734375, "r": 547.2666, "b": 271.1439514160156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884217381477356, "cells": [{"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces."}, {"label": "text", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8739471435547, "t": 282.6854553222656, "r": 546.22662, "b": 329.1358337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.987811267375946, "cells": [{"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}]}, "text": "An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level."}, {"label": "section_header", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.800003, "t": 356.1169738769531, "r": 295.20493, "b": 372.2132873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.9654257893562317, "cells": [{"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}]}, "text": "1.3 DB2 for i security controls"}, {"label": "text", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9359893798828, "t": 388.60498046875, "r": 547.16888, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9873308539390564, "cells": [{"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table."}, {"label": "text", "id": 7, "page_no": 18, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.52011108398438, "t": 470.60333251953125, "r": 466.31863, "b": 480.9595947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9494351744651794, "cells": [{"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table."}, {"label": "caption", "id": 8, "page_no": 18, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.93324279785156, "t": 702.1747436523438, "r": 354.8916015625, "b": 711.3971557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9390377402305603, "cells": [{"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-1 All-or-nothing access to the rows of a table"}, {"label": "picture", "id": 9, "page_no": 18, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.6387176513672, "t": 495.7486877441406, "r": 491.2538146972656, "b": 699.0596923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797728061676025, "cells": [{"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.11676025390625, "t": 70.81370544433594, "r": 546.43982, "b": 165.12799072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9880445599555969, "cells": [{"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day."}, {"label": "text", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7813262939453, "t": 176.89154052734375, "r": 547.2666, "b": 271.1439514160156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884217381477356, "cells": [{"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces."}, {"label": "text", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8739471435547, "t": 282.6854553222656, "r": 546.22662, "b": 329.1358337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.987811267375946, "cells": [{"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}]}, "text": "An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level."}, {"label": "section_header", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.800003, "t": 356.1169738769531, "r": 295.20493, "b": 372.2132873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.9654257893562317, "cells": [{"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}]}, "text": "1.3 DB2 for i security controls"}, {"label": "text", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9359893798828, "t": 388.60498046875, "r": 547.16888, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9873308539390564, "cells": [{"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table."}, {"label": "text", "id": 7, "page_no": 18, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.52011108398438, "t": 470.60333251953125, "r": 466.31863, "b": 480.9595947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9494351744651794, "cells": [{"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table."}, {"label": "caption", "id": 8, "page_no": 18, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.93324279785156, "t": 702.1747436523438, "r": 354.8916015625, "b": 711.3971557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9390377402305603, "cells": [{"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-1 All-or-nothing access to the rows of a table"}, {"label": "picture", "id": 9, "page_no": 18, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.6387176513672, "t": 495.7486877441406, "r": 491.2538146972656, "b": 699.0596923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797728061676025, "cells": [{"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2245788574219, "t": 754.796142578125, "r": 529.10632, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508112072944641, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.928466796875, "t": 754.3477783203125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8825920820236206, "cells": [{"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}]}}, {"page_no": 19, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 19, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 19, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 20, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 328.2296447753906, "t": 754.7693481445312, "r": 529.10632, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9491059184074402, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.1834716796875, "t": 754.2889404296875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8711605668067932, "cells": [{"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.52648162841797, "t": 70.3741455078125, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9562826752662659, "cells": [{"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.02708435058594, "t": 96.53556823730469, "r": 539.93591, "b": 143.18263244628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9866766929626465, "cells": [{"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.92579650878906, "t": 154.57025146484375, "r": 542.25873, "b": 225.18753051757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9879173636436462, "cells": [{"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2296447753906, "t": 754.7693481445312, "r": 529.10632, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9491059184074402, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.1834716796875, "t": 754.2889404296875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8711605668067932, "cells": [{"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "section_header", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.52648162841797, "t": 70.3741455078125, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9562826752662659, "cells": [{"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.2 New controls: Row and Column Access Control"}, {"label": "text", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.02708435058594, "t": 96.53556823730469, "r": 539.93591, "b": 143.18263244628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9866766929626465, "cells": [{"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC)."}, {"label": "text", "id": 4, "page_no": 20, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.92579650878906, "t": 154.57025146484375, "r": 542.25873, "b": 225.18753051757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9879173636436462, "cells": [{"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place."}], "body": [{"label": "section_header", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.52648162841797, "t": 70.3741455078125, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9562826752662659, "cells": [{"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.2 New controls: Row and Column Access Control"}, {"label": "text", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.02708435058594, "t": 96.53556823730469, "r": 539.93591, "b": 143.18263244628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9866766929626465, "cells": [{"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC)."}, {"label": "text", "id": 4, "page_no": 20, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.92579650878906, "t": 154.57025146484375, "r": 542.25873, "b": 225.18753051757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9879173636436462, "cells": [{"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2296447753906, "t": 754.7693481445312, "r": 529.10632, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9491059184074402, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.1834716796875, "t": 754.2889404296875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8711605668067932, "cells": [{"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}]}}, {"page_no": 21, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.46890258789062, "t": 754.154052734375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8681296110153198, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.5233764648438, "r": 328.78973388671875, "b": 764.0779418945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9378317594528198, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46890258789062, "t": 754.154052734375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8681296110153198, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.5233764648438, "r": 328.78973388671875, "b": 764.0779418945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9378317594528198, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46890258789062, "t": 754.154052734375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8681296110153198, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.5233764648438, "r": 328.78973388671875, "b": 764.0779418945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9378317594528198, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 22, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.7032470703125, "t": 754.6690673828125, "r": 257.24335, "b": 764.16552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9463762640953064, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.8427734375, "t": 754.1920166015625, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.870232343673706, "cells": [{"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.07919311523438, "r": 515.13116, "b": 279.40411376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9443839192390442, "cells": [{"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.93650817871094, "t": 316.54962158203125, "r": 547.3324, "b": 351.0145568847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9858477115631104, "cells": [{"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.88510131835938, "t": 362.6448669433594, "r": 547.25745, "b": 408.92035, "coord_origin": "TOPLEFT"}, "confidence": 0.9865830540657043, "cells": [{"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.7690887451172, "t": 420.59063720703125, "r": 547.2655, "b": 442.93973, "coord_origin": "TOPLEFT"}, "confidence": 0.978435754776001, "cells": [{"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8439483642578, "t": 449.8417053222656, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}, "confidence": 0.9163564443588257, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7147674560547, "t": 462.1671447753906, "r": 239.97063000000003, "b": 472.4137878417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9477108716964722, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.14598083496094, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7584443092346191, "cells": [{"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 32.17647933959961, "t": 70.26495361328125, "r": 239.21856689453125, "b": 237.9607696533203, "coord_origin": "TOPLEFT"}, "confidence": 0.6822353005409241, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7032470703125, "t": 754.6690673828125, "r": 257.24335, "b": 764.16552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9463762640953064, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8427734375, "t": 754.1920166015625, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.870232343673706, "cells": [{"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2."}, {"label": "section_header", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.07919311523438, "r": 515.13116, "b": 279.40411376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9443839192390442, "cells": [{"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Roles and separation of duties"}, {"label": "text", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93650817871094, "t": 316.54962158203125, "r": 547.3324, "b": 351.0145568847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9858477115631104, "cells": [{"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}]}, "text": "One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs."}, {"label": "text", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88510131835938, "t": 362.6448669433594, "r": 547.25745, "b": 408.92035, "coord_origin": "TOPLEFT"}, "confidence": 0.9865830540657043, "cells": [{"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}]}, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks."}, {"label": "text", "id": 6, "page_no": 22, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7690887451172, "t": 420.59063720703125, "r": 547.2655, "b": 442.93973, "coord_origin": "TOPLEFT"}, "confidence": 0.978435754776001, "cells": [{"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics:"}, {"label": "list_item", "id": 7, "page_no": 22, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8439483642578, "t": 449.8417053222656, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}, "confidence": 0.9163564443588257, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Roles"}, {"label": "list_item", "id": 8, "page_no": 22, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7147674560547, "t": 462.1671447753906, "r": 239.97063000000003, "b": 472.4137878417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9477108716964722, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Separation of duties"}, {"label": "text", "id": 9, "page_no": 22, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.14598083496094, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7584443092346191, "cells": [{"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "picture", "id": 10, "page_no": 22, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17647933959961, "t": 70.26495361328125, "r": 239.21856689453125, "b": 237.9607696533203, "coord_origin": "TOPLEFT"}, "confidence": 0.6822353005409241, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2."}, {"label": "section_header", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.07919311523438, "r": 515.13116, "b": 279.40411376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9443839192390442, "cells": [{"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Roles and separation of duties"}, {"label": "text", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93650817871094, "t": 316.54962158203125, "r": 547.3324, "b": 351.0145568847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9858477115631104, "cells": [{"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}]}, "text": "One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs."}, {"label": "text", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88510131835938, "t": 362.6448669433594, "r": 547.25745, "b": 408.92035, "coord_origin": "TOPLEFT"}, "confidence": 0.9865830540657043, "cells": [{"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}]}, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks."}, {"label": "text", "id": 6, "page_no": 22, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7690887451172, "t": 420.59063720703125, "r": 547.2655, "b": 442.93973, "coord_origin": "TOPLEFT"}, "confidence": 0.978435754776001, "cells": [{"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics:"}, {"label": "list_item", "id": 7, "page_no": 22, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8439483642578, "t": 449.8417053222656, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}, "confidence": 0.9163564443588257, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Roles"}, {"label": "list_item", "id": 8, "page_no": 22, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7147674560547, "t": 462.1671447753906, "r": 239.97063000000003, "b": 472.4137878417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9477108716964722, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Separation of duties"}, {"label": "text", "id": 9, "page_no": 22, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.14598083496094, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7584443092346191, "cells": [{"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "picture", "id": 10, "page_no": 22, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17647933959961, "t": 70.26495361328125, "r": 239.21856689453125, "b": 237.9607696533203, "coord_origin": "TOPLEFT"}, "confidence": 0.6822353005409241, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7032470703125, "t": 754.6690673828125, "r": 257.24335, "b": 764.16552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9463762640953064, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8427734375, "t": 754.1920166015625, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.870232343673706, "cells": [{"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}]}}, {"page_no": 23, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.24457550048828, "t": 754.206787109375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8828381299972534, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.8071517944336, "t": 754.697998046875, "r": 328.72537, "b": 763.9702758789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9468024373054504, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.00420379638672, "t": 73.46255493164062, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9606645107269287, "cells": [{"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.84288024902344, "t": 105.96865844726562, "r": 547.29651, "b": 176.3714599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.987520694732666, "cells": [{"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.82821655273438, "t": 187.98101806640625, "r": 547.25879, "b": 222.3696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.9839559197425842, "cells": [{"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.2572479248047, "t": 234.0032501220703, "r": 547.31238, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9627324938774109, "cells": [{"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.83023071289062, "t": 262.2904968261719, "r": 474.0260009765625, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.941753089427948, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.586669921875, "t": 274.4866943359375, "r": 376.04473876953125, "b": 284.8529357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9312568306922913, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.70936584472656, "t": 286.37677001953125, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}, "confidence": 0.9296406507492065, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.47157287597656, "t": 298.2834167480469, "r": 384.0774841308594, "b": 308.84021, "coord_origin": "TOPLEFT"}, "confidence": 0.9292329549789429, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.6302947998047, "t": 310.25726318359375, "r": 385.5571, "b": 320.94586181640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9514175057411194, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 63.82975387573242, "t": 340.201904296875, "r": 501.05563, "b": 353.6498718261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9617684483528137, "cells": [{"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.88975524902344, "t": 366.2914733886719, "r": 547.22955, "b": 425.1965637207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9872463941574097, "cells": [{"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.7061767578125, "t": 436.642578125, "r": 534.94904, "b": 458.91448974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.97740238904953, "cells": [{"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "section_header", "bbox": {"l": 63.88609313964844, "t": 478.24237060546875, "r": 413.2720031738281, "b": 491.4810485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9616555571556091, "cells": [{"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.62423706054688, "t": 504.5226135253906, "r": 543.15112, "b": 562.88058, "coord_origin": "TOPLEFT"}, "confidence": 0.985893726348877, "cells": [{"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 135.72520446777344, "t": 574.528564453125, "r": 546.20782, "b": 621.1437377929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9876169562339783, "cells": [{"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 135.83445739746094, "t": 632.4659423828125, "r": 534.9491, "b": 654.96728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.979432225227356, "cells": [{"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.24457550048828, "t": 754.206787109375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8828381299972534, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.8071517944336, "t": 754.697998046875, "r": 328.72537, "b": 763.9702758789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9468024373054504, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.00420379638672, "t": 73.46255493164062, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9606645107269287, "cells": [{"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "2.1 Roles"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84288024902344, "t": 105.96865844726562, "r": 547.29651, "b": 176.3714599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.987520694732666, "cells": [{"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization\u2019s requirements for limiting access to data or separation of duties."}, {"label": "text", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82821655273438, "t": 187.98101806640625, "r": 547.25879, "b": 222.3696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.9839559197425842, "cells": [{"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}]}, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service."}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.2572479248047, "t": 234.0032501220703, "r": 547.31238, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9627324938774109, "cells": [{"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Roles are divided among the following DB2 functions and their corresponding function usage IDs:"}, {"label": "list_item", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.83023071289062, "t": 262.2904968261719, "r": 474.0260009765625, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.941753089427948, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA"}, {"label": "list_item", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.586669921875, "t": 274.4866943359375, "r": 376.04473876953125, "b": 284.8529357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9312568306922913, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Toolbox application server access: QIBM_DB_ZDA"}, {"label": "list_item", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70936584472656, "t": 286.37677001953125, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}, "confidence": 0.9296406507492065, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Administrator function: QIBM_DB_SQLADM"}, {"label": "list_item", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.47157287597656, "t": 298.2834167480469, "r": 384.0774841308594, "b": 308.84021, "coord_origin": "TOPLEFT"}, "confidence": 0.9292329549789429, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Information function: QIBM_DB_SYSMON"}, {"label": "list_item", "id": 10, "page_no": 23, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6302947998047, "t": 310.25726318359375, "r": 385.5571, "b": 320.94586181640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9514175057411194, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security Administrator function: QIBM_DB_SECADM"}, {"label": "section_header", "id": 11, "page_no": 23, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 63.82975387573242, "t": 340.201904296875, "r": 501.05563, "b": 353.6498718261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9617684483528137, "cells": [{"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA"}, {"label": "text", "id": 12, "page_no": 23, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.88975524902344, "t": 366.2914733886719, "r": 547.22955, "b": 425.1965637207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9872463941574097, "cells": [{"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 13, "page_no": 23, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7061767578125, "t": 436.642578125, "r": 534.94904, "b": 458.91448974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.97740238904953, "cells": [{"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}, {"label": "section_header", "id": 14, "page_no": 23, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 63.88609313964844, "t": 478.24237060546875, "r": 413.2720031738281, "b": 491.4810485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9616555571556091, "cells": [{"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA"}, {"label": "text", "id": 15, "page_no": 23, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.62423706054688, "t": 504.5226135253906, "r": 543.15112, "b": 562.88058, "coord_origin": "TOPLEFT"}, "confidence": 0.985893726348877, "cells": [{"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console."}, {"label": "text", "id": 16, "page_no": 23, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.72520446777344, "t": 574.528564453125, "r": 546.20782, "b": 621.1437377929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9876169562339783, "cells": [{"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}]}, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 17, "page_no": 23, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.83445739746094, "t": 632.4659423828125, "r": 534.9491, "b": 654.96728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.979432225227356, "cells": [{"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}], "body": [{"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.00420379638672, "t": 73.46255493164062, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9606645107269287, "cells": [{"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "2.1 Roles"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84288024902344, "t": 105.96865844726562, "r": 547.29651, "b": 176.3714599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.987520694732666, "cells": [{"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization\u2019s requirements for limiting access to data or separation of duties."}, {"label": "text", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82821655273438, "t": 187.98101806640625, "r": 547.25879, "b": 222.3696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.9839559197425842, "cells": [{"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}]}, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service."}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.2572479248047, "t": 234.0032501220703, "r": 547.31238, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9627324938774109, "cells": [{"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Roles are divided among the following DB2 functions and their corresponding function usage IDs:"}, {"label": "list_item", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.83023071289062, "t": 262.2904968261719, "r": 474.0260009765625, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.941753089427948, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA"}, {"label": "list_item", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.586669921875, "t": 274.4866943359375, "r": 376.04473876953125, "b": 284.8529357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9312568306922913, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Toolbox application server access: QIBM_DB_ZDA"}, {"label": "list_item", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70936584472656, "t": 286.37677001953125, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}, "confidence": 0.9296406507492065, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Administrator function: QIBM_DB_SQLADM"}, {"label": "list_item", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.47157287597656, "t": 298.2834167480469, "r": 384.0774841308594, "b": 308.84021, "coord_origin": "TOPLEFT"}, "confidence": 0.9292329549789429, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Information function: QIBM_DB_SYSMON"}, {"label": "list_item", "id": 10, "page_no": 23, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6302947998047, "t": 310.25726318359375, "r": 385.5571, "b": 320.94586181640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9514175057411194, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security Administrator function: QIBM_DB_SECADM"}, {"label": "section_header", "id": 11, "page_no": 23, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 63.82975387573242, "t": 340.201904296875, "r": 501.05563, "b": 353.6498718261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9617684483528137, "cells": [{"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA"}, {"label": "text", "id": 12, "page_no": 23, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.88975524902344, "t": 366.2914733886719, "r": 547.22955, "b": 425.1965637207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9872463941574097, "cells": [{"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 13, "page_no": 23, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7061767578125, "t": 436.642578125, "r": 534.94904, "b": 458.91448974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.97740238904953, "cells": [{"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}, {"label": "section_header", "id": 14, "page_no": 23, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 63.88609313964844, "t": 478.24237060546875, "r": 413.2720031738281, "b": 491.4810485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9616555571556091, "cells": [{"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA"}, {"label": "text", "id": 15, "page_no": 23, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.62423706054688, "t": 504.5226135253906, "r": 543.15112, "b": 562.88058, "coord_origin": "TOPLEFT"}, "confidence": 0.985893726348877, "cells": [{"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console."}, {"label": "text", "id": 16, "page_no": 23, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.72520446777344, "t": 574.528564453125, "r": 546.20782, "b": 621.1437377929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9876169562339783, "cells": [{"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}]}, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 17, "page_no": 23, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.83445739746094, "t": 632.4659423828125, "r": 534.9491, "b": 654.96728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.979432225227356, "cells": [{"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.24457550048828, "t": 754.206787109375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8828381299972534, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.8071517944336, "t": 754.697998046875, "r": 328.72537, "b": 763.9702758789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9468024373054504, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 24, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 360.4371643066406, "t": 754.883544921875, "r": 529.1568, "b": 764.1151123046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9521506428718567, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.8857421875, "t": 754.3031616210938, "r": 547.2386474609375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8864408731460571, "cells": [{"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.0216293334961, "t": 70.4687728881836, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9597232341766357, "cells": [{"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.77142333984375, "t": 96.74668884277344, "r": 547.01843, "b": 155.3083038330078, "coord_origin": "TOPLEFT"}, "confidence": 0.9876309037208557, "cells": [{"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.78330993652344, "t": 166.6936798095703, "r": 547.32452, "b": 200.90953063964844, "coord_origin": "TOPLEFT"}, "confidence": 0.9852434396743774, "cells": [{"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.86964416503906, "t": 212.85244750976562, "r": 541.29852, "b": 259.014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9871625304222107, "cells": [{"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.13877868652344, "t": 274.4320068359375, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9447333812713623, "cells": [{"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.1097412109375, "t": 289.3403625488281, "r": 532.06573, "b": 311.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9686275124549866, "cells": [{"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.01083374023438, "t": 331.09979248046875, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9618946313858032, "cells": [{"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.8494873046875, "t": 357.3560485839844, "r": 547.19281, "b": 391.70135, "coord_origin": "TOPLEFT"}, "confidence": 0.9852011203765869, "cells": [{"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.19979858398438, "t": 403.33209228515625, "r": 547.29944, "b": 437.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9853191375732422, "cells": [{"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 136.31793212890625, "t": 453.60760498046875, "r": 392.7384, "b": 465.75146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9519172310829163, "cells": [{"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.06344604492188, "t": 468.69525146484375, "r": 532.06573, "b": 490.76129, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "section_header", "bbox": {"l": 64.14019775390625, "t": 510.3857727050781, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}, "confidence": 0.960561215877533, "cells": [{"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.73634338378906, "t": 536.6364135742188, "r": 538.33221, "b": 582.74103, "coord_origin": "TOPLEFT"}, "confidence": 0.9864837527275085, "cells": [{"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.88818359375, "t": 594.3782348632812, "r": 547.28961, "b": 652.959716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9881628155708313, "cells": [{"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 136.17408752441406, "t": 668.4557495117188, "r": 392.72162, "b": 680.6693725585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9459793567657471, "cells": [{"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 136.1047821044922, "t": 683.893798828125, "r": 460.46808000000004, "b": 706.3756103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9628692269325256, "cells": [{"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 360.4371643066406, "t": 754.883544921875, "r": 529.1568, "b": 764.1151123046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9521506428718567, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8857421875, "t": 754.3031616210938, "r": 547.2386474609375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8864408731460571, "cells": [{"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}, {"label": "section_header", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.0216293334961, "t": 70.4687728881836, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9597232341766357, "cells": [{"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM"}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77142333984375, "t": 96.74668884277344, "r": 547.01843, "b": 155.3083038330078, "coord_origin": "TOPLEFT"}, "confidence": 0.9876309037208557, "cells": [{"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78330993652344, "t": 166.6936798095703, "r": 547.32452, "b": 200.90953063964844, "coord_origin": "TOPLEFT"}, "confidence": 0.9852434396743774, "cells": [{"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86964416503906, "t": 212.85244750976562, "r": 541.29852, "b": 259.014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9871625304222107, "cells": [{"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM."}, {"label": "section_header", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.13877868652344, "t": 274.4320068359375, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9447333812713623, "cells": [{"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SQLADM function usage"}, {"label": "text", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.1097412109375, "t": 289.3403625488281, "r": 532.06573, "b": 311.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9686275124549866, "cells": [{"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions."}, {"label": "section_header", "id": 8, "page_no": 24, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.01083374023438, "t": 331.09979248046875, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9618946313858032, "cells": [{"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON"}, {"label": "text", "id": 9, "page_no": 24, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8494873046875, "t": 357.3560485839844, "r": 547.19281, "b": 391.70135, "coord_origin": "TOPLEFT"}, "confidence": 0.9852011203765869, "cells": [{"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties."}, {"label": "text", "id": 10, "page_no": 24, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.19979858398438, "t": 403.33209228515625, "r": 547.29944, "b": 437.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9853191375732422, "cells": [{"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 11, "page_no": 24, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 136.31793212890625, "t": 453.60760498046875, "r": 392.7384, "b": 465.75146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9519172310829163, "cells": [{"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SYSMON function usage"}, {"label": "text", "id": 12, "page_no": 24, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.06344604492188, "t": 468.69525146484375, "r": 532.06573, "b": 490.76129, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions."}, {"label": "section_header", "id": 13, "page_no": 24, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.14019775390625, "t": 510.3857727050781, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}, "confidence": 0.960561215877533, "cells": [{"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM"}, {"label": "text", "id": 14, "page_no": 24, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.73634338378906, "t": 536.6364135742188, "r": 538.33221, "b": 582.74103, "coord_origin": "TOPLEFT"}, "confidence": 0.9864837527275085, "cells": [{"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}]}, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 15, "page_no": 24, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.88818359375, "t": 594.3782348632812, "r": 547.28961, "b": 652.959716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9881628155708313, "cells": [{"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}]}, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 16, "page_no": 24, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 136.17408752441406, "t": 668.4557495117188, "r": 392.72162, "b": 680.6693725585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9459793567657471, "cells": [{"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SECADM function usage"}, {"label": "text", "id": 17, "page_no": 24, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.1047821044922, "t": 683.893798828125, "r": 460.46808000000004, "b": 706.3756103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9628692269325256, "cells": [{"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}]}, "text": "Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group."}], "body": [{"label": "section_header", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.0216293334961, "t": 70.4687728881836, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9597232341766357, "cells": [{"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM"}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77142333984375, "t": 96.74668884277344, "r": 547.01843, "b": 155.3083038330078, "coord_origin": "TOPLEFT"}, "confidence": 0.9876309037208557, "cells": [{"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78330993652344, "t": 166.6936798095703, "r": 547.32452, "b": 200.90953063964844, "coord_origin": "TOPLEFT"}, "confidence": 0.9852434396743774, "cells": [{"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86964416503906, "t": 212.85244750976562, "r": 541.29852, "b": 259.014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9871625304222107, "cells": [{"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM."}, {"label": "section_header", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.13877868652344, "t": 274.4320068359375, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9447333812713623, "cells": [{"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SQLADM function usage"}, {"label": "text", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.1097412109375, "t": 289.3403625488281, "r": 532.06573, "b": 311.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9686275124549866, "cells": [{"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions."}, {"label": "section_header", "id": 8, "page_no": 24, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.01083374023438, "t": 331.09979248046875, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9618946313858032, "cells": [{"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON"}, {"label": "text", "id": 9, "page_no": 24, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8494873046875, "t": 357.3560485839844, "r": 547.19281, "b": 391.70135, "coord_origin": "TOPLEFT"}, "confidence": 0.9852011203765869, "cells": [{"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties."}, {"label": "text", "id": 10, "page_no": 24, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.19979858398438, "t": 403.33209228515625, "r": 547.29944, "b": 437.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9853191375732422, "cells": [{"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 11, "page_no": 24, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 136.31793212890625, "t": 453.60760498046875, "r": 392.7384, "b": 465.75146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9519172310829163, "cells": [{"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SYSMON function usage"}, {"label": "text", "id": 12, "page_no": 24, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.06344604492188, "t": 468.69525146484375, "r": 532.06573, "b": 490.76129, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions."}, {"label": "section_header", "id": 13, "page_no": 24, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.14019775390625, "t": 510.3857727050781, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}, "confidence": 0.960561215877533, "cells": [{"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM"}, {"label": "text", "id": 14, "page_no": 24, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.73634338378906, "t": 536.6364135742188, "r": 538.33221, "b": 582.74103, "coord_origin": "TOPLEFT"}, "confidence": 0.9864837527275085, "cells": [{"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}]}, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 15, "page_no": 24, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.88818359375, "t": 594.3782348632812, "r": 547.28961, "b": 652.959716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9881628155708313, "cells": [{"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}]}, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 16, "page_no": 24, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 136.17408752441406, "t": 668.4557495117188, "r": 392.72162, "b": 680.6693725585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9459793567657471, "cells": [{"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SECADM function usage"}, {"label": "text", "id": 17, "page_no": 24, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.1047821044922, "t": 683.893798828125, "r": 460.46808000000004, "b": 706.3756103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9628692269325256, "cells": [{"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}]}, "text": "Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 360.4371643066406, "t": 754.883544921875, "r": 529.1568, "b": 764.1151123046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9521506428718567, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8857421875, "t": 754.3031616210938, "r": 547.2386474609375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8864408731460571, "cells": [{"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}]}}, {"page_no": 25, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 25, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 25, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 25, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 25, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 25, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 25, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 25, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 25, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 25, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 25, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 25, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 25, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 25, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 26, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 27, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.58246612548828, "t": 754.4149780273438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9042928218841553, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.4140625, "t": 754.5875244140625, "r": 334.42142, "b": 764.0072631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.946682333946228, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"2": {"label": "table", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "ched", "ched", "ched", "ched", "ched", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl"], "num_rows": 22, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800568, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801422, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.58246612548828, "t": 754.4149780273438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9042928218841553, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.4140625, "t": 754.5875244140625, "r": 334.42142, "b": 764.0072631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.946682333946228, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "table", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "ched", "ched", "ched", "ched", "ched", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl"], "num_rows": 22, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800568, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801422, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}]}], "body": [{"label": "table", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "ched", "ched", "ched", "ched", "ched", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl"], "num_rows": 22, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800568, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801422, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.58246612548828, "t": 754.4149780273438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9042928218841553, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.4140625, "t": 754.5875244140625, "r": 334.42142, "b": 764.0072631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.946682333946228, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 28, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.7396240234375, "t": 754.7451171875, "r": 257.24335, "b": 764.0840454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9487502574920654, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.8259887695312, "t": 754.357666015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9122608304023743, "cells": [{"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 252.77349853515625, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9356535077095032, "cells": [{"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.7134552001953, "t": 316.6616516113281, "r": 536.15228, "b": 338.90152, "coord_origin": "TOPLEFT"}, "confidence": 0.9694458246231079, "cells": [{"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.12974548339844, "t": 350.6626892089844, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}, "confidence": 0.9007801413536072, "cells": [{"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.65553283691406, "t": 367.98822021484375, "r": 397.10867, "b": 378.2244567871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9492710828781128, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.7020721435547, "t": 380.12860107421875, "r": 348.45898, "b": 390.13079833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9349842071533203, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.77047729492188, "t": 391.8711853027344, "r": 327.03601, "b": 402.288330078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9309741854667664, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8464813232422, "t": 404.0476989746094, "r": 454.0878000000001, "b": 414.33953857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9496814012527466, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.77333068847656, "t": 415.80474853515625, "r": 385.73236, "b": 426.15533447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9369764924049377, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.60595703125, "t": 428.0014953613281, "r": 270.36362, "b": 437.9747009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9415654540061951, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 500.39999, "t": 93.10602569580078, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6890690326690674, "cells": [{"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.1435661315918, "t": 70.39622497558594, "r": 239.34097290039062, "b": 238.1275177001953, "coord_origin": "TOPLEFT"}, "confidence": 0.6961746215820312, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7396240234375, "t": 754.7451171875, "r": 257.24335, "b": 764.0840454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9487502574920654, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.8259887695312, "t": 754.357666015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9122608304023743, "cells": [{"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}, {"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3."}, {"label": "section_header", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 252.77349853515625, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9356535077095032, "cells": [{"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control"}, {"label": "text", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7134552001953, "t": 316.6616516113281, "r": 536.15228, "b": 338.90152, "coord_origin": "TOPLEFT"}, "confidence": 0.9694458246231079, "cells": [{"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example."}, {"label": "text", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.12974548339844, "t": 350.6626892089844, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}, "confidence": 0.9007801413536072, "cells": [{"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.65553283691406, "t": 367.98822021484375, "r": 397.10867, "b": 378.2244567871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9492710828781128, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explanation of RCAC and the concept of access control"}, {"label": "list_item", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7020721435547, "t": 380.12860107421875, "r": 348.45898, "b": 390.13079833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9349842071533203, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Special registers and built-in global variables"}, {"label": "list_item", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77047729492188, "t": 391.8711853027344, "r": 327.03601, "b": 402.288330078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9309741854667664, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH VERIFY_GROUP_FOR_USER function"}, {"label": "list_item", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8464813232422, "t": 404.0476989746094, "r": 454.0878000000001, "b": 414.33953857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9496814012527466, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "list_item", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.77333068847656, "t": 415.80474853515625, "r": 385.73236, "b": 426.15533447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9369764924049377, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "list_item", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.60595703125, "t": 428.0014953613281, "r": 270.36362, "b": 437.9747009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9415654540061951, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human resources example"}, {"label": "text", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "text", "bbox": {"l": 500.39999, "t": 93.10602569580078, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6890690326690674, "cells": [{"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "picture", "id": 13, "page_no": 28, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.1435661315918, "t": 70.39622497558594, "r": 239.34097290039062, "b": 238.1275177001953, "coord_origin": "TOPLEFT"}, "confidence": 0.6961746215820312, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3."}, {"label": "section_header", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 252.77349853515625, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9356535077095032, "cells": [{"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control"}, {"label": "text", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7134552001953, "t": 316.6616516113281, "r": 536.15228, "b": 338.90152, "coord_origin": "TOPLEFT"}, "confidence": 0.9694458246231079, "cells": [{"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example."}, {"label": "text", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.12974548339844, "t": 350.6626892089844, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}, "confidence": 0.9007801413536072, "cells": [{"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.65553283691406, "t": 367.98822021484375, "r": 397.10867, "b": 378.2244567871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9492710828781128, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explanation of RCAC and the concept of access control"}, {"label": "list_item", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7020721435547, "t": 380.12860107421875, "r": 348.45898, "b": 390.13079833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9349842071533203, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Special registers and built-in global variables"}, {"label": "list_item", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77047729492188, "t": 391.8711853027344, "r": 327.03601, "b": 402.288330078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9309741854667664, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH VERIFY_GROUP_FOR_USER function"}, {"label": "list_item", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8464813232422, "t": 404.0476989746094, "r": 454.0878000000001, "b": 414.33953857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9496814012527466, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "list_item", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.77333068847656, "t": 415.80474853515625, "r": 385.73236, "b": 426.15533447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9369764924049377, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "list_item", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.60595703125, "t": 428.0014953613281, "r": 270.36362, "b": 437.9747009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9415654540061951, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human resources example"}, {"label": "text", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "text", "bbox": {"l": 500.39999, "t": 93.10602569580078, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6890690326690674, "cells": [{"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "picture", "id": 13, "page_no": 28, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.1435661315918, "t": 70.39622497558594, "r": 239.34097290039062, "b": 238.1275177001953, "coord_origin": "TOPLEFT"}, "confidence": 0.6961746215820312, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7396240234375, "t": 754.7451171875, "r": 257.24335, "b": 764.0840454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9487502574920654, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.8259887695312, "t": 754.357666015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9122608304023743, "cells": [{"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}]}}, {"page_no": 29, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.47321319580078, "t": 754.3320922851562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086033701896667, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28377532958984, "t": 754.7196655273438, "r": 334.42142, "b": 763.9346313476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9480336904525757, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.3137435913086, "t": 73.53276062011719, "r": 518.77576, "b": 89.27471923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9650559425354004, "cells": [{"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.03993225097656, "t": 106.02466583251953, "r": 547.24268, "b": 152.26783752441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9864612221717834, "cells": [{"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.07485961914062, "t": 163.92002868652344, "r": 505.92376999999993, "b": 186.08607482910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9790142178535461, "cells": [{"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7504425048828, "t": 192.93507385253906, "r": 227.34537000000003, "b": 202.84515380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.943821907043457, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5780487060547, "t": 205.08816528320312, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9294455051422119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.8238983154297, "t": 226.61538696289062, "r": 547.20178, "b": 284.83905, "coord_origin": "TOPLEFT"}, "confidence": 0.9863597750663757, "cells": [{"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.0462646484375, "t": 296.7554016113281, "r": 547.2973, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9848619699478149, "cells": [{"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.23114013671875, "t": 354.7263488769531, "r": 535.67212, "b": 401.10906982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870187044143677, "cells": [{"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.24093627929688, "t": 501.6220397949219, "r": 383.47995, "b": 514.7472534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9663240909576416, "cells": [{"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.77207946777344, "t": 528.0364990234375, "r": 423.53543, "b": 538.3961791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9584894776344299, "cells": [{"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 136.47561645507812, "t": 553.8549194335938, "r": 229.26001, "b": 565.8992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526190161705017, "cells": [{"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9830322265625, "t": 568.7094116210938, "r": 544.57147, "b": 602.930908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9861118793487549, "cells": [{"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 141.94046020507812, "t": 418.39910888671875, "r": 541.24963, "b": 477.48040771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9858124256134033, "cells": [{"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.47321319580078, "t": 754.3320922851562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086033701896667, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28377532958984, "t": 754.7196655273438, "r": 334.42142, "b": 763.9346313476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9480336904525757, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.3137435913086, "t": 73.53276062011719, "r": 518.77576, "b": 89.27471923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9650559425354004, "cells": [{"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "3.1 Explanation of RCAC and the concept of access control"}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.03993225097656, "t": 106.02466583251953, "r": 547.24268, "b": 152.26783752441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9864612221717834, "cells": [{"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called \u201cIBM Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.07485961914062, "t": 163.92002868652344, "r": 505.92376999999993, "b": 186.08607482910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9790142178535461, "cells": [{"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms:"}, {"label": "list_item", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7504425048828, "t": 192.93507385253906, "r": 227.34537000000003, "b": 202.84515380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.943821907043457, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Row permissions"}, {"label": "list_item", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5780487060547, "t": 205.08816528320312, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9294455051422119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Column masks"}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8238983154297, "t": 226.61538696289062, "r": 547.20178, "b": 284.83905, "coord_origin": "TOPLEFT"}, "confidence": 0.9863597750663757, "cells": [{"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}]}, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0462646484375, "t": 296.7554016113281, "r": 547.2973, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9848619699478149, "cells": [{"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.23114013671875, "t": 354.7263488769531, "r": 535.67212, "b": 401.10906982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870187044143677, "cells": [{"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic."}, {"label": "section_header", "id": 10, "page_no": 29, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.24093627929688, "t": 501.6220397949219, "r": 383.47995, "b": 514.7472534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9663240909576416, "cells": [{"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.1 Row permission and column mask definitions"}, {"label": "text", "id": 11, "page_no": 29, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.77207946777344, "t": 528.0364990234375, "r": 423.53543, "b": 538.3961791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9584894776344299, "cells": [{"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections define row permission and column masks."}, {"label": "section_header", "id": 12, "page_no": 29, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.47561645507812, "t": 553.8549194335938, "r": 229.26001, "b": 565.8992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526190161705017, "cells": [{"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}]}, "text": "Row permission"}, {"label": "text", "id": 13, "page_no": 29, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9830322265625, "t": 568.7094116210938, "r": 544.57147, "b": 602.930908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9861118793487549, "cells": [{"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}]}, "text": "A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees."}, {"label": "text", "id": 14, "page_no": 29, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.94046020507812, "t": 418.39910888671875, "r": 541.24963, "b": 477.48040771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9858124256134033, "cells": [{"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}]}, "text": "Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility."}], "body": [{"label": "section_header", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.3137435913086, "t": 73.53276062011719, "r": 518.77576, "b": 89.27471923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9650559425354004, "cells": [{"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "3.1 Explanation of RCAC and the concept of access control"}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.03993225097656, "t": 106.02466583251953, "r": 547.24268, "b": 152.26783752441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9864612221717834, "cells": [{"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called \u201cIBM Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.07485961914062, "t": 163.92002868652344, "r": 505.92376999999993, "b": 186.08607482910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9790142178535461, "cells": [{"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms:"}, {"label": "list_item", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7504425048828, "t": 192.93507385253906, "r": 227.34537000000003, "b": 202.84515380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.943821907043457, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Row permissions"}, {"label": "list_item", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5780487060547, "t": 205.08816528320312, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9294455051422119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Column masks"}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8238983154297, "t": 226.61538696289062, "r": 547.20178, "b": 284.83905, "coord_origin": "TOPLEFT"}, "confidence": 0.9863597750663757, "cells": [{"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}]}, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0462646484375, "t": 296.7554016113281, "r": 547.2973, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9848619699478149, "cells": [{"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.23114013671875, "t": 354.7263488769531, "r": 535.67212, "b": 401.10906982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870187044143677, "cells": [{"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic."}, {"label": "section_header", "id": 10, "page_no": 29, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.24093627929688, "t": 501.6220397949219, "r": 383.47995, "b": 514.7472534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9663240909576416, "cells": [{"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.1 Row permission and column mask definitions"}, {"label": "text", "id": 11, "page_no": 29, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.77207946777344, "t": 528.0364990234375, "r": 423.53543, "b": 538.3961791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9584894776344299, "cells": [{"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections define row permission and column masks."}, {"label": "section_header", "id": 12, "page_no": 29, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.47561645507812, "t": 553.8549194335938, "r": 229.26001, "b": 565.8992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526190161705017, "cells": [{"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}]}, "text": "Row permission"}, {"label": "text", "id": 13, "page_no": 29, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9830322265625, "t": 568.7094116210938, "r": 544.57147, "b": 602.930908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9861118793487549, "cells": [{"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}]}, "text": "A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees."}, {"label": "text", "id": 14, "page_no": 29, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.94046020507812, "t": 418.39910888671875, "r": 541.24963, "b": 477.48040771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9858124256134033, "cells": [{"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}]}, "text": "Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.47321319580078, "t": 754.3320922851562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086033701896667, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28377532958984, "t": 754.7196655273438, "r": 334.42142, "b": 763.9346313476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9480336904525757, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 30, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 31, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.44506072998047, "t": 754.4765014648438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9057300090789795, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31855010986328, "t": 754.713134765625, "r": 334.42142, "b": 763.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9489884376525879, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.0411376953125, "t": 70.60277557373047, "r": 546.56934, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.975629985332489, "cells": [{"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.94520568847656, "t": 416.65887451171875, "r": 311.8898620605469, "b": 426.3029479980469, "coord_origin": "TOPLEFT"}, "confidence": 0.9420653581619263, "cells": [{"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.21709442138672, "t": 445.58026123046875, "r": 286.79703, "b": 459.303955078125, "coord_origin": "TOPLEFT"}, "confidence": 0.967232346534729, "cells": [{"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.47596740722656, "t": 471.9873046875, "r": 547.1828, "b": 506.3340759277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9810652136802673, "cells": [{"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.03172302246094, "t": 517.8567504882812, "r": 547.22864, "b": 623.89934, "coord_origin": "TOPLEFT"}, "confidence": 0.9877449870109558, "cells": [{"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 135.58670043945312, "t": 119.31904602050781, "r": 545.5314331054688, "b": 414.1254577636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9763185381889343, "cells": [{"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 142.643798828125, "t": 641.9248657226562, "r": 531.85156, "b": 663.9739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9614552855491638, "cells": [{"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.44506072998047, "t": 754.4765014648438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9057300090789795, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31855010986328, "t": 754.713134765625, "r": 334.42142, "b": 763.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9489884376525879, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0411376953125, "t": 70.60277557373047, "r": 546.56934, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.975629985332489, "cells": [{"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules."}, {"label": "caption", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94520568847656, "t": 416.65887451171875, "r": 311.8898620605469, "b": 426.3029479980469, "coord_origin": "TOPLEFT"}, "confidence": 0.9420653581619263, "cells": [{"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-2 CREATE MASK SQL statement"}, {"label": "section_header", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21709442138672, "t": 445.58026123046875, "r": 286.79703, "b": 459.303955078125, "coord_origin": "TOPLEFT"}, "confidence": 0.967232346534729, "cells": [{"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.2 Enabling and activating RCAC"}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.47596740722656, "t": 471.9873046875, "r": 547.1828, "b": 506.3340759277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9810652136802673, "cells": [{"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}]}, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.03172302246094, "t": 517.8567504882812, "r": 547.22864, "b": 623.89934, "coord_origin": "TOPLEFT"}, "confidence": 0.9877449870109558, "cells": [{"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}]}, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table."}, {"label": "picture", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.58670043945312, "t": 119.31904602050781, "r": 545.5314331054688, "b": 414.1254577636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9763185381889343, "cells": [{"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 142.643798828125, "t": 641.9248657226562, "r": 531.85156, "b": 663.9739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9614552855491638, "cells": [{"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}], "body": [{"label": "text", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0411376953125, "t": 70.60277557373047, "r": 546.56934, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.975629985332489, "cells": [{"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules."}, {"label": "caption", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94520568847656, "t": 416.65887451171875, "r": 311.8898620605469, "b": 426.3029479980469, "coord_origin": "TOPLEFT"}, "confidence": 0.9420653581619263, "cells": [{"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-2 CREATE MASK SQL statement"}, {"label": "section_header", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21709442138672, "t": 445.58026123046875, "r": 286.79703, "b": 459.303955078125, "coord_origin": "TOPLEFT"}, "confidence": 0.967232346534729, "cells": [{"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.2 Enabling and activating RCAC"}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.47596740722656, "t": 471.9873046875, "r": 547.1828, "b": 506.3340759277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9810652136802673, "cells": [{"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}]}, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.03172302246094, "t": 517.8567504882812, "r": 547.22864, "b": 623.89934, "coord_origin": "TOPLEFT"}, "confidence": 0.9877449870109558, "cells": [{"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}]}, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table."}, {"label": "picture", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.58670043945312, "t": 119.31904602050781, "r": 545.5314331054688, "b": 414.1254577636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9763185381889343, "cells": [{"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 142.643798828125, "t": 641.9248657226562, "r": 531.85156, "b": 663.9739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9614552855491638, "cells": [{"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.44506072998047, "t": 754.4765014648438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9057300090789795, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31855010986328, "t": 754.713134765625, "r": 334.42142, "b": 763.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9489884376525879, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 32, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.607666015625, "t": 754.6572875976562, "r": 523.60162, "b": 764.1538696289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9509176015853882, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0054321289062, "t": 754.273193359375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9023982882499695, "cells": [{"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.7609405517578, "t": 349.9282531738281, "r": 415.2347106933594, "b": 359.3016052246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9314021468162537, "cells": [{"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8385467529297, "t": 375.867431640625, "r": 547.2995, "b": 434.064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9820544719696045, "cells": [{"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.1680145263672, "t": 724.62646484375, "r": 306.3438720703125, "b": 734.2166137695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9344669580459595, "cells": [{"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 142.42935180664062, "t": 452.0504150390625, "r": 531.85156, "b": 474.2764587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9186185598373413, "cells": [{"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.23851013183594, "t": 77.76332092285156, "r": 507.5733642578125, "b": 347.19940185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9780997633934021, "cells": [{"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 135.7325897216797, "t": 500.9567565917969, "r": 514.99365234375, "b": 721.4244995117188, "coord_origin": "TOPLEFT"}, "confidence": 0.9797928333282471, "cells": [{"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.607666015625, "t": 754.6572875976562, "r": 523.60162, "b": 764.1538696289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9509176015853882, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0054321289062, "t": 754.273193359375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9023982882499695, "cells": [{"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}, {"label": "caption", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.7609405517578, "t": 349.9282531738281, "r": 415.2347106933594, "b": 359.3016052246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9314021468162537, "cells": [{"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements"}, {"label": "text", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8385467529297, "t": 375.867431640625, "r": 547.2995, "b": 434.064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9820544719696045, "cells": [{"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}]}, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC."}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.1680145263672, "t": 724.62646484375, "r": 306.3438720703125, "b": 734.2166137695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9344669580459595, "cells": [{"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-4 ALTER TABLE SQL statement"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 142.42935180664062, "t": 452.0504150390625, "r": 531.85156, "b": 474.2764587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9186185598373413, "cells": [{"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}, {"label": "picture", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.23851013183594, "t": 77.76332092285156, "r": 507.5733642578125, "b": 347.19940185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9780997633934021, "cells": [{"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.7325897216797, "t": 500.9567565917969, "r": 514.99365234375, "b": 721.4244995117188, "coord_origin": "TOPLEFT"}, "confidence": 0.9797928333282471, "cells": [{"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.7609405517578, "t": 349.9282531738281, "r": 415.2347106933594, "b": 359.3016052246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9314021468162537, "cells": [{"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements"}, {"label": "text", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8385467529297, "t": 375.867431640625, "r": 547.2995, "b": 434.064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9820544719696045, "cells": [{"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}]}, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC."}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.1680145263672, "t": 724.62646484375, "r": 306.3438720703125, "b": 734.2166137695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9344669580459595, "cells": [{"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-4 ALTER TABLE SQL statement"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 142.42935180664062, "t": 452.0504150390625, "r": 531.85156, "b": 474.2764587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9186185598373413, "cells": [{"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}, {"label": "picture", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.23851013183594, "t": 77.76332092285156, "r": 507.5733642578125, "b": 347.19940185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9780997633934021, "cells": [{"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.7325897216797, "t": 500.9567565917969, "r": 514.99365234375, "b": 721.4244995117188, "coord_origin": "TOPLEFT"}, "confidence": 0.9797928333282471, "cells": [{"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.607666015625, "t": 754.6572875976562, "r": 523.60162, "b": 764.1538696289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9509176015853882, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0054321289062, "t": 754.273193359375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9023982882499695, "cells": [{"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}]}}, {"page_no": 33, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.41429901123047, "t": 754.440673828125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157553911209106, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.24517059326172, "t": 754.6806030273438, "r": 334.42142, "b": 763.880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9524391889572144, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.7600555419922, "t": 70.74359130859375, "r": 547.27368, "b": 153.18722534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9859952330589294, "cells": [{"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.96725463867188, "t": 164.6621856689453, "r": 547.26862, "b": 211.24705505371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9864240288734436, "cells": [{"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29631042480469, "t": 283.35809326171875, "r": 438.75719999999995, "b": 299.7961730957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9686634540557861, "cells": [{"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.81504821777344, "t": 315.3957824707031, "r": 525.50189, "b": 337.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9780532121658325, "cells": [{"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.23223114013672, "t": 357.744873046875, "r": 204.58528, "b": 370.9036865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9646314978599548, "cells": [{"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.89915466308594, "t": 384.0397644042969, "r": 547.10638, "b": 418.1158447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9852918386459351, "cells": [{"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.08819580078125, "t": 429.4395446777344, "r": 544.57635, "b": 475.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9797153472900391, "cells": [{"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6575927734375, "t": 482.5708923339844, "r": 546.9812, "b": 517.0709228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9826201796531677, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.68878173828125, "t": 523.186767578125, "r": 522.54559, "b": 545.72144, "coord_origin": "TOPLEFT"}, "confidence": 0.9765340089797974, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.3015594482422, "t": 552.5537719726562, "r": 547.24835, "b": 634.927978515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9861234426498413, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.51412963867188, "t": 641.8392333984375, "r": 547.26508, "b": 700.5236206054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9852910041809082, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.05694580078125, "t": 712.0028686523438, "r": 547.20148, "b": 734.2177124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9718018174171448, "cells": [{"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 142.8, "t": 228.60476684570312, "r": 537.48688, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9677881598472595, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41429901123047, "t": 754.440673828125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157553911209106, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.24517059326172, "t": 754.6806030273438, "r": 334.42142, "b": 763.880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9524391889572144, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.7600555419922, "t": 70.74359130859375, "r": 547.27368, "b": 153.18722534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9859952330589294, "cells": [{"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set."}, {"label": "text", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.96725463867188, "t": 164.6621856689453, "r": 547.26862, "b": 211.24705505371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9864240288734436, "cells": [{"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user\u2019s ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first."}, {"label": "section_header", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29631042480469, "t": 283.35809326171875, "r": 438.75719999999995, "b": 299.7961730957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9686634540557861, "cells": [{"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}]}, "text": "3.2 Special registers and built-in global variables"}, {"label": "text", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.81504821777344, "t": 315.3957824707031, "r": 525.50189, "b": 337.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9780532121658325, "cells": [{"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section describes how you can use special registers and built-in global variables to implement RCAC."}, {"label": "section_header", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.23223114013672, "t": 357.744873046875, "r": 204.58528, "b": 370.9036865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9646314978599548, "cells": [{"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.1 Special registers"}, {"label": "text", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.89915466308594, "t": 384.0397644042969, "r": 547.10638, "b": 418.1158447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9852918386459351, "cells": [{"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server."}, {"label": "text", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08819580078125, "t": 429.4395446777344, "r": 544.57635, "b": 475.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9797153472900391, "cells": [{"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers:"}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6575927734375, "t": 482.5708923339844, "r": 546.9812, "b": 517.0709228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9826201796531677, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION ."}, {"label": "list_item", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.68878173828125, "t": 523.186767578125, "r": 522.54559, "b": 545.72144, "coord_origin": "TOPLEFT"}, "confidence": 0.9765340089797974, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.3015594482422, "t": 552.5537719726562, "r": 547.24835, "b": 634.927978515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9861234426498413, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller\u2019s or the owner\u2019s user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner\u2019s authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.51412963867188, "t": 641.8392333984375, "r": 547.26508, "b": 700.5236206054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9852910041809082, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128)."}, {"label": "text", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05694580078125, "t": 712.0028686523438, "r": 547.20148, "b": 734.2177124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9718018174171448, "cells": [{"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text."}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.8, "t": 228.60476684570312, "r": 537.48688, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9677881598472595, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Note: If a user does not have permission to access the row, the column mask logic is not invoked."}], "body": [{"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.7600555419922, "t": 70.74359130859375, "r": 547.27368, "b": 153.18722534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9859952330589294, "cells": [{"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set."}, {"label": "text", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.96725463867188, "t": 164.6621856689453, "r": 547.26862, "b": 211.24705505371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9864240288734436, "cells": [{"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user\u2019s ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first."}, {"label": "section_header", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29631042480469, "t": 283.35809326171875, "r": 438.75719999999995, "b": 299.7961730957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9686634540557861, "cells": [{"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}]}, "text": "3.2 Special registers and built-in global variables"}, {"label": "text", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.81504821777344, "t": 315.3957824707031, "r": 525.50189, "b": 337.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9780532121658325, "cells": [{"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section describes how you can use special registers and built-in global variables to implement RCAC."}, {"label": "section_header", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.23223114013672, "t": 357.744873046875, "r": 204.58528, "b": 370.9036865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9646314978599548, "cells": [{"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.1 Special registers"}, {"label": "text", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.89915466308594, "t": 384.0397644042969, "r": 547.10638, "b": 418.1158447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9852918386459351, "cells": [{"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server."}, {"label": "text", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08819580078125, "t": 429.4395446777344, "r": 544.57635, "b": 475.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9797153472900391, "cells": [{"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers:"}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6575927734375, "t": 482.5708923339844, "r": 546.9812, "b": 517.0709228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9826201796531677, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION ."}, {"label": "list_item", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.68878173828125, "t": 523.186767578125, "r": 522.54559, "b": 545.72144, "coord_origin": "TOPLEFT"}, "confidence": 0.9765340089797974, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.3015594482422, "t": 552.5537719726562, "r": 547.24835, "b": 634.927978515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9861234426498413, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller\u2019s or the owner\u2019s user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner\u2019s authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.51412963867188, "t": 641.8392333984375, "r": 547.26508, "b": 700.5236206054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9852910041809082, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128)."}, {"label": "text", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05694580078125, "t": 712.0028686523438, "r": 547.20148, "b": 734.2177124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9718018174171448, "cells": [{"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text."}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.8, "t": 228.60476684570312, "r": 537.48688, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9677881598472595, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Note: If a user does not have permission to access the row, the column mask logic is not invoked."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41429901123047, "t": 754.440673828125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157553911209106, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.24517059326172, "t": 754.6806030273438, "r": 334.42142, "b": 763.880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9524391889572144, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 34, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 34, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 34, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 34, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 34, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 34, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 34, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 34, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 34, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 34, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 35, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 35, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 35, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 35, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 35, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 35, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 35, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 35, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 35, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 35, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 36, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.57867431640625, "t": 754.7420043945312, "r": 523.60162, "b": 764.0948486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520102739334106, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7230834960938, "t": 754.28857421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108889102935791, "cells": [{"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.577880859375, "t": 70.0939712524414, "r": 512.90088, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.9630382061004639, "cells": [{"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.82391357421875, "t": 121.33588409423828, "r": 544.90198, "b": 155.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9855659604072571, "cells": [{"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.99398803710938, "t": 168.17491149902344, "r": 545.6568, "b": 214.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9861353635787964, "cells": [{"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.151123046875, "t": 225.48377990722656, "r": 537.8551, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9822747707366943, "cells": [{"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.31472778320312, "t": 271.4064636230469, "r": 547.2691, "b": 293.71936, "coord_origin": "TOPLEFT"}, "confidence": 0.9792705774307251, "cells": [{"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.01747131347656, "t": 306.14697265625, "r": 545.94769, "b": 327.9010925292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9774510264396667, "cells": [{"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.0785675048828, "t": 339.462646484375, "r": 547.24945, "b": 410.0204772949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9882258176803589, "cells": [{"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.35562133789062, "t": 421.3914794921875, "r": 542.04926, "b": 443.71701, "coord_origin": "TOPLEFT"}, "confidence": 0.9723648428916931, "cells": [{"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1328582763672, "t": 450.9010009765625, "r": 546.53522, "b": 472.40781, "coord_origin": "TOPLEFT"}, "confidence": 0.9142380952835083, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.92572021484375, "t": 484.72674560546875, "r": 547.02722, "b": 554.9171142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9879254102706909, "cells": [{"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.01707458496094, "t": 566.9345703125, "r": 547.37488, "b": 637.0723266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875260591506958, "cells": [{"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.3708953857422, "t": 648.479736328125, "r": 355.12689208984375, "b": 658.3316650390625, "coord_origin": "TOPLEFT"}, "confidence": 0.804072916507721, "cells": [{"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 699.452499, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 226.11877, "t": 678.1546020507812, "r": 331.77557373046875, "b": 687.45269, "coord_origin": "TOPLEFT"}, "confidence": 0.6781665682792664, "cells": [{"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 222.19522, "t": 689.8526611328125, "r": 371.63684, "b": 700.1818237304688, "coord_origin": "TOPLEFT"}, "confidence": 0.7035561203956604, "cells": [{"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.57867431640625, "t": 754.7420043945312, "r": 523.60162, "b": 764.0948486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520102739334106, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7230834960938, "t": 754.28857421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108889102935791, "cells": [{"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}, {"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.577880859375, "t": 70.0939712524414, "r": 512.90088, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.9630382061004639, "cells": [{"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82391357421875, "t": 121.33588409423828, "r": 544.90198, "b": 155.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9855659604072571, "cells": [{"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}]}, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.99398803710938, "t": 168.17491149902344, "r": 545.6568, "b": 214.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9861353635787964, "cells": [{"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.151123046875, "t": 225.48377990722656, "r": 537.8551, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9822747707366943, "cells": [{"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value."}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.31472778320312, "t": 271.4064636230469, "r": 547.2691, "b": 293.71936, "coord_origin": "TOPLEFT"}, "confidence": 0.9792705774307251, "cells": [{"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}]}, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman resources example\u201d on page 22."}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.01747131347656, "t": 306.14697265625, "r": 545.94769, "b": 327.9010925292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9774510264396667, "cells": [{"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}]}, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0785675048828, "t": 339.462646484375, "r": 547.24945, "b": 410.0204772949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9882258176803589, "cells": [{"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.35562133789062, "t": 421.3914794921875, "r": 542.04926, "b": 443.71701, "coord_origin": "TOPLEFT"}, "confidence": 0.9723648428916931, "cells": [{"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the IBM i 7.2 Knowledge Center, found at:"}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1328582763672, "t": 450.9010009765625, "r": 546.53522, "b": 472.40781, "coord_origin": "TOPLEFT"}, "confidence": 0.9142380952835083, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en"}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.92572021484375, "t": 484.72674560546875, "r": 547.02722, "b": 554.9171142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9879254102706909, "cells": [{"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}]}, "text": "One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.01707458496094, "t": 566.9345703125, "r": 547.37488, "b": 637.0723266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875260591506958, "cells": [{"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}]}, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1."}, {"label": "caption", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.3708953857422, "t": 648.479736328125, "r": 355.12689208984375, "b": 658.3316650390625, "coord_origin": "TOPLEFT"}, "confidence": 0.804072916507721, "cells": [{"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-1 Subquery that is used as part of the rule"}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 699.452499, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE"}, {"label": "text", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "text", "bbox": {"l": 226.11877, "t": 678.1546020507812, "r": 331.77557373046875, "b": 687.45269, "coord_origin": "TOPLEFT"}, "confidence": 0.6781665682792664, "cells": [{"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}]}, "text": "DATE_MASTER D"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 222.19522, "t": 689.8526611328125, "r": 371.63684, "b": 700.1818237304688, "coord_origin": "TOPLEFT"}, "confidence": 0.7035561203956604, "cells": [{"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "D.BUSINESS_DAY = 'Y')"}], "body": [{"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.577880859375, "t": 70.0939712524414, "r": 512.90088, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.9630382061004639, "cells": [{"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82391357421875, "t": 121.33588409423828, "r": 544.90198, "b": 155.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9855659604072571, "cells": [{"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}]}, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.99398803710938, "t": 168.17491149902344, "r": 545.6568, "b": 214.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9861353635787964, "cells": [{"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.151123046875, "t": 225.48377990722656, "r": 537.8551, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9822747707366943, "cells": [{"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value."}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.31472778320312, "t": 271.4064636230469, "r": 547.2691, "b": 293.71936, "coord_origin": "TOPLEFT"}, "confidence": 0.9792705774307251, "cells": [{"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}]}, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman resources example\u201d on page 22."}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.01747131347656, "t": 306.14697265625, "r": 545.94769, "b": 327.9010925292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9774510264396667, "cells": [{"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}]}, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0785675048828, "t": 339.462646484375, "r": 547.24945, "b": 410.0204772949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9882258176803589, "cells": [{"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.35562133789062, "t": 421.3914794921875, "r": 542.04926, "b": 443.71701, "coord_origin": "TOPLEFT"}, "confidence": 0.9723648428916931, "cells": [{"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the IBM i 7.2 Knowledge Center, found at:"}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1328582763672, "t": 450.9010009765625, "r": 546.53522, "b": 472.40781, "coord_origin": "TOPLEFT"}, "confidence": 0.9142380952835083, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en"}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.92572021484375, "t": 484.72674560546875, "r": 547.02722, "b": 554.9171142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9879254102706909, "cells": [{"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}]}, "text": "One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.01707458496094, "t": 566.9345703125, "r": 547.37488, "b": 637.0723266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875260591506958, "cells": [{"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}]}, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1."}, {"label": "caption", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.3708953857422, "t": 648.479736328125, "r": 355.12689208984375, "b": 658.3316650390625, "coord_origin": "TOPLEFT"}, "confidence": 0.804072916507721, "cells": [{"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-1 Subquery that is used as part of the rule"}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 699.452499, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE"}, {"label": "text", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "text", "bbox": {"l": 226.11877, "t": 678.1546020507812, "r": 331.77557373046875, "b": 687.45269, "coord_origin": "TOPLEFT"}, "confidence": 0.6781665682792664, "cells": [{"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}]}, "text": "DATE_MASTER D"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 222.19522, "t": 689.8526611328125, "r": 371.63684, "b": 700.1818237304688, "coord_origin": "TOPLEFT"}, "confidence": 0.7035561203956604, "cells": [{"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "D.BUSINESS_DAY = 'Y')"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.57867431640625, "t": 754.7420043945312, "r": 523.60162, "b": 764.0948486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520102739334106, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7230834960938, "t": 754.28857421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108889102935791, "cells": [{"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}]}}, {"page_no": 37, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.83726119995117, "t": 754.3733520507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9199120402336121, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2356185913086, "t": 754.7048950195312, "r": 334.42142, "b": 763.8771362304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9534041881561279, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.83892822265625, "t": 70.66429138183594, "r": 547.29156, "b": 176.9203643798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9871932864189148, "cells": [{"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.40492248535156, "t": 203.78817749023438, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9655107259750366, "cells": [{"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.95579528808594, "t": 236.6680450439453, "r": 547.29742, "b": 318.8705749511719, "coord_origin": "TOPLEFT"}, "confidence": 0.9883361458778381, "cells": [{"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.07569885253906, "t": 330.7037658691406, "r": 547.19586, "b": 365.0055236816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9833049774169922, "cells": [{"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.00733947753906, "t": 376.6234130859375, "r": 547.26068, "b": 398.8757019042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9724586009979248, "cells": [{"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.5394515991211, "t": 483.1797180175781, "r": 298.85339, "b": 499.07220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9677695631980896, "cells": [{"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.87118530273438, "t": 516.0023193359375, "r": 542.82935, "b": 585.74065, "coord_origin": "TOPLEFT"}, "confidence": 0.9858933687210083, "cells": [{"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.85508728027344, "t": 592.7136840820312, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}, "confidence": 0.9412627220153809, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.5828094482422, "t": 604.7291259765625, "r": 470.03765999999996, "b": 614.775634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9563513398170471, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.1318817138672, "t": 626.7003173828125, "r": 375.29803, "b": 636.9021606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9345581531524658, "cells": [{"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.77261352539062, "t": 643.6381225585938, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}, "confidence": 0.9286965727806091, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.6394805908203, "t": 655.4417724609375, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}, "confidence": 0.9287638664245605, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.6507568359375, "t": 667.2589111328125, "r": 276.5639343261719, "b": 677.71925, "coord_origin": "TOPLEFT"}, "confidence": 0.9430361390113831, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.71376037597656, "t": 679.4451904296875, "r": 539.58447, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9746949672698975, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 135.66419982910156, "t": 713.9166870117188, "r": 546.52435, "b": 735.738243, "coord_origin": "TOPLEFT"}, "confidence": 0.9735910892486572, "cells": [{"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 141.89248657226562, "t": 416.5281066894531, "r": 541.21985, "b": 451.1007080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9794700741767883, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.83726119995117, "t": 754.3733520507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9199120402336121, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2356185913086, "t": 754.7048950195312, "r": 334.42142, "b": 763.8771362304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9534041881561279, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.83892822265625, "t": 70.66429138183594, "r": 547.29156, "b": 176.9203643798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9871932864189148, "cells": [{"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions."}, {"label": "section_header", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.40492248535156, "t": 203.78817749023438, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9655107259750366, "cells": [{"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95579528808594, "t": 236.6680450439453, "r": 547.29742, "b": 318.8705749511719, "coord_origin": "TOPLEFT"}, "confidence": 0.9883361458778381, "cells": [{"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.07569885253906, "t": 330.7037658691406, "r": 547.19586, "b": 365.0055236816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9833049774169922, "cells": [{"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}]}, "text": "Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you."}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.00733947753906, "t": 376.6234130859375, "r": 547.26068, "b": 398.8757019042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9724586009979248, "cells": [{"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}]}, "text": "For more information and considerations about data movement in an RCAC environment, see Chapter 6, \u201cAdditional considerations\u201d on page 85."}, {"label": "section_header", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.5394515991211, "t": 483.1797180175781, "r": 298.85339, "b": 499.07220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9677695631980896, "cells": [{"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}]}, "text": "3.6 Human resources example"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87118530273438, "t": 516.0023193359375, "r": 542.82935, "b": 585.74065, "coord_origin": "TOPLEFT"}, "confidence": 0.9858933687210083, "cells": [{"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}]}, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users:"}, {"label": "list_item", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.85508728027344, "t": 592.7136840820312, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}, "confidence": 0.9412627220153809, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tax_Id information"}, {"label": "list_item", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.5828094482422, "t": 604.7291259765625, "r": 470.03765999999996, "b": 614.775634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9563513398170471, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH YEAR of the birth date of the employee (hiding the age of the employee)"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1318817138672, "t": 626.7003173828125, "r": 375.29803, "b": 636.9021606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9345581531524658, "cells": [{"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, there are four different types of users:"}, {"label": "list_item", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.77261352539062, "t": 643.6381225585938, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}, "confidence": 0.9286965727806091, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Employees"}, {"label": "list_item", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.6394805908203, "t": 655.4417724609375, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}, "confidence": 0.9287638664245605, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managers"}, {"label": "list_item", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.6507568359375, "t": 667.2589111328125, "r": 276.5639343261719, "b": 677.71925, "coord_origin": "TOPLEFT"}, "confidence": 0.9430361390113831, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human Resources Manager"}, {"label": "list_item", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.71376037597656, "t": 679.4451904296875, "r": 539.58447, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9746949672698975, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.)"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.66419982910156, "t": 713.9166870117188, "r": 546.52435, "b": 735.738243, "coord_origin": "TOPLEFT"}, "confidence": 0.9735910892486572, "cells": [{"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC in this environment."}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 141.89248657226562, "t": 416.5281066894531, "r": 541.21985, "b": 451.1007080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9794700741767883, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data."}], "body": [{"label": "text", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.83892822265625, "t": 70.66429138183594, "r": 547.29156, "b": 176.9203643798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9871932864189148, "cells": [{"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions."}, {"label": "section_header", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.40492248535156, "t": 203.78817749023438, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9655107259750366, "cells": [{"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95579528808594, "t": 236.6680450439453, "r": 547.29742, "b": 318.8705749511719, "coord_origin": "TOPLEFT"}, "confidence": 0.9883361458778381, "cells": [{"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.07569885253906, "t": 330.7037658691406, "r": 547.19586, "b": 365.0055236816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9833049774169922, "cells": [{"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}]}, "text": "Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you."}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.00733947753906, "t": 376.6234130859375, "r": 547.26068, "b": 398.8757019042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9724586009979248, "cells": [{"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}]}, "text": "For more information and considerations about data movement in an RCAC environment, see Chapter 6, \u201cAdditional considerations\u201d on page 85."}, {"label": "section_header", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.5394515991211, "t": 483.1797180175781, "r": 298.85339, "b": 499.07220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9677695631980896, "cells": [{"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}]}, "text": "3.6 Human resources example"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87118530273438, "t": 516.0023193359375, "r": 542.82935, "b": 585.74065, "coord_origin": "TOPLEFT"}, "confidence": 0.9858933687210083, "cells": [{"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}]}, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users:"}, {"label": "list_item", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.85508728027344, "t": 592.7136840820312, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}, "confidence": 0.9412627220153809, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tax_Id information"}, {"label": "list_item", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.5828094482422, "t": 604.7291259765625, "r": 470.03765999999996, "b": 614.775634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9563513398170471, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH YEAR of the birth date of the employee (hiding the age of the employee)"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1318817138672, "t": 626.7003173828125, "r": 375.29803, "b": 636.9021606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9345581531524658, "cells": [{"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, there are four different types of users:"}, {"label": "list_item", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.77261352539062, "t": 643.6381225585938, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}, "confidence": 0.9286965727806091, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Employees"}, {"label": "list_item", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.6394805908203, "t": 655.4417724609375, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}, "confidence": 0.9287638664245605, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managers"}, {"label": "list_item", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.6507568359375, "t": 667.2589111328125, "r": 276.5639343261719, "b": 677.71925, "coord_origin": "TOPLEFT"}, "confidence": 0.9430361390113831, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human Resources Manager"}, {"label": "list_item", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.71376037597656, "t": 679.4451904296875, "r": 539.58447, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9746949672698975, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.)"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.66419982910156, "t": 713.9166870117188, "r": 546.52435, "b": 735.738243, "coord_origin": "TOPLEFT"}, "confidence": 0.9735910892486572, "cells": [{"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC in this environment."}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 141.89248657226562, "t": 416.5281066894531, "r": 541.21985, "b": 451.1007080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9794700741767883, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.83726119995117, "t": 754.3733520507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9199120402336121, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2356185913086, "t": 754.7048950195312, "r": 334.42142, "b": 763.8771362304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9534041881561279, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 38, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5692443847656, "t": 754.7427978515625, "r": 523.60162, "b": 764.1153564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9611534476280212, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6176147460938, "t": 754.3688354492188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9237489104270935, "cells": [{"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.25519561767578, "t": 70.19824981689453, "r": 500.5502, "b": 83.69473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9652671813964844, "cells": [{"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7902069091797, "t": 96.61418914794922, "r": 547.24261, "b": 130.93356323242188, "coord_origin": "TOPLEFT"}, "confidence": 0.967630922794342, "cells": [{"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 137.95547485351562, "r": 510.9772300000001, "b": 172.0559844970703, "coord_origin": "TOPLEFT"}, "confidence": 0.9708675146102905, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.3125762939453, "t": 183.1469268798828, "r": 358.5176696777344, "b": 193.2852325439453, "coord_origin": "TOPLEFT"}, "confidence": 0.8427231907844543, "cells": [{"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.02276611328125, "t": 236.57188415527344, "r": 547.28821, "b": 258.8540954589844, "coord_origin": "TOPLEFT"}, "confidence": 0.931101381778717, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 136.46849060058594, "t": 270.5647277832031, "r": 460.0157775878906, "b": 280.2876892089844, "coord_origin": "TOPLEFT"}, "confidence": 0.8696954846382141, "cells": [{"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 346.67709, "b": 369.45178, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.87002563476562, "t": 383.9129638671875, "r": 545.5683, "b": 406.03265380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9212824106216431, "cells": [{"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.01937866210938, "t": 467.0556945800781, "r": 307.21844482421875, "b": 477.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9000418782234192, "cells": [{"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.10499572753906, "t": 495.4826965332031, "r": 418.56525, "b": 509.02349853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9646822810173035, "cells": [{"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9925994873047, "t": 521.9961547851562, "r": 532.93518, "b": 544.3550415039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9723882675170898, "cells": [{"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 136.8, "t": 551.5098266601562, "r": 357.905, "b": 561.7009887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9077166318893433, "cells": [{"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 151.3660430908203, "t": 567.9530639648438, "r": 313.85294, "b": 578.359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9419451951980591, "cells": [{"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 151.38209533691406, "t": 580.20458984375, "r": 242.83118, "b": 590.8248291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9090039134025574, "cells": [{"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 151.16091918945312, "t": 592.0626220703125, "r": 245.60703, "b": 602.3350219726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9277263879776001, "cells": [{"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 150.5602569580078, "t": 609.2984619140625, "r": 547.29541, "b": 631.7743530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9484594464302063, "cells": [{"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "caption", "bbox": {"l": 136.35838317871094, "t": 643.2757568359375, "r": 285.8739318847656, "b": 653.2639770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.804556131362915, "cells": [{"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 136.8, "t": 661.15802, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 38, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5692443847656, "t": 754.7427978515625, "r": 523.60162, "b": 764.1153564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9611534476280212, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 38, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6176147460938, "t": 754.3688354492188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9237489104270935, "cells": [{"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}, {"label": "section_header", "id": 2, "page_no": 38, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.25519561767578, "t": 70.19824981689453, "r": 500.5502, "b": 83.69473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9652671813964844, "cells": [{"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants"}, {"label": "text", "id": 3, "page_no": 38, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7902069091797, "t": 96.61418914794922, "r": 547.24261, "b": 130.93356323242188, "coord_origin": "TOPLEFT"}, "confidence": 0.967630922794342, "cells": [{"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: QIBM_DB_SECADM\u201d on page 9). Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 38, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 137.95547485351562, "r": 510.9772300000001, "b": 172.0559844970703, "coord_origin": "TOPLEFT"}, "confidence": 0.9708675146102905, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority."}, {"label": "caption", "id": 5, "page_no": 38, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.3125762939453, "t": 183.1469268798828, "r": 358.5176696777344, "b": 193.2852325439453, "coord_origin": "TOPLEFT"}, "confidence": 0.8427231907844543, "cells": [{"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-2 Function ID required to implement RCAC"}, {"label": "text", "id": 6, "page_no": 38, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)"}, {"label": "list_item", "id": 7, "page_no": 38, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.02276611328125, "t": 236.57188415527344, "r": 547.28821, "b": 258.8540954589844, "coord_origin": "TOPLEFT"}, "confidence": 0.931101381778717, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}]}, "text": "2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3."}, {"label": "caption", "id": 8, "page_no": 38, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.46849060058594, "t": 270.5647277832031, "r": 460.0157775878906, "b": 280.2876892089844, "coord_origin": "TOPLEFT"}, "confidence": 0.8696954846382141, "cells": [{"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC"}, {"label": "text", "id": 9, "page_no": 38, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 346.67709, "b": 369.45178, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id =\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "list_item", "id": 10, "page_no": 38, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.87002563476562, "t": 383.9129638671875, "r": 545.5683, "b": 406.03265380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9212824106216431, "cells": [{"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database."}, {"label": "caption", "id": 11, "page_no": 38, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.01937866210938, "t": 467.0556945800781, "r": 307.21844482421875, "b": 477.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9000418782234192, "cells": [{"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-6 Result of the function ID query"}, {"label": "section_header", "id": 12, "page_no": 38, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.10499572753906, "t": 495.4826965332031, "r": 418.56525, "b": 509.02349853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9646822810173035, "cells": [{"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.2 Creating group profiles for the users and their roles"}, {"label": "text", "id": 13, "page_no": 38, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9925994873047, "t": 521.9961547851562, "r": 532.93518, "b": 544.3550415039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9723882675170898, "cells": [{"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}]}, "text": "Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 38, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.8, "t": 551.5098266601562, "r": 357.905, "b": 561.7009887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9077166318893433, "cells": [{"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}]}, "text": "1. In this example, there are three group profiles:"}, {"label": "list_item", "id": 15, "page_no": 38, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 151.3660430908203, "t": 567.9530639648438, "r": 313.85294, "b": 578.359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9419451951980591, "cells": [{"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}]}, "text": "-HR (Human Resource personnel)"}, {"label": "list_item", "id": 16, "page_no": 38, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 151.38209533691406, "t": 580.20458984375, "r": 242.83118, "b": 590.8248291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9090039134025574, "cells": [{"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}]}, "text": "-MGR (Managers)"}, {"label": "list_item", "id": 17, "page_no": 38, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 151.16091918945312, "t": 592.0626220703125, "r": 245.60703, "b": 602.3350219726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9277263879776001, "cells": [{"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}]}, "text": "-EMP (Employees)"}, {"label": "text", "id": 18, "page_no": 38, "cluster": {"id": 18, "label": "text", "bbox": {"l": 150.5602569580078, "t": 609.2984619140625, "r": 547.29541, "b": 631.7743530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9484594464302063, "cells": [{"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}]}, "text": "These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles."}, {"label": "caption", "id": 19, "page_no": 38, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.35838317871094, "t": 643.2757568359375, "r": 285.8739318847656, "b": 653.2639770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.804556131362915, "cells": [{"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-4 Creating group profiles"}, {"label": "text", "id": 20, "page_no": 38, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.8, "t": 661.15802, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}]}, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')"}], "body": [{"label": "section_header", "id": 2, "page_no": 38, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.25519561767578, "t": 70.19824981689453, "r": 500.5502, "b": 83.69473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9652671813964844, "cells": [{"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants"}, {"label": "text", "id": 3, "page_no": 38, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7902069091797, "t": 96.61418914794922, "r": 547.24261, "b": 130.93356323242188, "coord_origin": "TOPLEFT"}, "confidence": 0.967630922794342, "cells": [{"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: QIBM_DB_SECADM\u201d on page 9). Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 38, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 137.95547485351562, "r": 510.9772300000001, "b": 172.0559844970703, "coord_origin": "TOPLEFT"}, "confidence": 0.9708675146102905, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority."}, {"label": "caption", "id": 5, "page_no": 38, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.3125762939453, "t": 183.1469268798828, "r": 358.5176696777344, "b": 193.2852325439453, "coord_origin": "TOPLEFT"}, "confidence": 0.8427231907844543, "cells": [{"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-2 Function ID required to implement RCAC"}, {"label": "text", "id": 6, "page_no": 38, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)"}, {"label": "list_item", "id": 7, "page_no": 38, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.02276611328125, "t": 236.57188415527344, "r": 547.28821, "b": 258.8540954589844, "coord_origin": "TOPLEFT"}, "confidence": 0.931101381778717, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}]}, "text": "2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3."}, {"label": "caption", "id": 8, "page_no": 38, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.46849060058594, "t": 270.5647277832031, "r": 460.0157775878906, "b": 280.2876892089844, "coord_origin": "TOPLEFT"}, "confidence": 0.8696954846382141, "cells": [{"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC"}, {"label": "text", "id": 9, "page_no": 38, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 346.67709, "b": 369.45178, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id =\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "list_item", "id": 10, "page_no": 38, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.87002563476562, "t": 383.9129638671875, "r": 545.5683, "b": 406.03265380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9212824106216431, "cells": [{"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database."}, {"label": "caption", "id": 11, "page_no": 38, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.01937866210938, "t": 467.0556945800781, "r": 307.21844482421875, "b": 477.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9000418782234192, "cells": [{"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-6 Result of the function ID query"}, {"label": "section_header", "id": 12, "page_no": 38, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.10499572753906, "t": 495.4826965332031, "r": 418.56525, "b": 509.02349853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9646822810173035, "cells": [{"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.2 Creating group profiles for the users and their roles"}, {"label": "text", "id": 13, "page_no": 38, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9925994873047, "t": 521.9961547851562, "r": 532.93518, "b": 544.3550415039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9723882675170898, "cells": [{"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}]}, "text": "Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 38, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.8, "t": 551.5098266601562, "r": 357.905, "b": 561.7009887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9077166318893433, "cells": [{"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}]}, "text": "1. In this example, there are three group profiles:"}, {"label": "list_item", "id": 15, "page_no": 38, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 151.3660430908203, "t": 567.9530639648438, "r": 313.85294, "b": 578.359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9419451951980591, "cells": [{"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}]}, "text": "-HR (Human Resource personnel)"}, {"label": "list_item", "id": 16, "page_no": 38, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 151.38209533691406, "t": 580.20458984375, "r": 242.83118, "b": 590.8248291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9090039134025574, "cells": [{"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}]}, "text": "-MGR (Managers)"}, {"label": "list_item", "id": 17, "page_no": 38, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 151.16091918945312, "t": 592.0626220703125, "r": 245.60703, "b": 602.3350219726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9277263879776001, "cells": [{"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}]}, "text": "-EMP (Employees)"}, {"label": "text", "id": 18, "page_no": 38, "cluster": {"id": 18, "label": "text", "bbox": {"l": 150.5602569580078, "t": 609.2984619140625, "r": 547.29541, "b": 631.7743530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9484594464302063, "cells": [{"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}]}, "text": "These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles."}, {"label": "caption", "id": 19, "page_no": 38, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.35838317871094, "t": 643.2757568359375, "r": 285.8739318847656, "b": 653.2639770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.804556131362915, "cells": [{"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-4 Creating group profiles"}, {"label": "text", "id": 20, "page_no": 38, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.8, "t": 661.15802, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}]}, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 38, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5692443847656, "t": 754.7427978515625, "r": 523.60162, "b": 764.1153564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9611534476280212, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 38, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6176147460938, "t": 754.3688354492188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9237489104270935, "cells": [{"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}]}}, {"page_no": 39, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.88653564453125, "t": 754.3186645507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9114106297492981, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27753448486328, "t": 754.6685180664062, "r": 334.42142, "b": 763.9840087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486663937568665, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.0978240966797, "t": 70.40028381347656, "r": 547.26752, "b": 117.03543853759766, "coord_origin": "TOPLEFT"}, "confidence": 0.9766601324081421, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.17131805419922, "t": 168.79916381835938, "r": 360.16098, "b": 182.6798553466797, "coord_origin": "TOPLEFT"}, "confidence": 0.961124837398529, "cells": [{"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.1033477783203, "t": 195.17257690429688, "r": 540.30652, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.953971803188324, "cells": [{"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.76841735839844, "t": 224.45919799804688, "r": 547.2157, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9609369039535522, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.413330078125, "t": 258.6246643066406, "r": 334.6294250488281, "b": 268.3210754394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6967653632164001, "cells": [{"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42640686035156, "t": 275.64599609375, "r": 406.61636, "b": 286.7776184082031, "coord_origin": "TOPLEFT"}, "confidence": 0.6531516313552856, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.4588623046875, "t": 299.9428405761719, "r": 545.10712, "b": 322.47479248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9646008610725403, "cells": [{"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "caption", "bbox": {"l": 136.30203247070312, "t": 375.2716369628906, "r": 272.9559326171875, "b": 384.7872009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.7269786596298218, "cells": [{"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.12722778320312, "t": 401.2595520019531, "r": 547.25177, "b": 423.76806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9607868790626526, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.4648895263672, "t": 435.44384765625, "r": 369.71875, "b": 444.9762268066406, "coord_origin": "TOPLEFT"}, "confidence": 0.7871338725090027, "cells": [{"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 453.31812, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 156.851318359375, "t": 134.62420654296875, "r": 533.43896, "b": 145.3269805908203, "coord_origin": "TOPLEFT"}, "confidence": 0.901655912399292, "cells": [{"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "picture", "bbox": {"l": 136.4460906982422, "t": 337.62408447265625, "r": 227.48138427734375, "b": 370.2557067871094, "coord_origin": "TOPLEFT"}, "confidence": 0.6461378931999207, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.88653564453125, "t": 754.3186645507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9114106297492981, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27753448486328, "t": 754.6685180664062, "r": 334.42142, "b": 763.9840087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486663937568665, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0978240966797, "t": 70.40028381347656, "r": 547.26752, "b": 117.03543853759766, "coord_origin": "TOPLEFT"}, "confidence": 0.9766601324081421, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS)."}, {"label": "section_header", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.17131805419922, "t": 168.79916381835938, "r": 360.16098, "b": 182.6798553466797, "coord_origin": "TOPLEFT"}, "confidence": 0.961124837398529, "cells": [{"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.3 Demonstrating data access without RCAC"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.1033477783203, "t": 195.17257690429688, "r": 540.30652, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.953971803188324, "cells": [{"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.76841735839844, "t": 224.45919799804688, "r": 547.2157, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9609369039535522, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table."}, {"label": "caption", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.413330078125, "t": 258.6246643066406, "r": 334.6294250488281, "b": 268.3210754394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6967653632164001, "cells": [{"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-5 Counting the number of employees"}, {"label": "text", "id": 7, "page_no": 39, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42640686035156, "t": 275.64599609375, "r": 406.61636, "b": 286.7776184082031, "coord_origin": "TOPLEFT"}, "confidence": 0.6531516313552856, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "text", "id": 8, "page_no": 39, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.4588623046875, "t": 299.9428405761719, "r": 545.10712, "b": 322.47479248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9646008610725403, "cells": [{"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of the company."}, {"label": "caption", "id": 9, "page_no": 39, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.30203247070312, "t": 375.2716369628906, "r": 272.9559326171875, "b": 384.7872009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.7269786596298218, "cells": [{"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-7 Number of employees"}, {"label": "list_item", "id": 10, "page_no": 39, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.12722778320312, "t": 401.2595520019531, "r": 547.25177, "b": 423.76806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9607868790626526, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}]}, "text": "2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are."}, {"label": "caption", "id": 11, "page_no": 39, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.4648895263672, "t": 435.44384765625, "r": 369.71875, "b": 444.9762268066406, "coord_origin": "TOPLEFT"}, "confidence": 0.7871338725090027, "cells": [{"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-6 Displaying the information of the Employees"}, {"label": "text", "id": 12, "page_no": 39, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 453.31812, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 13, "page_no": 39, "cluster": {"id": 13, "label": "text", "bbox": {"l": 156.851318359375, "t": 134.62420654296875, "r": 533.43896, "b": 145.3269805908203, "coord_origin": "TOPLEFT"}, "confidence": 0.901655912399292, "cells": [{"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile."}, {"label": "picture", "id": 14, "page_no": 39, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 136.4460906982422, "t": 337.62408447265625, "r": 227.48138427734375, "b": 370.2557067871094, "coord_origin": "TOPLEFT"}, "confidence": 0.6461378931999207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0978240966797, "t": 70.40028381347656, "r": 547.26752, "b": 117.03543853759766, "coord_origin": "TOPLEFT"}, "confidence": 0.9766601324081421, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS)."}, {"label": "section_header", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.17131805419922, "t": 168.79916381835938, "r": 360.16098, "b": 182.6798553466797, "coord_origin": "TOPLEFT"}, "confidence": 0.961124837398529, "cells": [{"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.3 Demonstrating data access without RCAC"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.1033477783203, "t": 195.17257690429688, "r": 540.30652, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.953971803188324, "cells": [{"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.76841735839844, "t": 224.45919799804688, "r": 547.2157, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9609369039535522, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table."}, {"label": "caption", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.413330078125, "t": 258.6246643066406, "r": 334.6294250488281, "b": 268.3210754394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6967653632164001, "cells": [{"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-5 Counting the number of employees"}, {"label": "text", "id": 7, "page_no": 39, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42640686035156, "t": 275.64599609375, "r": 406.61636, "b": 286.7776184082031, "coord_origin": "TOPLEFT"}, "confidence": 0.6531516313552856, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "text", "id": 8, "page_no": 39, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.4588623046875, "t": 299.9428405761719, "r": 545.10712, "b": 322.47479248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9646008610725403, "cells": [{"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of the company."}, {"label": "caption", "id": 9, "page_no": 39, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.30203247070312, "t": 375.2716369628906, "r": 272.9559326171875, "b": 384.7872009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.7269786596298218, "cells": [{"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-7 Number of employees"}, {"label": "list_item", "id": 10, "page_no": 39, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.12722778320312, "t": 401.2595520019531, "r": 547.25177, "b": 423.76806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9607868790626526, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}]}, "text": "2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are."}, {"label": "caption", "id": 11, "page_no": 39, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.4648895263672, "t": 435.44384765625, "r": 369.71875, "b": 444.9762268066406, "coord_origin": "TOPLEFT"}, "confidence": 0.7871338725090027, "cells": [{"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-6 Displaying the information of the Employees"}, {"label": "text", "id": 12, "page_no": 39, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 453.31812, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 13, "page_no": 39, "cluster": {"id": 13, "label": "text", "bbox": {"l": 156.851318359375, "t": 134.62420654296875, "r": 533.43896, "b": 145.3269805908203, "coord_origin": "TOPLEFT"}, "confidence": 0.901655912399292, "cells": [{"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile."}, {"label": "picture", "id": 14, "page_no": 39, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 136.4460906982422, "t": 337.62408447265625, "r": 227.48138427734375, "b": 370.2557067871094, "coord_origin": "TOPLEFT"}, "confidence": 0.6461378931999207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.88653564453125, "t": 754.3186645507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9114106297492981, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27753448486328, "t": 754.6685180664062, "r": 334.42142, "b": 763.9840087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486663937568665, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 40, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.6938781738281, "t": 754.8302612304688, "r": 523.60162, "b": 764.0167236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9586459994316101, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7025146484375, "t": 754.375244140625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9186720848083496, "cells": [{"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 150.51434326171875, "t": 70.7142562866211, "r": 356.2522, "b": 81.25257873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.7506248354911804, "cells": [{"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.24310302734375, "t": 470.6240539550781, "r": 276.3370361328125, "b": 479.94299, "coord_origin": "TOPLEFT"}, "confidence": 0.927272617816925, "cells": [{"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.31729888916016, "t": 499.6622314453125, "r": 339.95895, "b": 513.0746459960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9666332602500916, "cells": [{"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.47174072265625, "t": 526.1157836914062, "r": 484.33429, "b": 536.0692749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.920616090297699, "cells": [{"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.80002, "t": 542.7721557617188, "r": 519.3288, "b": 565.2183837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9658254981040955, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.23526000976562, "t": 572.105712890625, "r": 392.51511, "b": 582.262939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449333548545837, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.32948303222656, "t": 584.3190307617188, "r": 484.94476000000003, "b": 594.1929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476761221885681, "cells": [{"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.46128845214844, "t": 596.0510864257812, "r": 371.57324, "b": 606.2974243164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9385150671005249, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.29678344726562, "t": 608.191162109375, "r": 415.18304, "b": 618.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9464589953422546, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 40, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6938781738281, "t": 754.8302612304688, "r": 523.60162, "b": 764.0167236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9586459994316101, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 40, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7025146484375, "t": 754.375244140625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9186720848083496, "cells": [{"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}, {"label": "section_header", "id": 2, "page_no": 40, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 150.51434326171875, "t": 70.7142562866211, "r": 356.2522, "b": 81.25257873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.7506248354911804, "cells": [{"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-8."}, {"label": "caption", "id": 3, "page_no": 40, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.24310302734375, "t": 470.6240539550781, "r": 276.3370361328125, "b": 479.94299, "coord_origin": "TOPLEFT"}, "confidence": 0.927272617816925, "cells": [{"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-8 List of employees without RCAC enabled"}, {"label": "section_header", "id": 4, "page_no": 40, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.31729888916016, "t": 499.6622314453125, "r": 339.95895, "b": 513.0746459960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9666332602500916, "cells": [{"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.4 Defining and creating row permissions"}, {"label": "text", "id": 5, "page_no": 40, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.47174072265625, "t": 526.1157836914062, "r": 484.33429, "b": 536.0692749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.920616090297699, "cells": [{"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}]}, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:"}, {"label": "list_item", "id": 6, "page_no": 40, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80002, "t": 542.7721557617188, "r": 519.3288, "b": 565.2183837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9658254981040955, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by defining a row permission. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 7, "page_no": 40, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.23526000976562, "t": 572.105712890625, "r": 392.51511, "b": 582.262939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449333548545837, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources employees can see all the rows."}, {"label": "list_item", "id": 8, "page_no": 40, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.32948303222656, "t": 584.3190307617188, "r": 484.94476000000003, "b": 594.1929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476761221885681, "cells": [{"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see only information for the employees that they manage."}, {"label": "list_item", "id": 9, "page_no": 40, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.46128845214844, "t": 596.0510864257812, "r": 371.57324, "b": 606.2974243164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9385150671005249, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own information."}, {"label": "list_item", "id": 10, "page_no": 40, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.29678344726562, "t": 608.191162109375, "r": 415.18304, "b": 618.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9464589953422546, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}]}, "text": "-Consultants are not allowed to see any rows in the table."}], "body": [{"label": "section_header", "id": 2, "page_no": 40, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 150.51434326171875, "t": 70.7142562866211, "r": 356.2522, "b": 81.25257873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.7506248354911804, "cells": [{"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-8."}, {"label": "caption", "id": 3, "page_no": 40, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.24310302734375, "t": 470.6240539550781, "r": 276.3370361328125, "b": 479.94299, "coord_origin": "TOPLEFT"}, "confidence": 0.927272617816925, "cells": [{"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-8 List of employees without RCAC enabled"}, {"label": "section_header", "id": 4, "page_no": 40, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.31729888916016, "t": 499.6622314453125, "r": 339.95895, "b": 513.0746459960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9666332602500916, "cells": [{"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.4 Defining and creating row permissions"}, {"label": "text", "id": 5, "page_no": 40, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.47174072265625, "t": 526.1157836914062, "r": 484.33429, "b": 536.0692749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.920616090297699, "cells": [{"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}]}, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:"}, {"label": "list_item", "id": 6, "page_no": 40, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80002, "t": 542.7721557617188, "r": 519.3288, "b": 565.2183837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9658254981040955, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by defining a row permission. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 7, "page_no": 40, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.23526000976562, "t": 572.105712890625, "r": 392.51511, "b": 582.262939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449333548545837, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources employees can see all the rows."}, {"label": "list_item", "id": 8, "page_no": 40, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.32948303222656, "t": 584.3190307617188, "r": 484.94476000000003, "b": 594.1929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476761221885681, "cells": [{"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see only information for the employees that they manage."}, {"label": "list_item", "id": 9, "page_no": 40, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.46128845214844, "t": 596.0510864257812, "r": 371.57324, "b": 606.2974243164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9385150671005249, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own information."}, {"label": "list_item", "id": 10, "page_no": 40, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.29678344726562, "t": 608.191162109375, "r": 415.18304, "b": 618.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9464589953422546, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}]}, "text": "-Consultants are not allowed to see any rows in the table."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 40, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6938781738281, "t": 754.8302612304688, "r": 523.60162, "b": 764.0167236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9586459994316101, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 40, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7025146484375, "t": 754.375244140625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9186720848083496, "cells": [{"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}]}}, {"page_no": 41, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85331726074219, "t": 754.3814086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9175847768783569, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32594299316406, "t": 754.67138671875, "r": 334.42142, "b": 763.926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9555695652961731, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 150.2159423828125, "t": 70.65572357177734, "r": 538.5603, "b": 81.11334991455078, "coord_origin": "TOPLEFT"}, "confidence": 0.9370454549789429, "cells": [{"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3914031982422, "t": 92.4392318725586, "r": 383.7792053222656, "b": 102.14237213134766, "coord_origin": "TOPLEFT"}, "confidence": 0.8971781134605408, "cells": [{"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "code", "bbox": {"l": 134.622802734375, "t": 105.0101089477539, "r": 547.7505493164062, "b": 244.519775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7303169369697571, "cells": [{"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.9988250732422, "t": 253.1900634765625, "r": 539.85822, "b": 287.8277282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9342305064201355, "cells": [{"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 64.43289947509766, "t": 491.4513244628906, "r": 331.18115234375, "b": 500.79241943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436566233634949, "cells": [{"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.18317413330078, "t": 520.4345703125, "r": 327.40588, "b": 533.9813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9629243612289429, "cells": [{"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.35951232910156, "t": 546.794189453125, "r": 526.41431, "b": 568.794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.968765139579773, "cells": [{"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 136.79542541503906, "t": 575.26025390625, "r": 538.78564, "b": 597.7650756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9648330807685852, "cells": [{"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.26760864257812, "t": 604.6339721679688, "r": 467.65625, "b": 614.5850830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502057433128357, "cells": [{"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.2598114013672, "t": 621.2564086914062, "r": 375.38675, "b": 631.7196044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9498502016067505, "cells": [{"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 151.43798828125, "t": 638.585205078125, "r": 547.25653, "b": 648.8189086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9482884407043457, "cells": [{"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.7313232421875, "t": 655.2977905273438, "r": 530.06067, "b": 665.58984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9218307137489319, "cells": [{"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "caption", "bbox": {"l": 136.27670288085938, "t": 677.1241455078125, "r": 403.9977722167969, "b": 686.8948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098079204559326, "cells": [{"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 136.8, "t": 695.418121, "r": 416.63611, "b": 728.192497, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "picture", "bbox": {"l": 64.00577545166016, "t": 302.1222839355469, "r": 547.3966674804688, "b": 489.23321533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799203276634216, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 41, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85331726074219, "t": 754.3814086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9175847768783569, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 41, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32594299316406, "t": 754.67138671875, "r": 334.42142, "b": 763.926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9555695652961731, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 41, "cluster": {"id": 2, "label": "text", "bbox": {"l": 150.2159423828125, "t": 70.65572357177734, "r": 538.5603, "b": 81.11334991455078, "coord_origin": "TOPLEFT"}, "confidence": 0.9370454549789429, "cells": [{"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7."}, {"label": "caption", "id": 3, "page_no": 41, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3914031982422, "t": 92.4392318725586, "r": 383.7792053222656, "b": 102.14237213134766, "coord_origin": "TOPLEFT"}, "confidence": 0.8971781134605408, "cells": [{"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-7 Creating a permission for the EMPLOYEE table"}, {"label": "code", "id": 4, "page_no": 41, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.622802734375, "t": 105.0101089477539, "r": 547.7505493164062, "b": 244.519775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7303169369697571, "cells": [{"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ;"}, {"label": "list_item", "id": 5, "page_no": 41, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.9988250732422, "t": 253.1900634765625, "r": 539.85822, "b": 287.8277282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9342305064201355, "cells": [{"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16."}, {"label": "caption", "id": 6, "page_no": 41, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.43289947509766, "t": 491.4513244628906, "r": 331.18115234375, "b": 500.79241943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436566233634949, "cells": [{"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-9 Row permissions that are shown in System i Navigator"}, {"label": "section_header", "id": 7, "page_no": 41, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.18317413330078, "t": 520.4345703125, "r": 327.40588, "b": 533.9813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9629243612289429, "cells": [{"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.5 Defining and creating column masks"}, {"label": "text", "id": 8, "page_no": 41, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.35951232910156, "t": 546.794189453125, "r": 526.41431, "b": 568.794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.968765139579773, "cells": [{"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Define the different masks for the columns that are sensitive by completing the following steps:"}, {"label": "list_item", "id": 9, "page_no": 41, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.79542541503906, "t": 575.26025390625, "r": 538.78564, "b": 597.7650756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9648330807685852, "cells": [{"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 10, "page_no": 41, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.26760864257812, "t": 604.6339721679688, "r": 467.65625, "b": 614.5850830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502057433128357, "cells": [{"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the entire date of birth of the employees."}, {"label": "list_item", "id": 11, "page_no": 41, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.2598114013672, "t": 621.2564086914062, "r": 375.38675, "b": 631.7196044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9498502016067505, "cells": [{"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own date of birth."}, {"label": "list_item", "id": 12, "page_no": 41, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.43798828125, "t": 638.585205078125, "r": 547.25653, "b": 648.8189086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9482884407043457, "cells": [{"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see the date of birth of their employees masked with YEAR being 9999."}, {"label": "text", "id": 13, "page_no": 41, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.7313232421875, "t": 655.2977905273438, "r": 530.06067, "b": 665.58984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9218307137489319, "cells": [{"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8."}, {"label": "caption", "id": 14, "page_no": 41, "cluster": {"id": 14, "label": "caption", "bbox": {"l": 136.27670288085938, "t": 677.1241455078125, "r": 403.9977722167969, "b": 686.8948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098079204559326, "cells": [{"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column"}, {"label": "text", "id": 15, "page_no": 41, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.8, "t": 695.418121, "r": 416.63611, "b": 728.192497, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH"}, {"label": "picture", "id": 16, "page_no": 41, "cluster": {"id": 16, "label": "picture", "bbox": {"l": 64.00577545166016, "t": 302.1222839355469, "r": 547.3966674804688, "b": 489.23321533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799203276634216, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 41, "cluster": {"id": 2, "label": "text", "bbox": {"l": 150.2159423828125, "t": 70.65572357177734, "r": 538.5603, "b": 81.11334991455078, "coord_origin": "TOPLEFT"}, "confidence": 0.9370454549789429, "cells": [{"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7."}, {"label": "caption", "id": 3, "page_no": 41, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3914031982422, "t": 92.4392318725586, "r": 383.7792053222656, "b": 102.14237213134766, "coord_origin": "TOPLEFT"}, "confidence": 0.8971781134605408, "cells": [{"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-7 Creating a permission for the EMPLOYEE table"}, {"label": "code", "id": 4, "page_no": 41, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.622802734375, "t": 105.0101089477539, "r": 547.7505493164062, "b": 244.519775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7303169369697571, "cells": [{"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ;"}, {"label": "list_item", "id": 5, "page_no": 41, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.9988250732422, "t": 253.1900634765625, "r": 539.85822, "b": 287.8277282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9342305064201355, "cells": [{"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16."}, {"label": "caption", "id": 6, "page_no": 41, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.43289947509766, "t": 491.4513244628906, "r": 331.18115234375, "b": 500.79241943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436566233634949, "cells": [{"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-9 Row permissions that are shown in System i Navigator"}, {"label": "section_header", "id": 7, "page_no": 41, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.18317413330078, "t": 520.4345703125, "r": 327.40588, "b": 533.9813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9629243612289429, "cells": [{"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.5 Defining and creating column masks"}, {"label": "text", "id": 8, "page_no": 41, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.35951232910156, "t": 546.794189453125, "r": 526.41431, "b": 568.794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.968765139579773, "cells": [{"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Define the different masks for the columns that are sensitive by completing the following steps:"}, {"label": "list_item", "id": 9, "page_no": 41, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.79542541503906, "t": 575.26025390625, "r": 538.78564, "b": 597.7650756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9648330807685852, "cells": [{"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 10, "page_no": 41, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.26760864257812, "t": 604.6339721679688, "r": 467.65625, "b": 614.5850830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502057433128357, "cells": [{"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the entire date of birth of the employees."}, {"label": "list_item", "id": 11, "page_no": 41, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.2598114013672, "t": 621.2564086914062, "r": 375.38675, "b": 631.7196044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9498502016067505, "cells": [{"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own date of birth."}, {"label": "list_item", "id": 12, "page_no": 41, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.43798828125, "t": 638.585205078125, "r": 547.25653, "b": 648.8189086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9482884407043457, "cells": [{"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see the date of birth of their employees masked with YEAR being 9999."}, {"label": "text", "id": 13, "page_no": 41, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.7313232421875, "t": 655.2977905273438, "r": 530.06067, "b": 665.58984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9218307137489319, "cells": [{"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8."}, {"label": "caption", "id": 14, "page_no": 41, "cluster": {"id": 14, "label": "caption", "bbox": {"l": 136.27670288085938, "t": 677.1241455078125, "r": 403.9977722167969, "b": 686.8948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098079204559326, "cells": [{"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column"}, {"label": "text", "id": 15, "page_no": 41, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.8, "t": 695.418121, "r": 416.63611, "b": 728.192497, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH"}, {"label": "picture", "id": 16, "page_no": 41, "cluster": {"id": 16, "label": "picture", "bbox": {"l": 64.00577545166016, "t": 302.1222839355469, "r": 547.3966674804688, "b": 489.23321533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799203276634216, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 41, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85331726074219, "t": 754.3814086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9175847768783569, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 41, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32594299316406, "t": 754.67138671875, "r": 334.42142, "b": 763.926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9555695652961731, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 42, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 42, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 42, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 42, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 42, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 42, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 42, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 42, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 42, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 42, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 42, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 42, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 42, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 42, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 42, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 42, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 42, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 42, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 42, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 42, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 42, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 42, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 42, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 42, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 42, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 43, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 43, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 43, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 43, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 43, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 43, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 43, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 43, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 43, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 43, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 43, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 43, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 43, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 43, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 43, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 43, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 43, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 43, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 43, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 43, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 43, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 43, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 43, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 43, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 43, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 43, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 43, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 43, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 43, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 43, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 43, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 44, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.54718017578125, "t": 754.7352905273438, "r": 523.60162, "b": 764.0706787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.956475555896759, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6342163085938, "t": 754.2794799804688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9159544110298157, "cells": [{"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.99427795410156, "t": 70.56324005126953, "r": 531.19666, "b": 92.8935775756836, "coord_origin": "TOPLEFT"}, "confidence": 0.9691283106803894, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.06971740722656, "t": 340.4026794433594, "r": 356.7056579589844, "b": 350.1046142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9446441531181335, "cells": [{"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.2018051147461, "t": 368.99359130859375, "r": 339.83972, "b": 382.4454650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.9611930847167969, "cells": [{"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.7947235107422, "t": 395.46563720703125, "r": 547.25952, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9570380449295044, "cells": [{"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.66810607910156, "t": 424.56658935546875, "r": 544.10724, "b": 459.0443115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9760121703147888, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.4961700439453, "t": 470.568359375, "r": 279.97296142578125, "b": 479.7723693847656, "coord_origin": "TOPLEFT"}, "confidence": 0.7746148705482483, "cells": [{"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.306396484375, "t": 487.3329772949219, "r": 406.61636, "b": 498.07952880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6185739040374756, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.95774841308594, "t": 511.2691955566406, "r": 511.53809, "b": 533.8543701171875, "coord_origin": "TOPLEFT"}, "confidence": 0.947382390499115, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.27264404296875, "t": 585.9351196289062, "r": 309.68194580078125, "b": 595.4780883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9036827683448792, "cells": [{"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 136.16087341308594, "t": 611.9103393554688, "r": 540.72186, "b": 646.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9704285860061646, "cells": [{"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 136.1033172607422, "t": 697.8408813476562, "r": 340.1351318359375, "b": 707.6279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9447281956672668, "cells": [{"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 135.93521118164062, "t": 106.84259796142578, "r": 547.290771484375, "b": 337.8546142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9848360419273376, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 137.4537811279297, "t": 661.5006713867188, "r": 220.26930236816406, "b": 693.4776611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8302825689315796, "cells": []}, {"id": 15, "label": "picture", "bbox": {"l": 137.24044799804688, "t": 548.8035888671875, "r": 225.1509246826172, "b": 582.4473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.7854686975479126, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 44, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.54718017578125, "t": 754.7352905273438, "r": 523.60162, "b": 764.0706787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.956475555896759, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 44, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6342163085938, "t": 754.2794799804688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9159544110298157, "cells": [{"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}, {"label": "list_item", "id": 2, "page_no": 44, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.99427795410156, "t": 70.56324005126953, "r": 531.19666, "b": 92.8935775756836, "coord_origin": "TOPLEFT"}, "confidence": 0.9691283106803894, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked."}, {"label": "caption", "id": 3, "page_no": 44, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06971740722656, "t": 340.4026794433594, "r": 356.7056579589844, "b": 350.1046142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9446441531181335, "cells": [{"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table"}, {"label": "section_header", "id": 4, "page_no": 44, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.2018051147461, "t": 368.99359130859375, "r": 339.83972, "b": 382.4454650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.9611930847167969, "cells": [{"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.7 Demonstrating data access with RCAC"}, {"label": "text", "id": 5, "page_no": 44, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.7947235107422, "t": 395.46563720703125, "r": 547.25952, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9570380449295044, "cells": [{"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to start testing RCAC with the four different users. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 44, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.66810607910156, "t": 424.56658935546875, "r": 544.10724, "b": 459.0443115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9760121703147888, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24)."}, {"label": "caption", "id": 7, "page_no": 44, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.4961700439453, "t": 470.568359375, "r": 279.97296142578125, "b": 479.7723693847656, "coord_origin": "TOPLEFT"}, "confidence": 0.7746148705482483, "cells": [{"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-11 EMPLOYEES count"}, {"label": "text", "id": 8, "page_no": 44, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.306396484375, "t": 487.3329772949219, "r": 406.61636, "b": 498.07952880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6185739040374756, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "list_item", "id": 9, "page_no": 44, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.95774841308594, "t": 511.2691955566406, "r": 511.53809, "b": 533.8543701171875, "coord_origin": "TOPLEFT"}, "confidence": 0.947382390499115, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}]}, "text": "2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees)."}, {"label": "caption", "id": 10, "page_no": 44, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.27264404296875, "t": 585.9351196289062, "r": 309.68194580078125, "b": 595.4780883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9036827683448792, "cells": [{"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-13 Count of EMPLOYEES by HR"}, {"label": "list_item", "id": 11, "page_no": 44, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 136.16087341308594, "t": 611.9103393554688, "r": 540.72186, "b": 646.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9704285860061646, "cells": [{"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6."}, {"label": "caption", "id": 12, "page_no": 44, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.1033172607422, "t": 697.8408813476562, "r": 340.1351318359375, "b": 707.6279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9447281956672668, "cells": [{"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-14 Count of EMPLOYEES by a manager"}, {"label": "picture", "id": 13, "page_no": 44, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 135.93521118164062, "t": 106.84259796142578, "r": 547.290771484375, "b": 337.8546142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9848360419273376, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 44, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 137.4537811279297, "t": 661.5006713867188, "r": 220.26930236816406, "b": 693.4776611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8302825689315796, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 15, "page_no": 44, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 137.24044799804688, "t": 548.8035888671875, "r": 225.1509246826172, "b": 582.4473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.7854686975479126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 44, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.99427795410156, "t": 70.56324005126953, "r": 531.19666, "b": 92.8935775756836, "coord_origin": "TOPLEFT"}, "confidence": 0.9691283106803894, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked."}, {"label": "caption", "id": 3, "page_no": 44, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06971740722656, "t": 340.4026794433594, "r": 356.7056579589844, "b": 350.1046142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9446441531181335, "cells": [{"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table"}, {"label": "section_header", "id": 4, "page_no": 44, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.2018051147461, "t": 368.99359130859375, "r": 339.83972, "b": 382.4454650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.9611930847167969, "cells": [{"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.7 Demonstrating data access with RCAC"}, {"label": "text", "id": 5, "page_no": 44, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.7947235107422, "t": 395.46563720703125, "r": 547.25952, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9570380449295044, "cells": [{"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to start testing RCAC with the four different users. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 44, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.66810607910156, "t": 424.56658935546875, "r": 544.10724, "b": 459.0443115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9760121703147888, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24)."}, {"label": "caption", "id": 7, "page_no": 44, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.4961700439453, "t": 470.568359375, "r": 279.97296142578125, "b": 479.7723693847656, "coord_origin": "TOPLEFT"}, "confidence": 0.7746148705482483, "cells": [{"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-11 EMPLOYEES count"}, {"label": "text", "id": 8, "page_no": 44, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.306396484375, "t": 487.3329772949219, "r": 406.61636, "b": 498.07952880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6185739040374756, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "list_item", "id": 9, "page_no": 44, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.95774841308594, "t": 511.2691955566406, "r": 511.53809, "b": 533.8543701171875, "coord_origin": "TOPLEFT"}, "confidence": 0.947382390499115, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}]}, "text": "2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees)."}, {"label": "caption", "id": 10, "page_no": 44, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.27264404296875, "t": 585.9351196289062, "r": 309.68194580078125, "b": 595.4780883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9036827683448792, "cells": [{"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-13 Count of EMPLOYEES by HR"}, {"label": "list_item", "id": 11, "page_no": 44, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 136.16087341308594, "t": 611.9103393554688, "r": 540.72186, "b": 646.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9704285860061646, "cells": [{"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6."}, {"label": "caption", "id": 12, "page_no": 44, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.1033172607422, "t": 697.8408813476562, "r": 340.1351318359375, "b": 707.6279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9447281956672668, "cells": [{"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-14 Count of EMPLOYEES by a manager"}, {"label": "picture", "id": 13, "page_no": 44, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 135.93521118164062, "t": 106.84259796142578, "r": 547.290771484375, "b": 337.8546142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9848360419273376, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 44, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 137.4537811279297, "t": 661.5006713867188, "r": 220.26930236816406, "b": 693.4776611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8302825689315796, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 15, "page_no": 44, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 137.24044799804688, "t": 548.8035888671875, "r": 225.1509246826172, "b": 582.4473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.7854686975479126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 44, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.54718017578125, "t": 754.7352905273438, "r": 523.60162, "b": 764.0706787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.956475555896759, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 44, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6342163085938, "t": 754.2794799804688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9159544110298157, "cells": [{"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}]}}, {"page_no": 45, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.19510650634766, "t": 754.4282836914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9150190949440002, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.36414337158203, "t": 754.7095947265625, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484574198722839, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.79859924316406, "t": 70.64143371582031, "r": 547.21362, "b": 93.16808319091797, "coord_origin": "TOPLEFT"}, "confidence": 0.9721304774284363, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.97097778320312, "t": 144.56964111328125, "r": 347.41455078125, "b": 154.1024932861328, "coord_origin": "TOPLEFT"}, "confidence": 0.8800588846206665, "cells": [{"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.351318359375, "t": 170.72369384765625, "r": 543.98859, "b": 204.88552856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9731000661849976, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.17999267578125, "t": 256.5564880371094, "r": 345.2605285644531, "b": 265.80084228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.845527708530426, "cells": [{"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.62869262695312, "t": 282.65179443359375, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}, "confidence": 0.8937364816665649, "cells": [{"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.16029357910156, "t": 299.3460693359375, "r": 544.28741, "b": 333.59893798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9715136885643005, "cells": [{"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 136.2924041748047, "t": 345.3439636230469, "r": 396.5692138671875, "b": 354.603, "coord_origin": "TOPLEFT"}, "confidence": 0.7857663035392761, "cells": [{"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "code", "bbox": {"l": 134.74452209472656, "t": 356.92291259765625, "r": 548.0267333984375, "b": 461.7205810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.6226056814193726, "cells": [{"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 136.77099609375, "t": 107.66394805908203, "r": 225.8523406982422, "b": 140.4359130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.721601665019989, "cells": []}, {"id": 11, "label": "picture", "bbox": {"l": 136.36477661132812, "t": 219.7147674560547, "r": 228.86305236816406, "b": 252.31942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.6357523798942566, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 45, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19510650634766, "t": 754.4282836914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9150190949440002, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 45, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36414337158203, "t": 754.7095947265625, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484574198722839, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 45, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.79859924316406, "t": 70.64143371582031, "r": 547.21362, "b": 93.16808319091797, "coord_origin": "TOPLEFT"}, "confidence": 0.9721304774284363, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row)."}, {"label": "caption", "id": 3, "page_no": 45, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.97097778320312, "t": 144.56964111328125, "r": 347.41455078125, "b": 154.1024932861328, "coord_origin": "TOPLEFT"}, "confidence": 0.8800588846206665, "cells": [{"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-15 Count of EMPLOYEES by an employee"}, {"label": "list_item", "id": 4, "page_no": 45, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.351318359375, "t": 170.72369384765625, "r": 543.98859, "b": 204.88552856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9731000661849976, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all."}, {"label": "caption", "id": 5, "page_no": 45, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17999267578125, "t": 256.5564880371094, "r": 345.2605285644531, "b": 265.80084228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.845527708530426, "cells": [{"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-16 Count of EMPLOYEES by a consultant"}, {"label": "text", "id": 6, "page_no": 45, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.62869262695312, "t": 282.65179443359375, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}, "confidence": 0.8937364816665649, "cells": [{"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}]}, "text": "Does the result make sense? Yes, it does because RCAC is enabled."}, {"label": "list_item", "id": 7, "page_no": 45, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.16029357910156, "t": 299.3460693359375, "r": 544.28741, "b": 333.59893798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9715136885643005, "cells": [{"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12."}, {"label": "caption", "id": 8, "page_no": 45, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.2924041748047, "t": 345.3439636230469, "r": 396.5692138671875, "b": 354.603, "coord_origin": "TOPLEFT"}, "confidence": 0.7857663035392761, "cells": [{"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-12 SELECT statement to test with the different users"}, {"label": "code", "id": 9, "page_no": 45, "cluster": {"id": 9, "label": "code", "bbox": {"l": 134.74452209472656, "t": 356.92291259765625, "r": 548.0267333984375, "b": 461.7205810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.6226056814193726, "cells": [{"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "picture", "id": 10, "page_no": 45, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.77099609375, "t": 107.66394805908203, "r": 225.8523406982422, "b": 140.4359130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.721601665019989, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 45, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.36477661132812, "t": 219.7147674560547, "r": 228.86305236816406, "b": 252.31942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.6357523798942566, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 45, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.79859924316406, "t": 70.64143371582031, "r": 547.21362, "b": 93.16808319091797, "coord_origin": "TOPLEFT"}, "confidence": 0.9721304774284363, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row)."}, {"label": "caption", "id": 3, "page_no": 45, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.97097778320312, "t": 144.56964111328125, "r": 347.41455078125, "b": 154.1024932861328, "coord_origin": "TOPLEFT"}, "confidence": 0.8800588846206665, "cells": [{"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-15 Count of EMPLOYEES by an employee"}, {"label": "list_item", "id": 4, "page_no": 45, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.351318359375, "t": 170.72369384765625, "r": 543.98859, "b": 204.88552856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9731000661849976, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all."}, {"label": "caption", "id": 5, "page_no": 45, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17999267578125, "t": 256.5564880371094, "r": 345.2605285644531, "b": 265.80084228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.845527708530426, "cells": [{"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-16 Count of EMPLOYEES by a consultant"}, {"label": "text", "id": 6, "page_no": 45, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.62869262695312, "t": 282.65179443359375, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}, "confidence": 0.8937364816665649, "cells": [{"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}]}, "text": "Does the result make sense? Yes, it does because RCAC is enabled."}, {"label": "list_item", "id": 7, "page_no": 45, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.16029357910156, "t": 299.3460693359375, "r": 544.28741, "b": 333.59893798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9715136885643005, "cells": [{"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12."}, {"label": "caption", "id": 8, "page_no": 45, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.2924041748047, "t": 345.3439636230469, "r": 396.5692138671875, "b": 354.603, "coord_origin": "TOPLEFT"}, "confidence": 0.7857663035392761, "cells": [{"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-12 SELECT statement to test with the different users"}, {"label": "code", "id": 9, "page_no": 45, "cluster": {"id": 9, "label": "code", "bbox": {"l": 134.74452209472656, "t": 356.92291259765625, "r": 548.0267333984375, "b": 461.7205810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.6226056814193726, "cells": [{"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "picture", "id": 10, "page_no": 45, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.77099609375, "t": 107.66394805908203, "r": 225.8523406982422, "b": 140.4359130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.721601665019989, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 45, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.36477661132812, "t": 219.7147674560547, "r": 228.86305236816406, "b": 252.31942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.6357523798942566, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 45, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19510650634766, "t": 754.4282836914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9150190949440002, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 45, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36414337158203, "t": 754.7095947265625, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484574198722839, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 46, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.6293640136719, "t": 754.7607421875, "r": 523.60162, "b": 764.101806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9559109210968018, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7171630859375, "t": 754.2883911132812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9095556735992432, "cells": [{"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.29183959960938, "t": 70.52925872802734, "r": 547.15259, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9437284469604492, "cells": [{"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.41815185546875, "t": 486.6556091308594, "r": 338.3864440917969, "b": 495.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8823539018630981, "cells": [{"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.21075439453125, "t": 512.54150390625, "r": 546.0484, "b": 535.139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411396384239197, "cells": [{"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.57685852050781, "t": 617.3950805664062, "r": 279.62469482421875, "b": 626.7601318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9109888672828674, "cells": [{"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.3648223876953, "t": 643.3563842773438, "r": 518.90057, "b": 665.8402709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9563440084457397, "cells": [{"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.505126953125, "t": 705.2019653320312, "r": 295.1390380859375, "b": 714.663002, "coord_origin": "TOPLEFT"}, "confidence": 0.9352152943611145, "cells": [{"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 46, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6293640136719, "t": 754.7607421875, "r": 523.60162, "b": 764.101806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9559109210968018, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 46, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7171630859375, "t": 754.2883911132812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9095556735992432, "cells": [{"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}, {"label": "list_item", "id": 2, "page_no": 46, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.29183959960938, "t": 70.52925872802734, "r": 547.15259, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9437284469604492, "cells": [{"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns."}, {"label": "caption", "id": 3, "page_no": 46, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.41815185546875, "t": 486.6556091308594, "r": 338.3864440917969, "b": 495.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8823539018630981, "cells": [{"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-17 SQL statement result by Human Resources user profile"}, {"label": "list_item", "id": 4, "page_no": 46, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.21075439453125, "t": 512.54150390625, "r": 546.0484, "b": 535.139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411396384239197, "cells": [{"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns."}, {"label": "caption", "id": 5, "page_no": 46, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.57685852050781, "t": 617.3950805664062, "r": 279.62469482421875, "b": 626.7601318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9109888672828674, "cells": [{"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-18 SQL statement result by Manager profile"}, {"label": "list_item", "id": 6, "page_no": 46, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.3648223876953, "t": 643.3563842773438, "r": 518.90057, "b": 665.8402709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9563440084457397, "cells": [{"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}]}, "text": "9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all."}, {"label": "caption", "id": 7, "page_no": 46, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.505126953125, "t": 705.2019653320312, "r": 295.1390380859375, "b": 714.663002, "coord_origin": "TOPLEFT"}, "confidence": 0.9352152943611145, "cells": [{"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-19 SQL statement result by an employee profile"}], "body": [{"label": "list_item", "id": 2, "page_no": 46, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.29183959960938, "t": 70.52925872802734, "r": 547.15259, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9437284469604492, "cells": [{"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns."}, {"label": "caption", "id": 3, "page_no": 46, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.41815185546875, "t": 486.6556091308594, "r": 338.3864440917969, "b": 495.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8823539018630981, "cells": [{"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-17 SQL statement result by Human Resources user profile"}, {"label": "list_item", "id": 4, "page_no": 46, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.21075439453125, "t": 512.54150390625, "r": 546.0484, "b": 535.139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411396384239197, "cells": [{"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns."}, {"label": "caption", "id": 5, "page_no": 46, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.57685852050781, "t": 617.3950805664062, "r": 279.62469482421875, "b": 626.7601318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9109888672828674, "cells": [{"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-18 SQL statement result by Manager profile"}, {"label": "list_item", "id": 6, "page_no": 46, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.3648223876953, "t": 643.3563842773438, "r": 518.90057, "b": 665.8402709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9563440084457397, "cells": [{"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}]}, "text": "9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all."}, {"label": "caption", "id": 7, "page_no": 46, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.505126953125, "t": 705.2019653320312, "r": 295.1390380859375, "b": 714.663002, "coord_origin": "TOPLEFT"}, "confidence": 0.9352152943611145, "cells": [{"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-19 SQL statement result by an employee profile"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 46, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6293640136719, "t": 754.7607421875, "r": 523.60162, "b": 764.101806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9559109210968018, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 46, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7171630859375, "t": 754.2883911132812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9095556735992432, "cells": [{"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}]}}, {"page_no": 47, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.27489471435547, "t": 754.446044921875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9054298996925354, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.40065002441406, "t": 754.7294311523438, "r": 334.42142, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9436663389205933, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.8, "t": 70.6961898803711, "r": 547.27527, "b": 92.95230102539062, "coord_origin": "TOPLEFT"}, "confidence": 0.678650975227356, "cells": [{"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.38975524902344, "t": 165.40078735351562, "r": 308.0195617675781, "b": 174.5470733642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9349976181983948, "cells": [{"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.18441009521484, "t": 193.73703002929688, "r": 408.97745, "b": 207.04144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546941518783569, "cells": [{"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.6727294921875, "t": 220.03721618652344, "r": 515.07678, "b": 230.3160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9435732960700989, "cells": [{"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 237.41502380371094, "r": 547.23077, "b": 271.5574645996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9775716662406921, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 47, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.27489471435547, "t": 754.446044921875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9054298996925354, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 47, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40065002441406, "t": 754.7294311523438, "r": 334.42142, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9436663389205933, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 47, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.8, "t": 70.6961898803711, "r": 547.27527, "b": 92.95230102539062, "coord_origin": "TOPLEFT"}, "confidence": 0.678650975227356, "cells": [{"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company\u2019s employees."}, {"label": "caption", "id": 3, "page_no": 47, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.38975524902344, "t": 165.40078735351562, "r": 308.0195617675781, "b": 174.5470733642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9349976181983948, "cells": [{"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile"}, {"label": "section_header", "id": 4, "page_no": 47, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.18441009521484, "t": 193.73703002929688, "r": 408.97745, "b": 207.04144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546941518783569, "cells": [{"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.8 Demonstrating data access with a view and RCAC"}, {"label": "text", "id": 5, "page_no": 47, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.6727294921875, "t": 220.03721618652344, "r": 515.07678, "b": 230.3160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9435732960700989, "cells": [{"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers data access with a view and RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 47, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 237.41502380371094, "r": 547.23077, "b": 271.5574645996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9775716662406921, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}]}, "text": "1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave."}], "body": [{"label": "list_item", "id": 2, "page_no": 47, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.8, "t": 70.6961898803711, "r": 547.27527, "b": 92.95230102539062, "coord_origin": "TOPLEFT"}, "confidence": 0.678650975227356, "cells": [{"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company\u2019s employees."}, {"label": "caption", "id": 3, "page_no": 47, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.38975524902344, "t": 165.40078735351562, "r": 308.0195617675781, "b": 174.5470733642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9349976181983948, "cells": [{"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile"}, {"label": "section_header", "id": 4, "page_no": 47, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.18441009521484, "t": 193.73703002929688, "r": 408.97745, "b": 207.04144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546941518783569, "cells": [{"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.8 Demonstrating data access with a view and RCAC"}, {"label": "text", "id": 5, "page_no": 47, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.6727294921875, "t": 220.03721618652344, "r": 515.07678, "b": 230.3160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9435732960700989, "cells": [{"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers data access with a view and RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 47, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 237.41502380371094, "r": 547.23077, "b": 271.5574645996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9775716662406921, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}]}, "text": "1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 47, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.27489471435547, "t": 754.446044921875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9054298996925354, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 47, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40065002441406, "t": 754.7294311523438, "r": 334.42142, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9436663389205933, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 48, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5408020019531, "t": 754.6817016601562, "r": 523.60162, "b": 764.1367797851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9533696174621582, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.63330078125, "t": 754.3946533203125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169439077377319, "cells": [{"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.41194152832031, "t": 566.6688232421875, "r": 198.96627807617188, "b": 576.1551513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.7591876983642578, "cells": [{"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.17755126953125, "t": 592.6334838867188, "r": 355.694, "b": 602.9717407226562, "coord_origin": "TOPLEFT"}, "confidence": 0.83542799949646, "cells": [{"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.4932098388672, "t": 614.6098022460938, "r": 311.614013671875, "b": 624.4323120117188, "coord_origin": "TOPLEFT"}, "confidence": 0.6750876307487488, "cells": [{"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "code", "bbox": {"l": 136.7435302734375, "t": 630.8392333984375, "r": 426.59613, "b": 726.1493530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7123060822486877, "cells": [{"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 48, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5408020019531, "t": 754.6817016601562, "r": 523.60162, "b": 764.1367797851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9533696174621582, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 48, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.63330078125, "t": 754.3946533203125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169439077377319, "cells": [{"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}, {"label": "caption", "id": 2, "page_no": 48, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.41194152832031, "t": 566.6688232421875, "r": 198.96627807617188, "b": 576.1551513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.7591876983642578, "cells": [{"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-21 Employees on leave"}, {"label": "list_item", "id": 3, "page_no": 48, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.17755126953125, "t": 592.6334838867188, "r": 355.694, "b": 602.9717407226562, "coord_origin": "TOPLEFT"}, "confidence": 0.83542799949646, "cells": [{"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}]}, "text": "2. Example 3-13 shows the definition of the view."}, {"label": "caption", "id": 4, "page_no": 48, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.4932098388672, "t": 614.6098022460938, "r": 311.614013671875, "b": 624.4323120117188, "coord_origin": "TOPLEFT"}, "confidence": 0.6750876307487488, "cells": [{"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-13 VIew of employees on leave"}, {"label": "code", "id": 5, "page_no": 48, "cluster": {"id": 5, "label": "code", "bbox": {"l": 136.7435302734375, "t": 630.8392333984375, "r": 426.59613, "b": 726.1493530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7123060822486877, "cells": [{"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH,"}], "body": [{"label": "caption", "id": 2, "page_no": 48, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.41194152832031, "t": 566.6688232421875, "r": 198.96627807617188, "b": 576.1551513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.7591876983642578, "cells": [{"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-21 Employees on leave"}, {"label": "list_item", "id": 3, "page_no": 48, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.17755126953125, "t": 592.6334838867188, "r": 355.694, "b": 602.9717407226562, "coord_origin": "TOPLEFT"}, "confidence": 0.83542799949646, "cells": [{"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}]}, "text": "2. Example 3-13 shows the definition of the view."}, {"label": "caption", "id": 4, "page_no": 48, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.4932098388672, "t": 614.6098022460938, "r": 311.614013671875, "b": 624.4323120117188, "coord_origin": "TOPLEFT"}, "confidence": 0.6750876307487488, "cells": [{"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-13 VIew of employees on leave"}, {"label": "code", "id": 5, "page_no": 48, "cluster": {"id": 5, "label": "code", "bbox": {"l": 136.7435302734375, "t": 630.8392333984375, "r": 426.59613, "b": 726.1493530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7123060822486877, "cells": [{"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH,"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 48, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5408020019531, "t": 754.6817016601562, "r": 523.60162, "b": 764.1367797851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9533696174621582, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 48, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.63330078125, "t": 754.3946533203125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169439077377319, "cells": [{"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}]}}, {"page_no": 49, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1474609375, "t": 754.3988037109375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9037860631942749, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.26473999023438, "t": 754.7013549804688, "r": 334.42142, "b": 764.0106811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9487432837486267, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 258.85648, "t": 71.10697937011719, "r": 446.63561999999996, "b": 117.91847229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.6826066970825195, "cells": [{"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8447265625, "t": 118.94123840332031, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.6089476943016052, "cells": [{"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 155.53102, "t": 262.309326171875, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}, "confidence": 0.6180596351623535, "cells": [{"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 274.9990234375, "r": 157.71849060058594, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6689217686653137, "cells": [{"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 167.92577, "t": 274.5404052734375, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6523625254631042, "cells": [{"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.10264587402344, "t": 286.8880615234375, "r": 161.95062255859375, "b": 296.42957, "coord_origin": "TOPLEFT"}, "confidence": 0.6754139065742493, "cells": [{"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 171.0566864013672, "t": 286.53363037109375, "r": 271.67828, "b": 297.5150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.6802994608879089, "cells": [{"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.068359375, "t": 315.41168212890625, "r": 547.36621, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8731935620307922, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.2685546875, "t": 349.93072509765625, "r": 354.4166564941406, "b": 359.5875549316406, "coord_origin": "TOPLEFT"}, "confidence": 0.7664288878440857, "cells": [{"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 367.63812, "r": 266.69827, "b": 460.41162, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 167.63615, "t": 450.5314636230469, "r": 316.67755, "b": 460.8767395019531, "coord_origin": "TOPLEFT"}, "confidence": 0.6310456991195679, "cells": [{"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.88938903808594, "t": 474.4544677734375, "r": 547.25067, "b": 521.350830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467523097991943, "cells": [{"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "caption", "bbox": {"l": 64.29961395263672, "t": 569.6649780273438, "r": 301.89312744140625, "b": 579.7119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.881747305393219, "cells": [{"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 136.30172729492188, "t": 595.9632568359375, "r": 546.50952, "b": 642.4163818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9604976177215576, "cells": [{"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "caption", "bbox": {"l": 64.38579559326172, "t": 683.8665771484375, "r": 313.5398254394531, "b": 693.6953735351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9106412529945374, "cells": [{"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 49, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1474609375, "t": 754.3988037109375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9037860631942749, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 49, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26473999023438, "t": 754.7013549804688, "r": 334.42142, "b": 764.0106811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9487432837486267, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 49, "cluster": {"id": 2, "label": "text", "bbox": {"l": 258.85648, "t": 71.10697937011719, "r": 446.63561999999996, "b": 117.91847229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.6826066970825195, "cells": [{"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}]}, "text": "TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG )"}, {"label": "text", "id": 3, "page_no": 49, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8447265625, "t": 118.94123840332031, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.6089476943016052, "cells": [{"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}]}, "text": "AS"}, {"label": "text", "id": 4, "page_no": 49, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE,"}, {"label": "text", "id": 5, "page_no": 49, "cluster": {"id": 5, "label": "text", "bbox": {"l": 155.53102, "t": 262.309326171875, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}, "confidence": 0.6180596351623535, "cells": [{"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG"}, {"label": "text", "id": 6, "page_no": 49, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 274.9990234375, "r": 157.71849060058594, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6689217686653137, "cells": [{"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 7, "page_no": 49, "cluster": {"id": 7, "label": "text", "bbox": {"l": 167.92577, "t": 274.5404052734375, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6523625254631042, "cells": [{"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 8, "page_no": 49, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.10264587402344, "t": 286.8880615234375, "r": 161.95062255859375, "b": 296.42957, "coord_origin": "TOPLEFT"}, "confidence": 0.6754139065742493, "cells": [{"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE"}, {"label": "text", "id": 9, "page_no": 49, "cluster": {"id": 9, "label": "text", "bbox": {"l": 171.0566864013672, "t": 286.53363037109375, "r": 271.67828, "b": 297.5150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.6802994608879089, "cells": [{"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG = 'Y';"}, {"label": "list_item", "id": 10, "page_no": 49, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.068359375, "t": 315.41168212890625, "r": 547.36621, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8731935620307922, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14:"}, {"label": "caption", "id": 11, "page_no": 49, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.2685546875, "t": 349.93072509765625, "r": 354.4166564941406, "b": 359.5875549316406, "coord_origin": "TOPLEFT"}, "confidence": 0.7664288878440857, "cells": [{"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-14 SQL statement for employees on leave"}, {"label": "text", "id": 12, "page_no": 49, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 367.63812, "r": 266.69827, "b": 460.41162, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM"}, {"label": "text", "id": 13, "page_no": 49, "cluster": {"id": 13, "label": "text", "bbox": {"l": 167.63615, "t": 450.5314636230469, "r": 316.67755, "b": 460.8767395019531, "coord_origin": "TOPLEFT"}, "confidence": 0.6310456991195679, "cells": [{"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;"}, {"label": "list_item", "id": 14, "page_no": 49, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.88938903808594, "t": 474.4544677734375, "r": 547.25067, "b": 521.350830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467523097991943, "cells": [{"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}]}, "text": "4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22."}, {"label": "caption", "id": 15, "page_no": 49, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 64.29961395263672, "t": 569.6649780273438, "r": 301.89312744140625, "b": 579.7119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.881747305393219, "cells": [{"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-22 Employees on leave - Human Resources user"}, {"label": "list_item", "id": 16, "page_no": 49, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.30172729492188, "t": 595.9632568359375, "r": 546.50952, "b": 642.4163818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9604976177215576, "cells": [{"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}]}, "text": "5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well."}, {"label": "caption", "id": 17, "page_no": 49, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 64.38579559326172, "t": 683.8665771484375, "r": 313.5398254394531, "b": 693.6953735351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9106412529945374, "cells": [{"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user"}], "body": [{"label": "text", "id": 2, "page_no": 49, "cluster": {"id": 2, "label": "text", "bbox": {"l": 258.85648, "t": 71.10697937011719, "r": 446.63561999999996, "b": 117.91847229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.6826066970825195, "cells": [{"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}]}, "text": "TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG )"}, {"label": "text", "id": 3, "page_no": 49, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8447265625, "t": 118.94123840332031, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.6089476943016052, "cells": [{"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}]}, "text": "AS"}, {"label": "text", "id": 4, "page_no": 49, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE,"}, {"label": "text", "id": 5, "page_no": 49, "cluster": {"id": 5, "label": "text", "bbox": {"l": 155.53102, "t": 262.309326171875, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}, "confidence": 0.6180596351623535, "cells": [{"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG"}, {"label": "text", "id": 6, "page_no": 49, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 274.9990234375, "r": 157.71849060058594, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6689217686653137, "cells": [{"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 7, "page_no": 49, "cluster": {"id": 7, "label": "text", "bbox": {"l": 167.92577, "t": 274.5404052734375, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6523625254631042, "cells": [{"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 8, "page_no": 49, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.10264587402344, "t": 286.8880615234375, "r": 161.95062255859375, "b": 296.42957, "coord_origin": "TOPLEFT"}, "confidence": 0.6754139065742493, "cells": [{"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE"}, {"label": "text", "id": 9, "page_no": 49, "cluster": {"id": 9, "label": "text", "bbox": {"l": 171.0566864013672, "t": 286.53363037109375, "r": 271.67828, "b": 297.5150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.6802994608879089, "cells": [{"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG = 'Y';"}, {"label": "list_item", "id": 10, "page_no": 49, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.068359375, "t": 315.41168212890625, "r": 547.36621, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8731935620307922, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14:"}, {"label": "caption", "id": 11, "page_no": 49, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.2685546875, "t": 349.93072509765625, "r": 354.4166564941406, "b": 359.5875549316406, "coord_origin": "TOPLEFT"}, "confidence": 0.7664288878440857, "cells": [{"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-14 SQL statement for employees on leave"}, {"label": "text", "id": 12, "page_no": 49, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 367.63812, "r": 266.69827, "b": 460.41162, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM"}, {"label": "text", "id": 13, "page_no": 49, "cluster": {"id": 13, "label": "text", "bbox": {"l": 167.63615, "t": 450.5314636230469, "r": 316.67755, "b": 460.8767395019531, "coord_origin": "TOPLEFT"}, "confidence": 0.6310456991195679, "cells": [{"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;"}, {"label": "list_item", "id": 14, "page_no": 49, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.88938903808594, "t": 474.4544677734375, "r": 547.25067, "b": 521.350830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467523097991943, "cells": [{"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}]}, "text": "4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22."}, {"label": "caption", "id": 15, "page_no": 49, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 64.29961395263672, "t": 569.6649780273438, "r": 301.89312744140625, "b": 579.7119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.881747305393219, "cells": [{"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-22 Employees on leave - Human Resources user"}, {"label": "list_item", "id": 16, "page_no": 49, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.30172729492188, "t": 595.9632568359375, "r": 546.50952, "b": 642.4163818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9604976177215576, "cells": [{"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}]}, "text": "5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well."}, {"label": "caption", "id": 17, "page_no": 49, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 64.38579559326172, "t": 683.8665771484375, "r": 313.5398254394531, "b": 693.6953735351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9106412529945374, "cells": [{"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 49, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1474609375, "t": 754.3988037109375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9037860631942749, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 49, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26473999023438, "t": 754.7013549804688, "r": 334.42142, "b": 764.0106811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9487432837486267, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 50, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.6600646972656, "t": 754.7468872070312, "r": 523.60162, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9453045725822449, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7924194335938, "t": 754.3042602539062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.898695707321167, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.05897521972656, "t": 70.66057586669922, "r": 536.18866, "b": 92.95333862304688, "coord_origin": "TOPLEFT"}, "confidence": 0.8970366716384888, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 64.34432983398438, "t": 155.6955108642578, "r": 265.8516540527344, "b": 164.99256896972656, "coord_origin": "TOPLEFT"}, "confidence": 0.8921710252761841, "cells": [{"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 50, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6600646972656, "t": 754.7468872070312, "r": 523.60162, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9453045725822449, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 50, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7924194335938, "t": 754.3042602539062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.898695707321167, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}, {"label": "list_item", "id": 2, "page_no": 50, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05897521972656, "t": 70.66057586669922, "r": 536.18866, "b": 92.95333862304688, "coord_origin": "TOPLEFT"}, "confidence": 0.8970366716384888, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave."}, {"label": "text", "id": 3, "page_no": 50, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "."}, {"label": "caption", "id": 4, "page_no": 50, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.34432983398438, "t": 155.6955108642578, "r": 265.8516540527344, "b": 164.99256896972656, "coord_origin": "TOPLEFT"}, "confidence": 0.8921710252761841, "cells": [{"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-24 Employees on leave - employee user"}], "body": [{"label": "list_item", "id": 2, "page_no": 50, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05897521972656, "t": 70.66057586669922, "r": 536.18866, "b": 92.95333862304688, "coord_origin": "TOPLEFT"}, "confidence": 0.8970366716384888, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave."}, {"label": "text", "id": 3, "page_no": 50, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "."}, {"label": "caption", "id": 4, "page_no": 50, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.34432983398438, "t": 155.6955108642578, "r": 265.8516540527344, "b": 164.99256896972656, "coord_origin": "TOPLEFT"}, "confidence": 0.8921710252761841, "cells": [{"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-24 Employees on leave - employee user"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 50, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6600646972656, "t": 754.7468872070312, "r": 523.60162, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9453045725822449, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 50, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7924194335938, "t": 754.3042602539062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.898695707321167, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}]}}, {"page_no": 51, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.35157775878906, "t": 754.292236328125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9079517722129822, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.37352752685547, "t": 754.510986328125, "r": 334.5318603515625, "b": 764.0523681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9429895877838135, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 51, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35157775878906, "t": 754.292236328125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9079517722129822, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 51, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37352752685547, "t": 754.510986328125, "r": 334.5318603515625, "b": 764.0523681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9429895877838135, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 51, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35157775878906, "t": 754.292236328125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9079517722129822, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 51, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37352752685547, "t": 754.510986328125, "r": 334.5318603515625, "b": 764.0523681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9429895877838135, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 52, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.681270599365234, "t": 754.6544799804688, "r": 257.24335, "b": 764.1611938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9473534226417542, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5507202148438, "t": 754.1658325195312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108303189277649, "cells": [{"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 135.96546936035156, "t": 253.45413208007812, "r": 532.03375, "b": 340.89832, "coord_origin": "TOPLEFT"}, "confidence": 0.8815584778785706, "cells": [{"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8340301513672, "t": 378.66455078125, "r": 546.15009, "b": 424.94116, "coord_origin": "TOPLEFT"}, "confidence": 0.9846907258033752, "cells": [{"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.71417236328125, "t": 436.7104187011719, "r": 347.41214, "b": 447.06390380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.922663152217865, "cells": [{"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7564697265625, "t": 453.9541320800781, "r": 392.97119, "b": 464.2275695800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9471576809883118, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.56719970703125, "t": 465.5244445800781, "r": 368.54633, "b": 476.0690612792969, "coord_origin": "TOPLEFT"}, "confidence": 0.9392989873886108, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7265167236328, "t": 478.0903625488281, "r": 261.45441, "b": 488.0649719238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9472163915634155, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 92.38893127441406, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7300243973731995, "cells": [{"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 32.17905807495117, "t": 70.60472106933594, "r": 238.82225036621094, "b": 238.14642333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7240587472915649, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 52, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.681270599365234, "t": 754.6544799804688, "r": 257.24335, "b": 764.1611938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9473534226417542, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 52, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5507202148438, "t": 754.1658325195312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108303189277649, "cells": [{"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "37"}, {"label": "text", "id": 2, "page_no": 52, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4."}, {"label": "section_header", "id": 3, "page_no": 52, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 135.96546936035156, "t": 253.45413208007812, "r": 532.03375, "b": 340.89832, "coord_origin": "TOPLEFT"}, "confidence": 0.8815584778785706, "cells": [{"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}]}, "text": "Implementing Row and Column Access Control: Banking example"}, {"label": "text", "id": 4, "page_no": 52, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8340301513672, "t": 378.66455078125, "r": 546.15009, "b": 424.94116, "coord_origin": "TOPLEFT"}, "confidence": 0.9846907258033752, "cells": [{"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "text", "id": 5, "page_no": 52, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.71417236328125, "t": 436.7104187011719, "r": 347.41214, "b": 447.06390380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.922663152217865, "cells": [{"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 52, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7564697265625, "t": 453.9541320800781, "r": 392.97119, "b": 464.2275695800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9471576809883118, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Business requirements for the RCAC banking scenario"}, {"label": "list_item", "id": 7, "page_no": 52, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56719970703125, "t": 465.5244445800781, "r": 368.54633, "b": 476.0690612792969, "coord_origin": "TOPLEFT"}, "confidence": 0.9392989873886108, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Description of the users roles and responsibilities"}, {"label": "list_item", "id": 8, "page_no": 52, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7265167236328, "t": 478.0903625488281, "r": 261.45441, "b": 488.0649719238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9472163915634155, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementation of RCAC"}, {"label": "text", "id": 9, "page_no": 52, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 92.38893127441406, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7300243973731995, "cells": [{"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "picture", "id": 10, "page_no": 52, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17905807495117, "t": 70.60472106933594, "r": 238.82225036621094, "b": 238.14642333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7240587472915649, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 52, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4."}, {"label": "section_header", "id": 3, "page_no": 52, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 135.96546936035156, "t": 253.45413208007812, "r": 532.03375, "b": 340.89832, "coord_origin": "TOPLEFT"}, "confidence": 0.8815584778785706, "cells": [{"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}]}, "text": "Implementing Row and Column Access Control: Banking example"}, {"label": "text", "id": 4, "page_no": 52, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8340301513672, "t": 378.66455078125, "r": 546.15009, "b": 424.94116, "coord_origin": "TOPLEFT"}, "confidence": 0.9846907258033752, "cells": [{"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "text", "id": 5, "page_no": 52, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.71417236328125, "t": 436.7104187011719, "r": 347.41214, "b": 447.06390380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.922663152217865, "cells": [{"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 52, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7564697265625, "t": 453.9541320800781, "r": 392.97119, "b": 464.2275695800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9471576809883118, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Business requirements for the RCAC banking scenario"}, {"label": "list_item", "id": 7, "page_no": 52, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56719970703125, "t": 465.5244445800781, "r": 368.54633, "b": 476.0690612792969, "coord_origin": "TOPLEFT"}, "confidence": 0.9392989873886108, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Description of the users roles and responsibilities"}, {"label": "list_item", "id": 8, "page_no": 52, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7265167236328, "t": 478.0903625488281, "r": 261.45441, "b": 488.0649719238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9472163915634155, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementation of RCAC"}, {"label": "text", "id": 9, "page_no": 52, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 92.38893127441406, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7300243973731995, "cells": [{"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "picture", "id": 10, "page_no": 52, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17905807495117, "t": 70.60472106933594, "r": 238.82225036621094, "b": 238.14642333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7240587472915649, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 52, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.681270599365234, "t": 754.6544799804688, "r": 257.24335, "b": 764.1611938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9473534226417542, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 52, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5507202148438, "t": 754.1658325195312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108303189277649, "cells": [{"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "37"}]}}, {"page_no": 53, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.15193939208984, "t": 754.482421875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917007327079773, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28313446044922, "t": 754.71630859375, "r": 334.42142, "b": 763.9201049804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948601484298706, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.15269470214844, "t": 73.28873443603516, "r": 512.55139, "b": 89.75958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9640912413597107, "cells": [{"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.70774841308594, "t": 105.93765258789062, "r": 543.90033, "b": 128.36497497558594, "coord_origin": "TOPLEFT"}, "confidence": 0.9784327745437622, "cells": [{"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.7441864013672, "t": 134.77182006835938, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9225907325744629, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.63128662109375, "t": 146.7830810546875, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.921238124370575, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5100555419922, "t": 158.49131774902344, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9183958172798157, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.0419464111328, "t": 180.70614624023438, "r": 547.2746, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9874840378761292, "cells": [{"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.87716674804688, "t": 262.61517333984375, "r": 546.85059, "b": 333.1118469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9887834191322327, "cells": [{"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.72178649902344, "t": 344.7479553222656, "r": 547.27075, "b": 427.0599670410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884931445121765, "cells": [{"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.73001098632812, "t": 438.89556884765625, "r": 547.21399, "b": 496.8158, "coord_origin": "TOPLEFT"}, "confidence": 0.9869483709335327, "cells": [{"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.76414489746094, "t": 508.6873474121094, "r": 547.24298, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9792865514755249, "cells": [{"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 53, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15193939208984, "t": 754.482421875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917007327079773, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "38"}, {"label": "page_footer", "id": 1, "page_no": 53, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28313446044922, "t": 754.71630859375, "r": 334.42142, "b": 763.9201049804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948601484298706, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 53, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.15269470214844, "t": 73.28873443603516, "r": 512.55139, "b": 89.75958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9640912413597107, "cells": [{"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "4.1 Business requirements for the RCAC banking scenario"}, {"label": "text", "id": 3, "page_no": 53, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.70774841308594, "t": 105.93765258789062, "r": 543.90033, "b": 128.36497497558594, "coord_origin": "TOPLEFT"}, "confidence": 0.9784327745437622, "cells": [{"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application:"}, {"label": "list_item", "id": 4, "page_no": 53, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.7441864013672, "t": 134.77182006835938, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9225907325744629, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMERS"}, {"label": "list_item", "id": 5, "page_no": 53, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.63128662109375, "t": 146.7830810546875, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.921238124370575, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ACCOUNTS"}, {"label": "list_item", "id": 6, "page_no": 53, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5100555419922, "t": 158.49131774902344, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9183958172798157, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TRANSACTIONS"}, {"label": "text", "id": 7, "page_no": 53, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.0419464111328, "t": 180.70614624023438, "r": 547.2746, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9874840378761292, "cells": [{"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values."}, {"label": "text", "id": 8, "page_no": 53, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87716674804688, "t": 262.61517333984375, "r": 546.85059, "b": 333.1118469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9887834191322327, "cells": [{"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee\u2019s personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet."}, {"label": "text", "id": 9, "page_no": 53, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.72178649902344, "t": 344.7479553222656, "r": 547.27075, "b": 427.0599670410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884931445121765, "cells": [{"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile."}, {"label": "text", "id": 10, "page_no": 53, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.73001098632812, "t": 438.89556884765625, "r": 547.21399, "b": 496.8158, "coord_origin": "TOPLEFT"}, "confidence": 0.9869483709335327, "cells": [{"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}]}, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table."}, {"label": "text", "id": 11, "page_no": 53, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.76414489746094, "t": 508.6873474121094, "r": 547.24298, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9792865514755249, "cells": [{"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}]}, "text": "Applications that do not use the web interface do not have to be changed because the global variable is NULL by default."}], "body": [{"label": "section_header", "id": 2, "page_no": 53, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.15269470214844, "t": 73.28873443603516, "r": 512.55139, "b": 89.75958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9640912413597107, "cells": [{"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "4.1 Business requirements for the RCAC banking scenario"}, {"label": "text", "id": 3, "page_no": 53, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.70774841308594, "t": 105.93765258789062, "r": 543.90033, "b": 128.36497497558594, "coord_origin": "TOPLEFT"}, "confidence": 0.9784327745437622, "cells": [{"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application:"}, {"label": "list_item", "id": 4, "page_no": 53, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.7441864013672, "t": 134.77182006835938, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9225907325744629, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMERS"}, {"label": "list_item", "id": 5, "page_no": 53, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.63128662109375, "t": 146.7830810546875, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.921238124370575, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ACCOUNTS"}, {"label": "list_item", "id": 6, "page_no": 53, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5100555419922, "t": 158.49131774902344, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9183958172798157, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TRANSACTIONS"}, {"label": "text", "id": 7, "page_no": 53, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.0419464111328, "t": 180.70614624023438, "r": 547.2746, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9874840378761292, "cells": [{"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values."}, {"label": "text", "id": 8, "page_no": 53, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87716674804688, "t": 262.61517333984375, "r": 546.85059, "b": 333.1118469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9887834191322327, "cells": [{"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee\u2019s personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet."}, {"label": "text", "id": 9, "page_no": 53, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.72178649902344, "t": 344.7479553222656, "r": 547.27075, "b": 427.0599670410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884931445121765, "cells": [{"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile."}, {"label": "text", "id": 10, "page_no": 53, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.73001098632812, "t": 438.89556884765625, "r": 547.21399, "b": 496.8158, "coord_origin": "TOPLEFT"}, "confidence": 0.9869483709335327, "cells": [{"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}]}, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table."}, {"label": "text", "id": 11, "page_no": 53, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.76414489746094, "t": 508.6873474121094, "r": 547.24298, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9792865514755249, "cells": [{"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}]}, "text": "Applications that do not use the web interface do not have to be changed because the global variable is NULL by default."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 53, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15193939208984, "t": 754.482421875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917007327079773, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "38"}, {"label": "page_footer", "id": 1, "page_no": 53, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28313446044922, "t": 754.71630859375, "r": 334.42142, "b": 763.9201049804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948601484298706, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 54, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.27481079101562, "t": 754.7271118164062, "r": 523.59357, "b": 763.9805908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535647034645081, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5966186523438, "t": 754.2191772460938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146284461021423, "cells": [{"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.5806884765625, "t": 70.6917953491211, "r": 442.27869, "b": 81.22028350830078, "coord_origin": "TOPLEFT"}, "confidence": 0.883094310760498, "cells": [{"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.6310577392578, "t": 87.42381286621094, "r": 547.35461, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9767823815345764, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.43284606933594, "t": 128.3446044921875, "r": 546.73322, "b": 162.75404357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9813671708106995, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.4942169189453, "t": 169.17440795898438, "r": 546.22345, "b": 215.9951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9838805794715881, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.07473754882812, "t": 489.646728515625, "r": 286.37646484375, "b": 498.6321105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9487526416778564, "cells": [{"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.41133880615234, "t": 525.37890625, "r": 475.69338999999997, "b": 541.5180053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9669509530067444, "cells": [{"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.86761474609375, "t": 557.9774169921875, "r": 533.13452, "b": 580.22142, "coord_origin": "TOPLEFT"}, "confidence": 0.9649704694747925, "cells": [{"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.75192260742188, "t": 587.4430541992188, "r": 395.10461, "b": 597.5853881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9487041234970093, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.67442321777344, "t": 599.6355590820312, "r": 266.76602, "b": 609.8877563476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9388520121574402, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.70191955566406, "t": 611.2393188476562, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}, "confidence": 0.9382083415985107, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.53024291992188, "t": 623.206787109375, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}, "confidence": 0.9220486879348755, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.38711547851562, "t": 635.4190673828125, "r": 365.1325378417969, "b": 645.393798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496619701385498, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.63414001464844, "t": 647.4161987304688, "r": 325.77802, "b": 657.5957641601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9528717994689941, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 136.02655029296875, "t": 229.7416229248047, "r": 494.36669921875, "b": 487.56256103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9840942025184631, "cells": [{"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 54, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27481079101562, "t": 754.7271118164062, "r": 523.59357, "b": 763.9805908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535647034645081, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 54, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5966186523438, "t": 754.2191772460938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146284461021423, "cells": [{"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "39"}, {"label": "text", "id": 2, "page_no": 54, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.5806884765625, "t": 70.6917953491211, "r": 442.27869, "b": 81.22028350830078, "coord_origin": "TOPLEFT"}, "confidence": 0.883094310760498, "cells": [{"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:"}, {"label": "list_item", "id": 3, "page_no": 54, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6310577392578, "t": 87.42381286621094, "r": 547.35461, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9767823815345764, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested."}, {"label": "list_item", "id": 4, "page_no": 54, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.43284606933594, "t": 128.3446044921875, "r": 546.73322, "b": 162.75404357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9813671708106995, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent)."}, {"label": "list_item", "id": 5, "page_no": 54, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.4942169189453, "t": 169.17440795898438, "r": 546.22345, "b": 215.9951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9838805794715881, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent)."}, {"label": "caption", "id": 6, "page_no": 54, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.07473754882812, "t": 489.646728515625, "r": 286.37646484375, "b": 498.6321105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9487526416778564, "cells": [{"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-1 Internet banking example"}, {"label": "section_header", "id": 7, "page_no": 54, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.41133880615234, "t": 525.37890625, "r": 475.69338999999997, "b": 541.5180053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9669509530067444, "cells": [{"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.2 Description of the users roles and responsibilities"}, {"label": "text", "id": 8, "page_no": 54, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.86761474609375, "t": 557.9774169921875, "r": 533.13452, "b": 580.22142, "coord_origin": "TOPLEFT"}, "confidence": 0.9649704694747925, "cells": [{"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}]}, "text": "During the requirements gathering phase, the following groups of users are identified and codified:"}, {"label": "list_item", "id": 9, "page_no": 54, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75192260742188, "t": 587.4430541992188, "r": 395.10461, "b": 597.5853881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9487041234970093, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SECURITY: Security officer and security administrators"}, {"label": "list_item", "id": 10, "page_no": 54, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.67442321777344, "t": 599.6355590820312, "r": 266.76602, "b": 609.8877563476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9388520121574402, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DBE: Database engineers"}, {"label": "list_item", "id": 11, "page_no": 54, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.70191955566406, "t": 611.2393188476562, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}, "confidence": 0.9382083415985107, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ADMIN: Bank business administrators"}, {"label": "list_item", "id": 12, "page_no": 54, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.53024291992188, "t": 623.206787109375, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}, "confidence": 0.9220486879348755, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TELLER: Bank tellers"}, {"label": "list_item", "id": 13, "page_no": 54, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.38711547851562, "t": 635.4190673828125, "r": 365.1325378417969, "b": 645.393798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496619701385498, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMER: Bank customers using the internet"}, {"label": "list_item", "id": 14, "page_no": 54, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.63414001464844, "t": 647.4161987304688, "r": 325.77802, "b": 657.5957641601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9528717994689941, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PUBLIC: Anyone not already in a group"}, {"label": "picture", "id": 15, "page_no": 54, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.02655029296875, "t": 229.7416229248047, "r": 494.36669921875, "b": 487.56256103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9840942025184631, "cells": [{"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 54, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.5806884765625, "t": 70.6917953491211, "r": 442.27869, "b": 81.22028350830078, "coord_origin": "TOPLEFT"}, "confidence": 0.883094310760498, "cells": [{"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:"}, {"label": "list_item", "id": 3, "page_no": 54, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6310577392578, "t": 87.42381286621094, "r": 547.35461, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9767823815345764, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested."}, {"label": "list_item", "id": 4, "page_no": 54, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.43284606933594, "t": 128.3446044921875, "r": 546.73322, "b": 162.75404357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9813671708106995, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent)."}, {"label": "list_item", "id": 5, "page_no": 54, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.4942169189453, "t": 169.17440795898438, "r": 546.22345, "b": 215.9951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9838805794715881, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent)."}, {"label": "caption", "id": 6, "page_no": 54, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.07473754882812, "t": 489.646728515625, "r": 286.37646484375, "b": 498.6321105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9487526416778564, "cells": [{"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-1 Internet banking example"}, {"label": "section_header", "id": 7, "page_no": 54, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.41133880615234, "t": 525.37890625, "r": 475.69338999999997, "b": 541.5180053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9669509530067444, "cells": [{"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.2 Description of the users roles and responsibilities"}, {"label": "text", "id": 8, "page_no": 54, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.86761474609375, "t": 557.9774169921875, "r": 533.13452, "b": 580.22142, "coord_origin": "TOPLEFT"}, "confidence": 0.9649704694747925, "cells": [{"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}]}, "text": "During the requirements gathering phase, the following groups of users are identified and codified:"}, {"label": "list_item", "id": 9, "page_no": 54, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75192260742188, "t": 587.4430541992188, "r": 395.10461, "b": 597.5853881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9487041234970093, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SECURITY: Security officer and security administrators"}, {"label": "list_item", "id": 10, "page_no": 54, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.67442321777344, "t": 599.6355590820312, "r": 266.76602, "b": 609.8877563476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9388520121574402, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DBE: Database engineers"}, {"label": "list_item", "id": 11, "page_no": 54, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.70191955566406, "t": 611.2393188476562, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}, "confidence": 0.9382083415985107, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ADMIN: Bank business administrators"}, {"label": "list_item", "id": 12, "page_no": 54, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.53024291992188, "t": 623.206787109375, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}, "confidence": 0.9220486879348755, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TELLER: Bank tellers"}, {"label": "list_item", "id": 13, "page_no": 54, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.38711547851562, "t": 635.4190673828125, "r": 365.1325378417969, "b": 645.393798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496619701385498, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMER: Bank customers using the internet"}, {"label": "list_item", "id": 14, "page_no": 54, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.63414001464844, "t": 647.4161987304688, "r": 325.77802, "b": 657.5957641601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9528717994689941, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PUBLIC: Anyone not already in a group"}, {"label": "picture", "id": 15, "page_no": 54, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.02655029296875, "t": 229.7416229248047, "r": 494.36669921875, "b": 487.56256103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9840942025184631, "cells": [{"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 54, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27481079101562, "t": 754.7271118164062, "r": 523.59357, "b": 763.9805908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535647034645081, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 54, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5966186523438, "t": 754.2191772460938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146284461021423, "cells": [{"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "39"}]}}, {"page_no": 55, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.19805908203125, "t": 754.2051391601562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140270948410034, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.33177947998047, "t": 754.7326049804688, "r": 334.42142, "b": 763.9369506835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9506687521934509, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.27764892578125, "t": 70.70075225830078, "r": 547.21271, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9673320651054382, "cells": [{"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.13352966308594, "t": 408.7555236816406, "r": 317.8505554199219, "b": 418.05963134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9396594762802124, "cells": [{"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 136.22354125976562, "t": 119.91455841064453, "r": 529.123291015625, "b": 404.9533386230469, "coord_origin": "TOPLEFT"}, "confidence": 0.8848159909248352, "cells": [{"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 55, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19805908203125, "t": 754.2051391601562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140270948410034, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "40"}, {"label": "page_footer", "id": 1, "page_no": 55, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33177947998047, "t": 754.7326049804688, "r": 334.42142, "b": 763.9369506835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9506687521934509, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 55, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.27764892578125, "t": 70.70075225830078, "r": 547.21271, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9673320651054382, "cells": [{"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example."}, {"label": "caption", "id": 3, "page_no": 55, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13352966308594, "t": 408.7555236816406, "r": 317.8505554199219, "b": 418.05963134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9396594762802124, "cells": [{"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-2 Rules for row and column access"}, {"label": "picture", "id": 4, "page_no": 55, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.22354125976562, "t": 119.91455841064453, "r": 529.123291015625, "b": 404.9533386230469, "coord_origin": "TOPLEFT"}, "confidence": 0.8848159909248352, "cells": [{"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 55, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.27764892578125, "t": 70.70075225830078, "r": 547.21271, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9673320651054382, "cells": [{"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example."}, {"label": "caption", "id": 3, "page_no": 55, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13352966308594, "t": 408.7555236816406, "r": 317.8505554199219, "b": 418.05963134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9396594762802124, "cells": [{"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-2 Rules for row and column access"}, {"label": "picture", "id": 4, "page_no": 55, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.22354125976562, "t": 119.91455841064453, "r": 529.123291015625, "b": 404.9533386230469, "coord_origin": "TOPLEFT"}, "confidence": 0.8848159909248352, "cells": [{"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 55, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19805908203125, "t": 754.2051391601562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140270948410034, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "40"}, {"label": "page_footer", "id": 1, "page_no": 55, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33177947998047, "t": 754.7326049804688, "r": 334.42142, "b": 763.9369506835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9506687521934509, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 56, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.2675018310547, "t": 754.7578125, "r": 523.59357, "b": 763.9957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9552486538887024, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.689697265625, "t": 754.2295532226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9034480452537537, "cells": [{"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74815368652344, "t": 70.60477447509766, "r": 545.29602, "b": 92.98249816894531, "coord_origin": "TOPLEFT"}, "confidence": 0.8913360834121704, "cells": [{"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.09585571289062, "t": 401.38555908203125, "r": 245.08297729492188, "b": 410.9154052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9149027466773987, "cells": [{"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.05606079101562, "t": 427.2995300292969, "r": 543.45782, "b": 473.7316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834994673728943, "cells": [{"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7457733154297, "t": 479.84906005859375, "r": 547.29358, "b": 502.5825500488281, "coord_origin": "TOPLEFT"}, "confidence": 0.9738782048225403, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.60708618164062, "t": 509.2861328125, "r": 538.92694, "b": 531.83251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9742493033409119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.6043701171875, "t": 537.8555908203125, "r": 492.53729, "b": 560.4962768554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9739224314689636, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5557403564453, "t": 567.1375732421875, "r": 534.65118, "b": 589.821044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9734449982643127, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.36813354492188, "t": 595.9415893554688, "r": 529.1214, "b": 606.3484497070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9539303779602051, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.52735900878906, "t": 613.2100219726562, "r": 547.33234, "b": 647.35835, "coord_origin": "TOPLEFT"}, "confidence": 0.9781912565231323, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.407958984375, "t": 653.871337890625, "r": 530.79578, "b": 664.398681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545347690582275, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 56, "cluster": {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl"], "num_rows": 7, "num_cols": 4, "table_cells": [{"bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 382.36545, "b": 202.30615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 382.36545, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 279.81146, "r": 382.36545, "b": 317.44946, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353, "t": 343.04031, "r": 382.36545, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 56, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2675018310547, "t": 754.7578125, "r": 523.59357, "b": 763.9957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9552486538887024, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 56, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.689697265625, "t": 754.2295532226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9034480452537537, "cells": [{"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "41"}, {"label": "text", "id": 2, "page_no": 56, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74815368652344, "t": 70.60477447509766, "r": 545.29602, "b": 92.98249816894531, "coord_origin": "TOPLEFT"}, "confidence": 0.8913360834121704, "cells": [{"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table."}, {"label": "caption", "id": 3, "page_no": 56, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.09585571289062, "t": 401.38555908203125, "r": 245.08297729492188, "b": 410.9154052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9149027466773987, "cells": [{"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-3 Column masks"}, {"label": "text", "id": 4, "page_no": 56, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.05606079101562, "t": 427.2995300292969, "r": 543.45782, "b": 473.7316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834994673728943, "cells": [{"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}]}, "text": "For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur."}, {"label": "list_item", "id": 5, "page_no": 56, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7457733154297, "t": 479.84906005859375, "r": 547.29358, "b": 502.5825500488281, "coord_origin": "TOPLEFT"}, "confidence": 0.9738782048225403, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group."}, {"label": "list_item", "id": 6, "page_no": 56, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.60708618164062, "t": 509.2861328125, "r": 538.92694, "b": 531.83251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9742493033409119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group."}, {"label": "list_item", "id": 7, "page_no": 56, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6043701171875, "t": 537.8555908203125, "r": 492.53729, "b": 560.4962768554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9739224314689636, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group."}, {"label": "list_item", "id": 8, "page_no": 56, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5557403564453, "t": 567.1375732421875, "r": 534.65118, "b": 589.821044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9734449982643127, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group."}, {"label": "list_item", "id": 9, "page_no": 56, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.36813354492188, "t": 595.9415893554688, "r": 529.1214, "b": 606.3484497070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9539303779602051, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group."}, {"label": "list_item", "id": 10, "page_no": 56, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.52735900878906, "t": 613.2100219726562, "r": 547.33234, "b": 647.35835, "coord_origin": "TOPLEFT"}, "confidence": 0.9781912565231323, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed."}, {"label": "list_item", "id": 11, "page_no": 56, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.407958984375, "t": 653.871337890625, "r": 530.79578, "b": 664.398681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545347690582275, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG."}, {"label": "table", "id": 12, "page_no": 56, "cluster": {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl"], "num_rows": 7, "num_cols": 4, "table_cells": [{"bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 382.36545, "b": 202.30615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 382.36545, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 279.81146, "r": 382.36545, "b": 317.44946, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353, "t": 343.04031, "r": 382.36545, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 56, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74815368652344, "t": 70.60477447509766, "r": 545.29602, "b": 92.98249816894531, "coord_origin": "TOPLEFT"}, "confidence": 0.8913360834121704, "cells": [{"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table."}, {"label": "caption", "id": 3, "page_no": 56, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.09585571289062, "t": 401.38555908203125, "r": 245.08297729492188, "b": 410.9154052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9149027466773987, "cells": [{"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-3 Column masks"}, {"label": "text", "id": 4, "page_no": 56, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.05606079101562, "t": 427.2995300292969, "r": 543.45782, "b": 473.7316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834994673728943, "cells": [{"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}]}, "text": "For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur."}, {"label": "list_item", "id": 5, "page_no": 56, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7457733154297, "t": 479.84906005859375, "r": 547.29358, "b": 502.5825500488281, "coord_origin": "TOPLEFT"}, "confidence": 0.9738782048225403, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group."}, {"label": "list_item", "id": 6, "page_no": 56, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.60708618164062, "t": 509.2861328125, "r": 538.92694, "b": 531.83251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9742493033409119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group."}, {"label": "list_item", "id": 7, "page_no": 56, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6043701171875, "t": 537.8555908203125, "r": 492.53729, "b": 560.4962768554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9739224314689636, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group."}, {"label": "list_item", "id": 8, "page_no": 56, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5557403564453, "t": 567.1375732421875, "r": 534.65118, "b": 589.821044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9734449982643127, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group."}, {"label": "list_item", "id": 9, "page_no": 56, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.36813354492188, "t": 595.9415893554688, "r": 529.1214, "b": 606.3484497070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9539303779602051, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group."}, {"label": "list_item", "id": 10, "page_no": 56, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.52735900878906, "t": 613.2100219726562, "r": 547.33234, "b": 647.35835, "coord_origin": "TOPLEFT"}, "confidence": 0.9781912565231323, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed."}, {"label": "list_item", "id": 11, "page_no": 56, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.407958984375, "t": 653.871337890625, "r": 530.79578, "b": 664.398681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545347690582275, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG."}, {"label": "table", "id": 12, "page_no": 56, "cluster": {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl"], "num_rows": 7, "num_cols": 4, "table_cells": [{"bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 382.36545, "b": 202.30615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 382.36545, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 279.81146, "r": 382.36545, "b": 317.44946, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353, "t": 343.04031, "r": 382.36545, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 56, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2675018310547, "t": 754.7578125, "r": 523.59357, "b": 763.9957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9552486538887024, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 56, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.689697265625, "t": 754.2295532226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9034480452537537, "cells": [{"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "41"}]}}, {"page_no": 57, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.21815490722656, "t": 754.3350219726562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143346548080444, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31220245361328, "t": 754.725341796875, "r": 334.42142, "b": 763.9521484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546207785606384, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.2745590209961, "t": 70.01868438720703, "r": 283.63077, "b": 86.2046127319336, "coord_origin": "TOPLEFT"}, "confidence": 0.9637309312820435, "cells": [{"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.4054412841797, "t": 102.70518493652344, "r": 514.24524, "b": 112.8113784790039, "coord_origin": "TOPLEFT"}, "confidence": 0.9328395128250122, "cells": [{"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.15525817871094, "t": 304.1411437988281, "r": 327.0066223144531, "b": 313.5270690917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9527500867843628, "cells": [{"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9271240234375, "t": 330.0567321777344, "r": 309.19659, "b": 340.14447021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9125084280967712, "cells": [{"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.67567443847656, "t": 346.7349853515625, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9496878385543823, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.61679077148438, "t": 358.9612731933594, "r": 490.73876953125, "b": 369.148193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950393795967102, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.76889038085938, "t": 370.83758544921875, "r": 376.5744934082031, "b": 381.0343933105469, "coord_origin": "TOPLEFT"}, "confidence": 0.941796600818634, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6211395263672, "t": 382.32257080078125, "r": 384.36783, "b": 393.1546630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414183497428894, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.83248901367188, "t": 394.7557373046875, "r": 320.7999572753906, "b": 405.1979675292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9373244643211365, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.7002716064453, "t": 406.6421813964844, "r": 312.3022155761719, "b": 417.1481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.933269202709198, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 418.73663330078125, "r": 387.66956, "b": 429.0638732910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9468620419502258, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.75306701660156, "t": 430.962890625, "r": 334.12161, "b": 440.8876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9373239874839783, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.65428161621094, "t": 442.6007995605469, "r": 271.91437, "b": 453.1351013183594, "coord_origin": "TOPLEFT"}, "confidence": 0.9312872290611267, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.8694305419922, "t": 454.0513000488281, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}, "confidence": 0.9388870000839233, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.73135375976562, "t": 466.73114013671875, "r": 343.2095031738281, "b": 476.8760070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9516265392303467, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "section_header", "bbox": {"l": 64.17279052734375, "t": 496.611083984375, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}, "confidence": 0.9660991430282593, "cells": [{"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 135.51849365234375, "t": 522.7078857421875, "r": 541.10931, "b": 556.88121, "coord_origin": "TOPLEFT"}, "confidence": 0.9787154197692871, "cells": [{"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "caption", "bbox": {"l": 136.22021484375, "t": 631.5818481445312, "r": 361.25982666015625, "b": 640.684326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.950111448764801, "cells": [{"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 142.3465576171875, "t": 667.8150024414062, "r": 525.7511, "b": 702.261337, "coord_origin": "TOPLEFT"}, "confidence": 0.9773550629615784, "cells": [{"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "picture", "bbox": {"l": 136.12950134277344, "t": 127.06898498535156, "r": 451.212158203125, "b": 301.4627380371094, "coord_origin": "TOPLEFT"}, "confidence": 0.986349880695343, "cells": []}, {"id": 22, "label": "picture", "bbox": {"l": 135.7327880859375, "t": 570.8567504882812, "r": 415.3825988769531, "b": 628.9186401367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9538632035255432, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 57, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.21815490722656, "t": 754.3350219726562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143346548080444, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "42"}, {"label": "page_footer", "id": 1, "page_no": 57, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31220245361328, "t": 754.725341796875, "r": 334.42142, "b": 763.9521484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546207785606384, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 57, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.2745590209961, "t": 70.01868438720703, "r": 283.63077, "b": 86.2046127319336, "coord_origin": "TOPLEFT"}, "confidence": 0.9637309312820435, "cells": [{"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "4.3 Implementation of RCAC"}, {"label": "text", "id": 3, "page_no": 57, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.4054412841797, "t": 102.70518493652344, "r": 514.24524, "b": 112.8113784790039, "coord_origin": "TOPLEFT"}, "confidence": 0.9328395128250122, "cells": [{"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example."}, {"label": "caption", "id": 4, "page_no": 57, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.15525817871094, "t": 304.1411437988281, "r": 327.0066223144531, "b": 313.5270690917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9527500867843628, "cells": [{"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 Data model of the banking scenario"}, {"label": "text", "id": 5, "page_no": 57, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9271240234375, "t": 330.0567321777344, "r": 309.19659, "b": 340.14447021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9125084280967712, "cells": [{"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the following steps:"}, {"label": "list_item", "id": 6, "page_no": 57, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.67567443847656, "t": 346.7349853515625, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9496878385543823, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing the tables that are used in this example"}, {"label": "list_item", "id": 7, "page_no": 57, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.61679077148438, "t": 358.9612731933594, "r": 490.73876953125, "b": 369.148193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950393795967102, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "list_item", "id": 8, "page_no": 57, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.76889038085938, "t": 370.83758544921875, "r": 376.5744934082031, "b": 381.0343933105469, "coord_origin": "TOPLEFT"}, "confidence": 0.941796600818634, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating group profiles for the users and their roles"}, {"label": "list_item", "id": 9, "page_no": 57, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6211395263672, "t": 382.32257080078125, "r": 384.36783, "b": 393.1546630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414183497428894, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 10, "page_no": 57, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.83248901367188, "t": 394.7557373046875, "r": 320.7999572753906, "b": 405.1979675292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9373244643211365, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating row permissions"}, {"label": "list_item", "id": 11, "page_no": 57, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.7002716064453, "t": 406.6421813964844, "r": 312.3022155761719, "b": 417.1481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.933269202709198, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating column masks"}, {"label": "list_item", "id": 12, "page_no": 57, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 418.73663330078125, "r": 387.66956, "b": 429.0638732910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9468620419502258, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Restricting the inserting and updating of masked data"}, {"label": "list_item", "id": 13, "page_no": 57, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.75306701660156, "t": 430.962890625, "r": 334.12161, "b": 440.8876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9373239874839783, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Activating row and column access control"}, {"label": "list_item", "id": 14, "page_no": 57, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.65428161621094, "t": 442.6007995605469, "r": 271.91437, "b": 453.1351013183594, "coord_origin": "TOPLEFT"}, "confidence": 0.9312872290611267, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing row permissions"}, {"label": "list_item", "id": 15, "page_no": 57, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8694305419922, "t": 454.0513000488281, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}, "confidence": 0.9388870000839233, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Demonstrating data access with RCAC"}, {"label": "list_item", "id": 16, "page_no": 57, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.73135375976562, "t": 466.73114013671875, "r": 343.2095031738281, "b": 476.8760070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9516265392303467, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query implementation with RCAC activated"}, {"label": "section_header", "id": 17, "page_no": 57, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.17279052734375, "t": 496.611083984375, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}, "confidence": 0.9660991430282593, "cells": [{"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.1 Reviewing the tables that are used in this example"}, {"label": "text", "id": 18, "page_no": 57, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.51849365234375, "t": 522.7078857421875, "r": 541.10931, "b": 556.88121, "coord_origin": "TOPLEFT"}, "confidence": 0.9787154197692871, "cells": [{"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}]}, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers."}, {"label": "caption", "id": 19, "page_no": 57, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.22021484375, "t": 631.5818481445312, "r": 361.25982666015625, "b": 640.684326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.950111448764801, "cells": [{"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-5 Tables that are used in the banking example"}, {"label": "text", "id": 20, "page_no": 57, "cluster": {"id": 20, "label": "text", "bbox": {"l": 142.3465576171875, "t": 667.8150024414062, "r": 525.7511, "b": 702.261337, "coord_origin": "TOPLEFT"}, "confidence": 0.9773550629615784, "cells": [{"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "picture", "id": 21, "page_no": 57, "cluster": {"id": 21, "label": "picture", "bbox": {"l": 136.12950134277344, "t": 127.06898498535156, "r": 451.212158203125, "b": 301.4627380371094, "coord_origin": "TOPLEFT"}, "confidence": 0.986349880695343, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 22, "page_no": 57, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 135.7327880859375, "t": 570.8567504882812, "r": 415.3825988769531, "b": 628.9186401367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9538632035255432, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 57, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.2745590209961, "t": 70.01868438720703, "r": 283.63077, "b": 86.2046127319336, "coord_origin": "TOPLEFT"}, "confidence": 0.9637309312820435, "cells": [{"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "4.3 Implementation of RCAC"}, {"label": "text", "id": 3, "page_no": 57, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.4054412841797, "t": 102.70518493652344, "r": 514.24524, "b": 112.8113784790039, "coord_origin": "TOPLEFT"}, "confidence": 0.9328395128250122, "cells": [{"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example."}, {"label": "caption", "id": 4, "page_no": 57, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.15525817871094, "t": 304.1411437988281, "r": 327.0066223144531, "b": 313.5270690917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9527500867843628, "cells": [{"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 Data model of the banking scenario"}, {"label": "text", "id": 5, "page_no": 57, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9271240234375, "t": 330.0567321777344, "r": 309.19659, "b": 340.14447021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9125084280967712, "cells": [{"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the following steps:"}, {"label": "list_item", "id": 6, "page_no": 57, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.67567443847656, "t": 346.7349853515625, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9496878385543823, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing the tables that are used in this example"}, {"label": "list_item", "id": 7, "page_no": 57, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.61679077148438, "t": 358.9612731933594, "r": 490.73876953125, "b": 369.148193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950393795967102, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "list_item", "id": 8, "page_no": 57, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.76889038085938, "t": 370.83758544921875, "r": 376.5744934082031, "b": 381.0343933105469, "coord_origin": "TOPLEFT"}, "confidence": 0.941796600818634, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating group profiles for the users and their roles"}, {"label": "list_item", "id": 9, "page_no": 57, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6211395263672, "t": 382.32257080078125, "r": 384.36783, "b": 393.1546630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414183497428894, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 10, "page_no": 57, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.83248901367188, "t": 394.7557373046875, "r": 320.7999572753906, "b": 405.1979675292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9373244643211365, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating row permissions"}, {"label": "list_item", "id": 11, "page_no": 57, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.7002716064453, "t": 406.6421813964844, "r": 312.3022155761719, "b": 417.1481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.933269202709198, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating column masks"}, {"label": "list_item", "id": 12, "page_no": 57, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 418.73663330078125, "r": 387.66956, "b": 429.0638732910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9468620419502258, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Restricting the inserting and updating of masked data"}, {"label": "list_item", "id": 13, "page_no": 57, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.75306701660156, "t": 430.962890625, "r": 334.12161, "b": 440.8876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9373239874839783, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Activating row and column access control"}, {"label": "list_item", "id": 14, "page_no": 57, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.65428161621094, "t": 442.6007995605469, "r": 271.91437, "b": 453.1351013183594, "coord_origin": "TOPLEFT"}, "confidence": 0.9312872290611267, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing row permissions"}, {"label": "list_item", "id": 15, "page_no": 57, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8694305419922, "t": 454.0513000488281, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}, "confidence": 0.9388870000839233, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Demonstrating data access with RCAC"}, {"label": "list_item", "id": 16, "page_no": 57, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.73135375976562, "t": 466.73114013671875, "r": 343.2095031738281, "b": 476.8760070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9516265392303467, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query implementation with RCAC activated"}, {"label": "section_header", "id": 17, "page_no": 57, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.17279052734375, "t": 496.611083984375, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}, "confidence": 0.9660991430282593, "cells": [{"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.1 Reviewing the tables that are used in this example"}, {"label": "text", "id": 18, "page_no": 57, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.51849365234375, "t": 522.7078857421875, "r": 541.10931, "b": 556.88121, "coord_origin": "TOPLEFT"}, "confidence": 0.9787154197692871, "cells": [{"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}]}, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers."}, {"label": "caption", "id": 19, "page_no": 57, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.22021484375, "t": 631.5818481445312, "r": 361.25982666015625, "b": 640.684326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.950111448764801, "cells": [{"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-5 Tables that are used in the banking example"}, {"label": "text", "id": 20, "page_no": 57, "cluster": {"id": 20, "label": "text", "bbox": {"l": 142.3465576171875, "t": 667.8150024414062, "r": 525.7511, "b": 702.261337, "coord_origin": "TOPLEFT"}, "confidence": 0.9773550629615784, "cells": [{"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "picture", "id": 21, "page_no": 57, "cluster": {"id": 21, "label": "picture", "bbox": {"l": 136.12950134277344, "t": 127.06898498535156, "r": 451.212158203125, "b": 301.4627380371094, "coord_origin": "TOPLEFT"}, "confidence": 0.986349880695343, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 22, "page_no": 57, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 135.7327880859375, "t": 570.8567504882812, "r": 415.3825988769531, "b": 628.9186401367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9538632035255432, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 57, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.21815490722656, "t": 754.3350219726562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143346548080444, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "42"}, {"label": "page_footer", "id": 1, "page_no": 57, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31220245361328, "t": 754.725341796875, "r": 334.42142, "b": 763.9521484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546207785606384, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 58, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.2801971435547, "t": 754.7266845703125, "r": 523.59357, "b": 764.0281372070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9543154239654541, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.720947265625, "t": 754.1746215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9061288833618164, "cells": [{"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.93377685546875, "t": 70.66082763671875, "r": 525.07031, "b": 93.04185485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9635977745056152, "cells": [{"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.77842712402344, "t": 97.63013000000001, "r": 543.23035, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9705125689506531, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.044677734375, "t": 128.51512145996094, "r": 546.83588, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9810754060745239, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.25962829589844, "t": 364.7186584472656, "r": 303.7537536621094, "b": 373.983, "coord_origin": "TOPLEFT"}, "confidence": 0.9458591341972351, "cells": [{"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.99163818359375, "t": 390.5973205566406, "r": 517.36163, "b": 413.2025146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9586500525474548, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.40914916992188, "t": 612.3688354492188, "r": 293.8601989746094, "b": 622.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436265826225281, "cells": [{"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.87620544433594, "t": 177.42987060546875, "r": 417.8246765136719, "b": 361.81787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9830227494239807, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 58, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2801971435547, "t": 754.7266845703125, "r": 523.59357, "b": 764.0281372070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9543154239654541, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 58, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.720947265625, "t": 754.1746215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9061288833618164, "cells": [{"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "43"}, {"label": "text", "id": 2, "page_no": 58, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.93377685546875, "t": 70.66082763671875, "r": 525.07031, "b": 93.04185485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9635977745056152, "cells": [{"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To review the attributes of each table that is used in this banking example, complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 58, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.77842712402344, "t": 97.63013000000001, "r": 543.23035, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9705125689506531, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Review the columns of each the tables through System i Navigator. Expand Database \uf0ae named Database \uf0ae Schemas \uf0ae BANK_SCHEMA \uf0ae Tables ."}, {"label": "list_item", "id": 4, "page_no": 58, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.044677734375, "t": 128.51512145996094, "r": 546.83588, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9810754060745239, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented."}, {"label": "caption", "id": 5, "page_no": 58, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.25962829589844, "t": 364.7186584472656, "r": 303.7537536621094, "b": 373.983, "coord_origin": "TOPLEFT"}, "confidence": 0.9458591341972351, "cells": [{"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-6 CUSTOMERS table attributes"}, {"label": "list_item", "id": 6, "page_no": 58, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.99163818359375, "t": 390.5973205566406, "r": 517.36163, "b": 413.2025146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9586500525474548, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7."}, {"label": "caption", "id": 7, "page_no": 58, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.40914916992188, "t": 612.3688354492188, "r": 293.8601989746094, "b": 622.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436265826225281, "cells": [{"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-7 Column definitions of the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 58, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87620544433594, "t": 177.42987060546875, "r": 417.8246765136719, "b": 361.81787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9830227494239807, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 58, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.93377685546875, "t": 70.66082763671875, "r": 525.07031, "b": 93.04185485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9635977745056152, "cells": [{"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To review the attributes of each table that is used in this banking example, complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 58, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.77842712402344, "t": 97.63013000000001, "r": 543.23035, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9705125689506531, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Review the columns of each the tables through System i Navigator. Expand Database \uf0ae named Database \uf0ae Schemas \uf0ae BANK_SCHEMA \uf0ae Tables ."}, {"label": "list_item", "id": 4, "page_no": 58, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.044677734375, "t": 128.51512145996094, "r": 546.83588, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9810754060745239, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented."}, {"label": "caption", "id": 5, "page_no": 58, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.25962829589844, "t": 364.7186584472656, "r": 303.7537536621094, "b": 373.983, "coord_origin": "TOPLEFT"}, "confidence": 0.9458591341972351, "cells": [{"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-6 CUSTOMERS table attributes"}, {"label": "list_item", "id": 6, "page_no": 58, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.99163818359375, "t": 390.5973205566406, "r": 517.36163, "b": 413.2025146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9586500525474548, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7."}, {"label": "caption", "id": 7, "page_no": 58, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.40914916992188, "t": 612.3688354492188, "r": 293.8601989746094, "b": 622.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436265826225281, "cells": [{"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-7 Column definitions of the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 58, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87620544433594, "t": 177.42987060546875, "r": 417.8246765136719, "b": 361.81787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9830227494239807, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 58, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2801971435547, "t": 754.7266845703125, "r": 523.59357, "b": 764.0281372070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9543154239654541, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 58, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.720947265625, "t": 754.1746215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9061288833618164, "cells": [{"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "43"}]}}, {"page_no": 59, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.17613220214844, "t": 754.111572265625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975403904914856, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.36976623535156, "t": 754.63330078125, "r": 334.42142, "b": 764.0048217773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9470958709716797, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.88308715820312, "t": 70.43685150146484, "r": 538.20105, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9693993330001831, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.06980895996094, "t": 308.5224304199219, "r": 396.0132141113281, "b": 317.984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484499096870422, "cells": [{"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2538299560547, "t": 334.63983154296875, "r": 542.19183, "b": 357.26708984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9527929425239563, "cells": [{"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.27098083496094, "t": 563.2742919921875, "r": 297.00921630859375, "b": 572.619384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486443996429443, "cells": [{"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 134.96737670898438, "t": 370.881591796875, "r": 457.1007080078125, "b": 560.7245483398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9808177947998047, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 135.36148071289062, "t": 131.26109313964844, "r": 533.2239379882812, "b": 305.0644836425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9682222604751587, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 59, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17613220214844, "t": 754.111572265625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975403904914856, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "44"}, {"label": "page_footer", "id": 1, "page_no": 59, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36976623535156, "t": 754.63330078125, "r": 334.42142, "b": 764.0048217773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9470958709716797, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 59, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.88308715820312, "t": 70.43685150146484, "r": 538.20105, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9693993330001831, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 59, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06980895996094, "t": 308.5224304199219, "r": 396.0132141113281, "b": 317.984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484499096870422, "cells": [{"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 59, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2538299560547, "t": 334.63983154296875, "r": 542.19183, "b": 357.26708984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9527929425239563, "cells": [{"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}]}, "text": "5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet."}, {"label": "caption", "id": 5, "page_no": 59, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.27098083496094, "t": 563.2742919921875, "r": 297.00921630859375, "b": 572.619384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486443996429443, "cells": [{"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-9 ACCOUNTS table attributes"}, {"label": "picture", "id": 6, "page_no": 59, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 134.96737670898438, "t": 370.881591796875, "r": 457.1007080078125, "b": 560.7245483398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9808177947998047, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 59, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.36148071289062, "t": 131.26109313964844, "r": 533.2239379882812, "b": 305.0644836425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9682222604751587, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 59, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.88308715820312, "t": 70.43685150146484, "r": 538.20105, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9693993330001831, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 59, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06980895996094, "t": 308.5224304199219, "r": 396.0132141113281, "b": 317.984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484499096870422, "cells": [{"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 59, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2538299560547, "t": 334.63983154296875, "r": 542.19183, "b": 357.26708984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9527929425239563, "cells": [{"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}]}, "text": "5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet."}, {"label": "caption", "id": 5, "page_no": 59, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.27098083496094, "t": 563.2742919921875, "r": 297.00921630859375, "b": 572.619384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486443996429443, "cells": [{"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-9 ACCOUNTS table attributes"}, {"label": "picture", "id": 6, "page_no": 59, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 134.96737670898438, "t": 370.881591796875, "r": 457.1007080078125, "b": 560.7245483398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9808177947998047, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 59, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.36148071289062, "t": 131.26109313964844, "r": 533.2239379882812, "b": 305.0644836425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9682222604751587, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 59, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17613220214844, "t": 754.111572265625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975403904914856, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "44"}, {"label": "page_footer", "id": 1, "page_no": 59, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36976623535156, "t": 754.63330078125, "r": 334.42142, "b": 764.0048217773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9470958709716797, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 60, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.28741455078125, "t": 754.7380981445312, "r": 523.59357, "b": 764.0592041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521146416664124, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7454833984375, "t": 754.0681762695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975669741630554, "cells": [{"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.9091033935547, "t": 70.44548034667969, "r": 509.63537999999994, "b": 93.29779815673828, "coord_origin": "TOPLEFT"}, "confidence": 0.9061452746391296, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17601013183594, "t": 237.03350830078125, "r": 291.64111328125, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9145481586456299, "cells": [{"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2264404296875, "t": 263.83184814453125, "r": 538.20105, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9501693248748779, "cells": [{"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.48716735839844, "t": 487.4658203125, "r": 322.23956298828125, "b": 496.8700866699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9331468939781189, "cells": [{"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.629615783691406, "t": 323.9850769042969, "r": 546.4091796875, "b": 483.8927001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9249711632728577, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 60, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.28741455078125, "t": 754.7380981445312, "r": 523.59357, "b": 764.0592041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521146416664124, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 60, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7454833984375, "t": 754.0681762695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975669741630554, "cells": [{"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "45"}, {"label": "list_item", "id": 2, "page_no": 60, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9091033935547, "t": 70.44548034667969, "r": 509.63537999999994, "b": 93.29779815673828, "coord_origin": "TOPLEFT"}, "confidence": 0.9061452746391296, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10."}, {"label": "caption", "id": 3, "page_no": 60, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17601013183594, "t": 237.03350830078125, "r": 291.64111328125, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9145481586456299, "cells": [{"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-10 Column definitions of the ACCOUNTS table"}, {"label": "list_item", "id": 4, "page_no": 60, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2264404296875, "t": 263.83184814453125, "r": 538.20105, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9501693248748779, "cells": [{"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}]}, "text": "7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table."}, {"label": "caption", "id": 5, "page_no": 60, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.48716735839844, "t": 487.4658203125, "r": 322.23956298828125, "b": 496.8700866699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9331468939781189, "cells": [{"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table"}, {"label": "picture", "id": 6, "page_no": 60, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.629615783691406, "t": 323.9850769042969, "r": 546.4091796875, "b": 483.8927001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9249711632728577, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 60, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9091033935547, "t": 70.44548034667969, "r": 509.63537999999994, "b": 93.29779815673828, "coord_origin": "TOPLEFT"}, "confidence": 0.9061452746391296, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10."}, {"label": "caption", "id": 3, "page_no": 60, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17601013183594, "t": 237.03350830078125, "r": 291.64111328125, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9145481586456299, "cells": [{"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-10 Column definitions of the ACCOUNTS table"}, {"label": "list_item", "id": 4, "page_no": 60, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2264404296875, "t": 263.83184814453125, "r": 538.20105, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9501693248748779, "cells": [{"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}]}, "text": "7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table."}, {"label": "caption", "id": 5, "page_no": 60, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.48716735839844, "t": 487.4658203125, "r": 322.23956298828125, "b": 496.8700866699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9331468939781189, "cells": [{"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table"}, {"label": "picture", "id": 6, "page_no": 60, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.629615783691406, "t": 323.9850769042969, "r": 546.4091796875, "b": 483.8927001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9249711632728577, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 60, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.28741455078125, "t": 754.7380981445312, "r": 523.59357, "b": 764.0592041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521146416664124, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 60, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7454833984375, "t": 754.0681762695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975669741630554, "cells": [{"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "45"}]}}, {"page_no": 61, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.11357116699219, "t": 754.0479125976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8953660130500793, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.1781997680664, "t": 754.6085205078125, "r": 334.42142, "b": 764.017578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9389416575431824, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.05352783203125, "t": 70.39522552490234, "r": 547.25958, "b": 93.26668548583984, "coord_origin": "TOPLEFT"}, "confidence": 0.9381867051124573, "cells": [{"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.08340454101562, "t": 299.330322265625, "r": 321.95263671875, "b": 308.88140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9399792551994324, "cells": [{"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.10157775878906, "t": 325.2121887207031, "r": 531.82043, "b": 348.0757141113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9077776670455933, "cells": [{"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.23361206054688, "t": 482.2267150878906, "r": 383.62402, "b": 492.1814270019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9186105132102966, "cells": [{"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 508.458251953125, "r": 547.3941, "b": 554.54103, "coord_origin": "TOPLEFT"}, "confidence": 0.7894290685653687, "cells": [{"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.34345245361328, "t": 724.33056640625, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}, "confidence": 0.927774965763092, "cells": [{"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.87826538085938, "t": 107.37496948242188, "r": 451.5091857910156, "b": 296.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9791154861450195, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 63.676544189453125, "t": 568.8480224609375, "r": 546.6666870117188, "b": 722.6273803710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9123829007148743, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 61, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11357116699219, "t": 754.0479125976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8953660130500793, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "46"}, {"label": "page_footer", "id": 1, "page_no": 61, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1781997680664, "t": 754.6085205078125, "r": 334.42142, "b": 764.017578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9389416575431824, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 61, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05352783203125, "t": 70.39522552490234, "r": 547.25958, "b": 93.26668548583984, "coord_origin": "TOPLEFT"}, "confidence": 0.9381867051124573, "cells": [{"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet."}, {"label": "caption", "id": 3, "page_no": 61, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.08340454101562, "t": 299.330322265625, "r": 321.95263671875, "b": 308.88140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9399792551994324, "cells": [{"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-12 TRANSACTIONS table attributes"}, {"label": "list_item", "id": 4, "page_no": 61, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.10157775878906, "t": 325.2121887207031, "r": 531.82043, "b": 348.0757141113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9077776670455933, "cells": [{"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13."}, {"label": "caption", "id": 5, "page_no": 61, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.23361206054688, "t": 482.2267150878906, "r": 383.62402, "b": 492.1814270019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9186105132102966, "cells": [{"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table"}, {"label": "list_item", "id": 6, "page_no": 61, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 508.458251953125, "r": 547.3941, "b": 554.54103, "coord_origin": "TOPLEFT"}, "confidence": 0.7894290685653687, "cells": [{"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}]}, "text": "10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table."}, {"label": "caption", "id": 7, "page_no": 61, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.34345245361328, "t": 724.33056640625, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}, "confidence": 0.927774965763092, "cells": [{"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table"}, {"label": "picture", "id": 8, "page_no": 61, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87826538085938, "t": 107.37496948242188, "r": 451.5091857910156, "b": 296.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9791154861450195, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 61, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.676544189453125, "t": 568.8480224609375, "r": 546.6666870117188, "b": 722.6273803710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9123829007148743, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 61, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05352783203125, "t": 70.39522552490234, "r": 547.25958, "b": 93.26668548583984, "coord_origin": "TOPLEFT"}, "confidence": 0.9381867051124573, "cells": [{"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet."}, {"label": "caption", "id": 3, "page_no": 61, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.08340454101562, "t": 299.330322265625, "r": 321.95263671875, "b": 308.88140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9399792551994324, "cells": [{"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-12 TRANSACTIONS table attributes"}, {"label": "list_item", "id": 4, "page_no": 61, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.10157775878906, "t": 325.2121887207031, "r": 531.82043, "b": 348.0757141113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9077776670455933, "cells": [{"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13."}, {"label": "caption", "id": 5, "page_no": 61, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.23361206054688, "t": 482.2267150878906, "r": 383.62402, "b": 492.1814270019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9186105132102966, "cells": [{"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table"}, {"label": "list_item", "id": 6, "page_no": 61, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 508.458251953125, "r": 547.3941, "b": 554.54103, "coord_origin": "TOPLEFT"}, "confidence": 0.7894290685653687, "cells": [{"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}]}, "text": "10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table."}, {"label": "caption", "id": 7, "page_no": 61, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.34345245361328, "t": 724.33056640625, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}, "confidence": 0.927774965763092, "cells": [{"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table"}, {"label": "picture", "id": 8, "page_no": 61, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87826538085938, "t": 107.37496948242188, "r": 451.5091857910156, "b": 296.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9791154861450195, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 61, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.676544189453125, "t": 568.8480224609375, "r": 546.6666870117188, "b": 722.6273803710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9123829007148743, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 61, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11357116699219, "t": 754.0479125976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8953660130500793, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "46"}, {"label": "page_footer", "id": 1, "page_no": 61, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1781997680664, "t": 754.6085205078125, "r": 334.42142, "b": 764.017578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9389416575431824, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 62, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.25257873535156, "t": 754.7490234375, "r": 523.59357, "b": 764.0389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526394605636597, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6387939453125, "t": 754.2075805664062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9067078232765198, "cells": [{"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.23085021972656, "t": 70.71146392822266, "r": 527.00562, "b": 92.8815689086914, "coord_origin": "TOPLEFT"}, "confidence": 0.9731295108795166, "cells": [{"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.15889739990234, "t": 112.25782775878906, "r": 532.11951, "b": 141.6817169189453, "coord_origin": "TOPLEFT"}, "confidence": 0.9485021233558655, "cells": [{"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.7303466796875, "t": 154.53631591796875, "r": 531.98792, "b": 188.7343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9785159826278687, "cells": [{"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 136.1609649658203, "t": 200.50624084472656, "r": 266.86069, "b": 211.13751220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.8128474354743958, "cells": [{"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.48870849609375, "t": 217.26614379882812, "r": 544.54364, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9693723320960999, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.063720703125, "t": 493.6786193847656, "r": 292.96966552734375, "b": 502.8232727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.948575496673584, "cells": [{"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.87820434570312, "t": 254.07247924804688, "r": 343.8211669921875, "b": 492.20819091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855658411979675, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 62, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.25257873535156, "t": 754.7490234375, "r": 523.59357, "b": 764.0389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526394605636597, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 62, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6387939453125, "t": 754.2075805664062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9067078232765198, "cells": [{"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "47"}, {"label": "text", "id": 2, "page_no": 62, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.23085021972656, "t": 70.71146392822266, "r": 527.00562, "b": 92.8815689086914, "coord_origin": "TOPLEFT"}, "confidence": 0.9731295108795166, "cells": [{"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario."}, {"label": "section_header", "id": 3, "page_no": 62, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.15889739990234, "t": 112.25782775878906, "r": 532.11951, "b": 141.6817169189453, "coord_origin": "TOPLEFT"}, "confidence": 0.9485021233558655, "cells": [{"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "text", "id": 4, "page_no": 62, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7303466796875, "t": 154.53631591796875, "r": 531.98792, "b": 188.7343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9785159826278687, "cells": [{"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, \u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA."}, {"label": "section_header", "id": 5, "page_no": 62, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.1609649658203, "t": 200.50624084472656, "r": 266.86069, "b": 211.13751220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.8128474354743958, "cells": [{"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 62, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.48870849609375, "t": 217.26614379882812, "r": 544.54364, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9693723320960999, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "1. Right-click the database connection and select Application Administration , as shown in Figure 4-15."}, {"label": "caption", "id": 7, "page_no": 62, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.063720703125, "t": 493.6786193847656, "r": 292.96966552734375, "b": 502.8232727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.948575496673584, "cells": [{"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-15 Application administration"}, {"label": "picture", "id": 8, "page_no": 62, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87820434570312, "t": 254.07247924804688, "r": 343.8211669921875, "b": 492.20819091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855658411979675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 62, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.23085021972656, "t": 70.71146392822266, "r": 527.00562, "b": 92.8815689086914, "coord_origin": "TOPLEFT"}, "confidence": 0.9731295108795166, "cells": [{"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario."}, {"label": "section_header", "id": 3, "page_no": 62, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.15889739990234, "t": 112.25782775878906, "r": 532.11951, "b": 141.6817169189453, "coord_origin": "TOPLEFT"}, "confidence": 0.9485021233558655, "cells": [{"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "text", "id": 4, "page_no": 62, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7303466796875, "t": 154.53631591796875, "r": 531.98792, "b": 188.7343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9785159826278687, "cells": [{"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, \u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA."}, {"label": "section_header", "id": 5, "page_no": 62, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.1609649658203, "t": 200.50624084472656, "r": 266.86069, "b": 211.13751220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.8128474354743958, "cells": [{"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 62, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.48870849609375, "t": 217.26614379882812, "r": 544.54364, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9693723320960999, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "1. Right-click the database connection and select Application Administration , as shown in Figure 4-15."}, {"label": "caption", "id": 7, "page_no": 62, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.063720703125, "t": 493.6786193847656, "r": 292.96966552734375, "b": 502.8232727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.948575496673584, "cells": [{"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-15 Application administration"}, {"label": "picture", "id": 8, "page_no": 62, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87820434570312, "t": 254.07247924804688, "r": 343.8211669921875, "b": 492.20819091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855658411979675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 62, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.25257873535156, "t": 754.7490234375, "r": 523.59357, "b": 764.0389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526394605636597, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 62, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6387939453125, "t": 754.2075805664062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9067078232765198, "cells": [{"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "47"}]}}, {"page_no": 63, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1659164428711, "t": 754.1441040039062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9094043970108032, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31367492675781, "t": 754.6023559570312, "r": 334.42142, "b": 764.0177001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9526337385177612, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.7973175048828, "t": 68.65014999999994, "r": 530.211, "b": 93.15596771240234, "coord_origin": "TOPLEFT"}, "confidence": 0.9675157070159912, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.85130310058594, "t": 391.84564208984375, "r": 329.4411315917969, "b": 401.4302673339844, "coord_origin": "TOPLEFT"}, "confidence": 0.9492601156234741, "cells": [{"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.79788208007812, "t": 417.66436767578125, "r": 544.57233, "b": 440.6051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9629845023155212, "cells": [{"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.05140686035156, "t": 612.469482421875, "r": 459.4308776855469, "b": 622.1511840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9522164463996887, "cells": [{"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.17874145507812, "t": 107.1623306274414, "r": 527.1444702148438, "b": 388.9134826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9870592355728149, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 136.42279052734375, "t": 454.41522216796875, "r": 528.0494384765625, "b": 610.991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.986380398273468, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 63, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1659164428711, "t": 754.1441040039062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9094043970108032, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "48"}, {"label": "page_footer", "id": 1, "page_no": 63, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31367492675781, "t": 754.6023559570312, "r": 334.42142, "b": 764.0177001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9526337385177612, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 63, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.7973175048828, "t": 68.65014999999994, "r": 530.211, "b": 93.15596771240234, "coord_origin": "TOPLEFT"}, "confidence": 0.9675157070159912, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i \uf0ae Database and select the function usage ID of Database Security Administrator ."}, {"label": "caption", "id": 3, "page_no": 63, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.85130310058594, "t": 391.84564208984375, "r": 329.4411315917969, "b": 401.4302673339844, "coord_origin": "TOPLEFT"}, "confidence": 0.9492601156234741, "cells": [{"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-16 Application administration for IBM i"}, {"label": "list_item", "id": 4, "page_no": 63, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.79788208007812, "t": 417.66436767578125, "r": 544.57233, "b": 440.6051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9629845023155212, "cells": [{"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17."}, {"label": "caption", "id": 5, "page_no": 63, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.05140686035156, "t": 612.469482421875, "r": 459.4308776855469, "b": 622.1511840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9522164463996887, "cells": [{"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID"}, {"label": "picture", "id": 6, "page_no": 63, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.17874145507812, "t": 107.1623306274414, "r": 527.1444702148438, "b": 388.9134826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9870592355728149, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 63, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.42279052734375, "t": 454.41522216796875, "r": 528.0494384765625, "b": 610.991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.986380398273468, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 63, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.7973175048828, "t": 68.65014999999994, "r": 530.211, "b": 93.15596771240234, "coord_origin": "TOPLEFT"}, "confidence": 0.9675157070159912, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i \uf0ae Database and select the function usage ID of Database Security Administrator ."}, {"label": "caption", "id": 3, "page_no": 63, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.85130310058594, "t": 391.84564208984375, "r": 329.4411315917969, "b": 401.4302673339844, "coord_origin": "TOPLEFT"}, "confidence": 0.9492601156234741, "cells": [{"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-16 Application administration for IBM i"}, {"label": "list_item", "id": 4, "page_no": 63, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.79788208007812, "t": 417.66436767578125, "r": 544.57233, "b": 440.6051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9629845023155212, "cells": [{"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17."}, {"label": "caption", "id": 5, "page_no": 63, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.05140686035156, "t": 612.469482421875, "r": 459.4308776855469, "b": 622.1511840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9522164463996887, "cells": [{"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID"}, {"label": "picture", "id": 6, "page_no": 63, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.17874145507812, "t": 107.1623306274414, "r": 527.1444702148438, "b": 388.9134826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9870592355728149, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 63, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.42279052734375, "t": 454.41522216796875, "r": 528.0494384765625, "b": 610.991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.986380398273468, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 63, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1659164428711, "t": 754.1441040039062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9094043970108032, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "48"}, {"label": "page_footer", "id": 1, "page_no": 63, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31367492675781, "t": 754.6023559570312, "r": 334.42142, "b": 764.0177001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9526337385177612, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 64, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.2803955078125, "t": 754.738525390625, "r": 523.59357, "b": 764.0549926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.956462025642395, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.666015625, "t": 754.0488891601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9085332155227661, "cells": [{"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.78591918945312, "t": 70.48530578613281, "r": 547.19739, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9741643071174622, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.0041961669922, "t": 404.69866943359375, "r": 297.5841369628906, "b": 413.9527282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9453438520431519, "cells": [{"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.253173828125, "t": 430.48211669921875, "r": 537.65015, "b": 465.2202453613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9763842225074768, "cells": [{"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.03775024414062, "t": 470.50812, "r": 484.38336181640625, "b": 583.2213134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9760020971298218, "cells": [{"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.1788787841797, "t": 586.18408203125, "r": 443.8726501464844, "b": 595.6748046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9425281286239624, "cells": [{"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.3659210205078, "t": 118.70867919921875, "r": 485.6257629394531, "b": 401.78082275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9869308471679688, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 64, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2803955078125, "t": 754.738525390625, "r": 523.59357, "b": 764.0549926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.956462025642395, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 64, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.666015625, "t": 754.0488891601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9085332155227661, "cells": [{"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "49"}, {"label": "list_item", "id": 2, "page_no": 64, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78591918945312, "t": 70.48530578613281, "r": 547.19739, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9741643071174622, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK ."}, {"label": "caption", "id": 3, "page_no": 64, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.0041961669922, "t": 404.69866943359375, "r": 297.5841369628906, "b": 413.9527282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9453438520431519, "cells": [{"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-18 Customize Access window"}, {"label": "list_item", "id": 4, "page_no": 64, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.253173828125, "t": 430.48211669921875, "r": 537.65015, "b": 465.2202453613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9763842225074768, "cells": [{"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}]}, "text": "5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19."}, {"label": "picture", "id": 5, "page_no": 64, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.03775024414062, "t": 470.50812, "r": 484.38336181640625, "b": 583.2213134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9760020971298218, "cells": [{"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 6, "page_no": 64, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1788787841797, "t": 586.18408203125, "r": 443.8726501464844, "b": 595.6748046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9425281286239624, "cells": [{"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-19 Function usage ID Database Security Administrator customized"}, {"label": "picture", "id": 7, "page_no": 64, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.3659210205078, "t": 118.70867919921875, "r": 485.6257629394531, "b": 401.78082275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9869308471679688, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 64, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78591918945312, "t": 70.48530578613281, "r": 547.19739, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9741643071174622, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK ."}, {"label": "caption", "id": 3, "page_no": 64, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.0041961669922, "t": 404.69866943359375, "r": 297.5841369628906, "b": 413.9527282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9453438520431519, "cells": [{"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-18 Customize Access window"}, {"label": "list_item", "id": 4, "page_no": 64, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.253173828125, "t": 430.48211669921875, "r": 537.65015, "b": 465.2202453613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9763842225074768, "cells": [{"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}]}, "text": "5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19."}, {"label": "picture", "id": 5, "page_no": 64, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.03775024414062, "t": 470.50812, "r": 484.38336181640625, "b": 583.2213134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9760020971298218, "cells": [{"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 6, "page_no": 64, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1788787841797, "t": 586.18408203125, "r": 443.8726501464844, "b": 595.6748046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9425281286239624, "cells": [{"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-19 Function usage ID Database Security Administrator customized"}, {"label": "picture", "id": 7, "page_no": 64, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.3659210205078, "t": 118.70867919921875, "r": 485.6257629394531, "b": 401.78082275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9869308471679688, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 64, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2803955078125, "t": 754.738525390625, "r": 523.59357, "b": 764.0549926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.956462025642395, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 64, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.666015625, "t": 754.0488891601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9085332155227661, "cells": [{"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "49"}]}}, {"page_no": 65, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.19255828857422, "t": 754.3742065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9205988645553589, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27255249023438, "t": 754.7175903320312, "r": 334.42142, "b": 763.9406127929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9552856683731079, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.97772216796875, "t": 70.58170318603516, "r": 545.57037, "b": 93.28826904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537994265556335, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3402557373047, "t": 274.47186279296875, "r": 438.3047790527344, "b": 284.2582702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9432975053787231, "cells": [{"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.06755065917969, "t": 303.6237487792969, "r": 418.56525, "b": 317.0628662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9638302326202393, "cells": [{"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.84303283691406, "t": 329.9059143066406, "r": 547.27246, "b": 376.3108825683594, "coord_origin": "TOPLEFT"}, "confidence": 0.986221194267273, "cells": [{"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.06056213378906, "t": 387.9443054199219, "r": 266.86069, "b": 398.36285400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7973853349685669, "cells": [{"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.78126525878906, "t": 404.716552734375, "r": 535.9978, "b": 427.2034606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.966343879699707, "cells": [{"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 136.255126953125, "t": 590.8622436523438, "r": 281.4906005859375, "b": 600.1361083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9437876343727112, "cells": [{"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 135.67332458496094, "t": 441.32366943359375, "r": 358.52606201171875, "b": 587.8834228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837242364883423, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 134.8684539794922, "t": 107.64208984375, "r": 447.195556640625, "b": 272.4745788574219, "coord_origin": "TOPLEFT"}, "confidence": 0.7622372508049011, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 65, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19255828857422, "t": 754.3742065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9205988645553589, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "50"}, {"label": "page_footer", "id": 1, "page_no": 65, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27255249023438, "t": 754.7175903320312, "r": 334.42142, "b": 763.9406127929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9552856683731079, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 65, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97772216796875, "t": 70.58170318603516, "r": 545.57037, "b": 93.28826904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537994265556335, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20."}, {"label": "caption", "id": 3, "page_no": 65, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3402557373047, "t": 274.47186279296875, "r": 438.3047790527344, "b": 284.2582702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9432975053787231, "cells": [{"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC"}, {"label": "section_header", "id": 4, "page_no": 65, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.06755065917969, "t": 303.6237487792969, "r": 418.56525, "b": 317.0628662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9638302326202393, "cells": [{"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.3 Creating group profiles for the users and their roles"}, {"label": "text", "id": 5, "page_no": 65, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84303283691406, "t": 329.9059143066406, "r": 547.27246, "b": 376.3108825683594, "coord_origin": "TOPLEFT"}, "confidence": 0.986221194267273, "cells": [{"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}]}, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, \u201cDescription of the users roles and responsibilities\u201d on page 39."}, {"label": "section_header", "id": 6, "page_no": 65, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.06056213378906, "t": 387.9443054199219, "r": 266.86069, "b": 398.36285400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7973853349685669, "cells": [{"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 65, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.78126525878906, "t": 404.716552734375, "r": 535.9978, "b": 427.2034606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.966343879699707, "cells": [{"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}]}, "text": "1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21."}, {"label": "caption", "id": 8, "page_no": 65, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.255126953125, "t": 590.8622436523438, "r": 281.4906005859375, "b": 600.1361083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9437876343727112, "cells": [{"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-21 Creating group profiles"}, {"label": "picture", "id": 9, "page_no": 65, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.67332458496094, "t": 441.32366943359375, "r": 358.52606201171875, "b": 587.8834228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837242364883423, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 65, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 134.8684539794922, "t": 107.64208984375, "r": 447.195556640625, "b": 272.4745788574219, "coord_origin": "TOPLEFT"}, "confidence": 0.7622372508049011, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 65, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97772216796875, "t": 70.58170318603516, "r": 545.57037, "b": 93.28826904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537994265556335, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20."}, {"label": "caption", "id": 3, "page_no": 65, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3402557373047, "t": 274.47186279296875, "r": 438.3047790527344, "b": 284.2582702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9432975053787231, "cells": [{"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC"}, {"label": "section_header", "id": 4, "page_no": 65, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.06755065917969, "t": 303.6237487792969, "r": 418.56525, "b": 317.0628662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9638302326202393, "cells": [{"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.3 Creating group profiles for the users and their roles"}, {"label": "text", "id": 5, "page_no": 65, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84303283691406, "t": 329.9059143066406, "r": 547.27246, "b": 376.3108825683594, "coord_origin": "TOPLEFT"}, "confidence": 0.986221194267273, "cells": [{"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}]}, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, \u201cDescription of the users roles and responsibilities\u201d on page 39."}, {"label": "section_header", "id": 6, "page_no": 65, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.06056213378906, "t": 387.9443054199219, "r": 266.86069, "b": 398.36285400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7973853349685669, "cells": [{"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 65, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.78126525878906, "t": 404.716552734375, "r": 535.9978, "b": 427.2034606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.966343879699707, "cells": [{"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}]}, "text": "1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21."}, {"label": "caption", "id": 8, "page_no": 65, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.255126953125, "t": 590.8622436523438, "r": 281.4906005859375, "b": 600.1361083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9437876343727112, "cells": [{"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-21 Creating group profiles"}, {"label": "picture", "id": 9, "page_no": 65, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.67332458496094, "t": 441.32366943359375, "r": 358.52606201171875, "b": 587.8834228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837242364883423, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 65, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 134.8684539794922, "t": 107.64208984375, "r": 447.195556640625, "b": 272.4745788574219, "coord_origin": "TOPLEFT"}, "confidence": 0.7622372508049011, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 65, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19255828857422, "t": 754.3742065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9205988645553589, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "50"}, {"label": "page_footer", "id": 1, "page_no": 65, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27255249023438, "t": 754.7175903320312, "r": 334.42142, "b": 763.9406127929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9552856683731079, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 66, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30003356933594, "t": 754.7357177734375, "r": 523.59357, "b": 764.0491333007812, "coord_origin": "TOPLEFT"}, "confidence": 0.956891655921936, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7405395507812, "t": 754.3246459960938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9111406803131104, "cells": [{"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.031005859375, "t": 70.50956726074219, "r": 547.20844, "b": 104.95550537109375, "coord_origin": "TOPLEFT"}, "confidence": 0.976949155330658, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 150.73487854003906, "t": 111.0660400390625, "r": 482.46234000000004, "b": 121.75677490234375, "coord_origin": "TOPLEFT"}, "confidence": 0.7767043113708496, "cells": [{"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.369873046875, "t": 363.4606018066406, "r": 352.9217834472656, "b": 372.808837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455896019935608, "cells": [{"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.0438232421875, "t": 389.4517822265625, "r": 537.61829, "b": 411.7866516113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9663872122764587, "cells": [{"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.12078857421875, "t": 553.0734252929688, "r": 303.932373046875, "b": 562.2108764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9498841166496277, "cells": [{"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.2171630859375, "t": 135.30877685546875, "r": 474.1829528808594, "b": 361.1051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9854894280433655, "cells": []}, {"id": 8, "label": "picture", "bbox": {"l": 136.2489471435547, "t": 425.68438720703125, "r": 269.5424499511719, "b": 550.3474731445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9837116599082947, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 66, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30003356933594, "t": 754.7357177734375, "r": 523.59357, "b": 764.0491333007812, "coord_origin": "TOPLEFT"}, "confidence": 0.956891655921936, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 66, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7405395507812, "t": 754.3246459960938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9111406803131104, "cells": [{"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "51"}, {"label": "list_item", "id": 2, "page_no": 66, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.031005859375, "t": 70.50956726074219, "r": 547.20844, "b": 104.95550537109375, "coord_origin": "TOPLEFT"}, "confidence": 0.976949155330658, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add ."}, {"label": "text", "id": 3, "page_no": 66, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.73487854003906, "t": 111.0660400390625, "r": 482.46234000000004, "b": 121.75677490234375, "coord_origin": "TOPLEFT"}, "confidence": 0.7767043113708496, "cells": [{"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile."}, {"label": "caption", "id": 4, "page_no": 66, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.369873046875, "t": 363.4606018066406, "r": 352.9217834472656, "b": 372.808837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455896019935608, "cells": [{"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 Creating group profiles and adding users"}, {"label": "list_item", "id": 5, "page_no": 66, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.0438232421875, "t": 389.4517822265625, "r": 537.61829, "b": 411.7866516113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9663872122764587, "cells": [{"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups \uf0ae Groups , as shown in Figure 4-23."}, {"label": "caption", "id": 6, "page_no": 66, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.12078857421875, "t": 553.0734252929688, "r": 303.932373046875, "b": 562.2108764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9498841166496277, "cells": [{"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-23 Newly created group profiles"}, {"label": "picture", "id": 7, "page_no": 66, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2171630859375, "t": 135.30877685546875, "r": 474.1829528808594, "b": 361.1051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9854894280433655, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 66, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.2489471435547, "t": 425.68438720703125, "r": 269.5424499511719, "b": 550.3474731445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9837116599082947, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 66, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.031005859375, "t": 70.50956726074219, "r": 547.20844, "b": 104.95550537109375, "coord_origin": "TOPLEFT"}, "confidence": 0.976949155330658, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add ."}, {"label": "text", "id": 3, "page_no": 66, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.73487854003906, "t": 111.0660400390625, "r": 482.46234000000004, "b": 121.75677490234375, "coord_origin": "TOPLEFT"}, "confidence": 0.7767043113708496, "cells": [{"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile."}, {"label": "caption", "id": 4, "page_no": 66, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.369873046875, "t": 363.4606018066406, "r": 352.9217834472656, "b": 372.808837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455896019935608, "cells": [{"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 Creating group profiles and adding users"}, {"label": "list_item", "id": 5, "page_no": 66, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.0438232421875, "t": 389.4517822265625, "r": 537.61829, "b": 411.7866516113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9663872122764587, "cells": [{"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups \uf0ae Groups , as shown in Figure 4-23."}, {"label": "caption", "id": 6, "page_no": 66, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.12078857421875, "t": 553.0734252929688, "r": 303.932373046875, "b": 562.2108764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9498841166496277, "cells": [{"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-23 Newly created group profiles"}, {"label": "picture", "id": 7, "page_no": 66, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2171630859375, "t": 135.30877685546875, "r": 474.1829528808594, "b": 361.1051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9854894280433655, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 66, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.2489471435547, "t": 425.68438720703125, "r": 269.5424499511719, "b": 550.3474731445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9837116599082947, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 66, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30003356933594, "t": 754.7357177734375, "r": 523.59357, "b": 764.0491333007812, "coord_origin": "TOPLEFT"}, "confidence": 0.956891655921936, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 66, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7405395507812, "t": 754.3246459960938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9111406803131104, "cells": [{"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "51"}]}}, {"page_no": 67, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1907958984375, "t": 754.3226928710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162147045135498, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31280517578125, "t": 754.688720703125, "r": 334.42142, "b": 763.898193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9516439437866211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.14804077148438, "t": 70.27552795410156, "r": 420.28372, "b": 83.57343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9602196216583252, "cells": [{"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.99069213867188, "t": 96.89618682861328, "r": 545.77252, "b": 131.00881958007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9838969707489014, "cells": [{"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.14224243164062, "t": 142.52076721191406, "r": 266.86069, "b": 152.9317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8107734322547913, "cells": [{"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.56494140625, "t": 159.2626495361328, "r": 535.943603515625, "b": 181.82007, "coord_origin": "TOPLEFT"}, "confidence": 0.9734883904457092, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.03294372558594, "t": 407.6881408691406, "r": 292.05377197265625, "b": 416.7829284667969, "coord_origin": "TOPLEFT"}, "confidence": 0.9526056051254272, "cells": [{"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.92572021484375, "t": 433.5293884277344, "r": 541.19196, "b": 479.4812927246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9796995520591736, "cells": [{"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.31603240966797, "t": 710.88671875, "r": 347.040283203125, "b": 720.9501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9492066502571106, "cells": [{"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 135.9110107421875, "t": 195.97637939453125, "r": 454.9993896484375, "b": 405.2922058105469, "coord_origin": "TOPLEFT"}, "confidence": 0.987210750579834, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 64.25324249267578, "t": 493.0924987792969, "r": 546.2809448242188, "b": 708.3674926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9863254427909851, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 67, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1907958984375, "t": 754.3226928710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162147045135498, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "52"}, {"label": "page_footer", "id": 1, "page_no": 67, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31280517578125, "t": 754.688720703125, "r": 334.42142, "b": 763.898193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9516439437866211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 67, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.14804077148438, "t": 70.27552795410156, "r": 420.28372, "b": 83.57343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9602196216583252, "cells": [{"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "text", "id": 3, "page_no": 67, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99069213867188, "t": 96.89618682861328, "r": 545.77252, "b": 131.00881958007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9838969707489014, "cells": [{"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19."}, {"label": "section_header", "id": 4, "page_no": 67, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.14224243164062, "t": 142.52076721191406, "r": 266.86069, "b": 152.9317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8107734322547913, "cells": [{"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 67, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.56494140625, "t": 159.2626495361328, "r": 535.943603515625, "b": 181.82007, "coord_origin": "TOPLEFT"}, "confidence": 0.9734883904457092, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New \uf0ae Global Variable , as shown in Figure 4-24."}, {"label": "caption", "id": 6, "page_no": 67, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.03294372558594, "t": 407.6881408691406, "r": 292.05377197265625, "b": 416.7829284667969, "coord_origin": "TOPLEFT"}, "confidence": 0.9526056051254272, "cells": [{"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-24 Creating a global variable"}, {"label": "list_item", "id": 7, "page_no": 67, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.92572021484375, "t": 433.5293884277344, "r": 541.19196, "b": 479.4812927246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9796995520591736, "cells": [{"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK ."}, {"label": "caption", "id": 8, "page_no": 67, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.31603240966797, "t": 710.88671875, "r": 347.040283203125, "b": 720.9501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9492066502571106, "cells": [{"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID"}, {"label": "picture", "id": 9, "page_no": 67, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9110107421875, "t": 195.97637939453125, "r": 454.9993896484375, "b": 405.2922058105469, "coord_origin": "TOPLEFT"}, "confidence": 0.987210750579834, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 67, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 64.25324249267578, "t": 493.0924987792969, "r": 546.2809448242188, "b": 708.3674926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9863254427909851, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 67, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.14804077148438, "t": 70.27552795410156, "r": 420.28372, "b": 83.57343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9602196216583252, "cells": [{"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "text", "id": 3, "page_no": 67, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99069213867188, "t": 96.89618682861328, "r": 545.77252, "b": 131.00881958007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9838969707489014, "cells": [{"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19."}, {"label": "section_header", "id": 4, "page_no": 67, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.14224243164062, "t": 142.52076721191406, "r": 266.86069, "b": 152.9317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8107734322547913, "cells": [{"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 67, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.56494140625, "t": 159.2626495361328, "r": 535.943603515625, "b": 181.82007, "coord_origin": "TOPLEFT"}, "confidence": 0.9734883904457092, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New \uf0ae Global Variable , as shown in Figure 4-24."}, {"label": "caption", "id": 6, "page_no": 67, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.03294372558594, "t": 407.6881408691406, "r": 292.05377197265625, "b": 416.7829284667969, "coord_origin": "TOPLEFT"}, "confidence": 0.9526056051254272, "cells": [{"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-24 Creating a global variable"}, {"label": "list_item", "id": 7, "page_no": 67, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.92572021484375, "t": 433.5293884277344, "r": 541.19196, "b": 479.4812927246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9796995520591736, "cells": [{"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK ."}, {"label": "caption", "id": 8, "page_no": 67, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.31603240966797, "t": 710.88671875, "r": 347.040283203125, "b": 720.9501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9492066502571106, "cells": [{"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID"}, {"label": "picture", "id": 9, "page_no": 67, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9110107421875, "t": 195.97637939453125, "r": 454.9993896484375, "b": 405.2922058105469, "coord_origin": "TOPLEFT"}, "confidence": 0.987210750579834, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 67, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 64.25324249267578, "t": 493.0924987792969, "r": 546.2809448242188, "b": 708.3674926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9863254427909851, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 67, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1907958984375, "t": 754.3226928710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162147045135498, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "52"}, {"label": "page_footer", "id": 1, "page_no": 67, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31280517578125, "t": 754.688720703125, "r": 334.42142, "b": 763.898193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9516439437866211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 68, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.31678771972656, "t": 754.7354125976562, "r": 523.59357, "b": 764.0438232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9558536410331726, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7046508789062, "t": 754.34130859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125332832336426, "cells": [{"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.12977600097656, "t": 70.7454833984375, "r": 547.25427, "b": 104.7872085571289, "coord_origin": "TOPLEFT"}, "confidence": 0.9774090051651001, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.95867919921875, "t": 241.98797607421875, "r": 457.0142822265625, "b": 251.3716278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9472981095314026, "cells": [{"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.82858276367188, "t": 267.8819274902344, "r": 534.23877, "b": 290.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9716678857803345, "cells": [{"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.15591430664062, "t": 578.5726318359375, "r": 540.3552856445312, "b": 588.1502075195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9472869038581848, "cells": [{"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.84584045410156, "t": 303.6470031738281, "r": 547.677978515625, "b": 576.6021118164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9863014221191406, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 136.07814025878906, "t": 119.34014892578125, "r": 346.28375244140625, "b": 239.5808868408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9723811745643616, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 68, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31678771972656, "t": 754.7354125976562, "r": 523.59357, "b": 764.0438232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9558536410331726, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 68, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7046508789062, "t": 754.34130859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125332832336426, "cells": [{"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "53"}, {"label": "list_item", "id": 2, "page_no": 68, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.12977600097656, "t": 70.7454833984375, "r": 547.25427, "b": 104.7872085571289, "coord_origin": "TOPLEFT"}, "confidence": 0.9774090051651001, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26."}, {"label": "caption", "id": 3, "page_no": 68, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.95867919921875, "t": 241.98797607421875, "r": 457.0142822265625, "b": 251.3716278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9472981095314026, "cells": [{"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 4, "page_no": 68, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.82858276367188, "t": 267.8819274902344, "r": 534.23877, "b": 290.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9716678857803345, "cells": [{"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable."}, {"label": "caption", "id": 5, "page_no": 68, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.15591430664062, "t": 578.5726318359375, "r": 540.3552856445312, "b": 588.1502075195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9472869038581848, "cells": [{"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable"}, {"label": "picture", "id": 6, "page_no": 68, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.84584045410156, "t": 303.6470031738281, "r": 547.677978515625, "b": 576.6021118164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9863014221191406, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 68, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.07814025878906, "t": 119.34014892578125, "r": 346.28375244140625, "b": 239.5808868408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9723811745643616, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 68, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.12977600097656, "t": 70.7454833984375, "r": 547.25427, "b": 104.7872085571289, "coord_origin": "TOPLEFT"}, "confidence": 0.9774090051651001, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26."}, {"label": "caption", "id": 3, "page_no": 68, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.95867919921875, "t": 241.98797607421875, "r": 457.0142822265625, "b": 251.3716278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9472981095314026, "cells": [{"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 4, "page_no": 68, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.82858276367188, "t": 267.8819274902344, "r": 534.23877, "b": 290.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9716678857803345, "cells": [{"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable."}, {"label": "caption", "id": 5, "page_no": 68, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.15591430664062, "t": 578.5726318359375, "r": 540.3552856445312, "b": 588.1502075195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9472869038581848, "cells": [{"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable"}, {"label": "picture", "id": 6, "page_no": 68, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.84584045410156, "t": 303.6470031738281, "r": 547.677978515625, "b": 576.6021118164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9863014221191406, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 68, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.07814025878906, "t": 119.34014892578125, "r": 346.28375244140625, "b": 239.5808868408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9723811745643616, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 68, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31678771972656, "t": 754.7354125976562, "r": 523.59357, "b": 764.0438232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9558536410331726, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 68, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7046508789062, "t": 754.34130859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125332832336426, "cells": [{"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "53"}]}}, {"page_no": 69, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.29161071777344, "t": 754.29296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131852984428406, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.33383178710938, "t": 754.6670532226562, "r": 334.42142, "b": 763.9429321289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9536429047584534, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.21206665039062, "t": 70.20098876953125, "r": 339.95895, "b": 83.59224700927734, "coord_origin": "TOPLEFT"}, "confidence": 0.9649859070777893, "cells": [{"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9742889404297, "t": 96.73395538330078, "r": 527.37946, "b": 106.9632339477539, "coord_origin": "TOPLEFT"}, "confidence": 0.9519023299217224, "cells": [{"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.758056640625, "t": 111.66974000000005, "r": 530.75983, "b": 148.32473754882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9718437194824219, "cells": [{"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.1620330810547, "t": 422.876953125, "r": 314.04541015625, "b": 432.17633056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444904327392578, "cells": [{"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.3912811279297, "t": 161.90283203125, "r": 467.3126220703125, "b": 420.1808166503906, "coord_origin": "TOPLEFT"}, "confidence": 0.9873494505882263, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 69, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29161071777344, "t": 754.29296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131852984428406, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "54"}, {"label": "page_footer", "id": 1, "page_no": 69, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33383178710938, "t": 754.6670532226562, "r": 334.42142, "b": 763.9429321289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9536429047584534, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 69, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.21206665039062, "t": 70.20098876953125, "r": 339.95895, "b": 83.59224700927734, "coord_origin": "TOPLEFT"}, "confidence": 0.9649859070777893, "cells": [{"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.5 Defining and creating row permissions"}, {"label": "text", "id": 3, "page_no": 69, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9742889404297, "t": 96.73395538330078, "r": 527.37946, "b": 106.9632339477539, "coord_origin": "TOPLEFT"}, "confidence": 0.9519023299217224, "cells": [{"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "You now ready to define the row permissions of the tables. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 69, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.758056640625, "t": 111.66974000000005, "r": 530.75983, "b": 148.32473754882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9718437194824219, "cells": [{"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Row Permissions , and select New \uf0ae Row Permission , as shown in Figure 4-28."}, {"label": "caption", "id": 5, "page_no": 69, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.1620330810547, "t": 422.876953125, "r": 314.04541015625, "b": 432.17633056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444904327392578, "cells": [{"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-28 Selecting new row permissions"}, {"label": "picture", "id": 6, "page_no": 69, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.3912811279297, "t": 161.90283203125, "r": 467.3126220703125, "b": 420.1808166503906, "coord_origin": "TOPLEFT"}, "confidence": 0.9873494505882263, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 69, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.21206665039062, "t": 70.20098876953125, "r": 339.95895, "b": 83.59224700927734, "coord_origin": "TOPLEFT"}, "confidence": 0.9649859070777893, "cells": [{"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.5 Defining and creating row permissions"}, {"label": "text", "id": 3, "page_no": 69, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9742889404297, "t": 96.73395538330078, "r": 527.37946, "b": 106.9632339477539, "coord_origin": "TOPLEFT"}, "confidence": 0.9519023299217224, "cells": [{"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "You now ready to define the row permissions of the tables. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 69, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.758056640625, "t": 111.66974000000005, "r": 530.75983, "b": 148.32473754882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9718437194824219, "cells": [{"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Row Permissions , and select New \uf0ae Row Permission , as shown in Figure 4-28."}, {"label": "caption", "id": 5, "page_no": 69, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.1620330810547, "t": 422.876953125, "r": 314.04541015625, "b": 432.17633056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444904327392578, "cells": [{"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-28 Selecting new row permissions"}, {"label": "picture", "id": 6, "page_no": 69, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.3912811279297, "t": 161.90283203125, "r": 467.3126220703125, "b": 420.1808166503906, "coord_origin": "TOPLEFT"}, "confidence": 0.9873494505882263, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 69, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29161071777344, "t": 754.29296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131852984428406, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "54"}, {"label": "page_footer", "id": 1, "page_no": 69, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33383178710938, "t": 754.6670532226562, "r": 334.42142, "b": 763.9429321289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9536429047584534, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 70, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.24986267089844, "t": 754.7130737304688, "r": 523.59357, "b": 764.043212890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545792937278748, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6702270507812, "t": 754.3177490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9093314409255981, "cells": [{"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.03018188476562, "t": 70.50949096679688, "r": 544.50513, "b": 104.85425567626953, "coord_origin": "TOPLEFT"}, "confidence": 0.9784817099571228, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.3019256591797, "t": 111.28250122070312, "r": 542.18152, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9687250852584839, "cells": [{"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.4884796142578, "t": 140.4087677001953, "r": 537.78314, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983960747718811, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.66030883789062, "t": 217.47354125976562, "r": 381.32654, "b": 227.79330444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9481797814369202, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 151.00958251953125, "t": 234.5278778076172, "r": 314.76883, "b": 245.11355590820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7769520878791809, "cells": [{"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 135.95968627929688, "t": 529.3792114257812, "r": 384.6536865234375, "b": 538.73486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.947584867477417, "cells": [{"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.22802734375, "t": 258.7868347167969, "r": 507.9937438964844, "b": 526.5271606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9844093918800354, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 70, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.24986267089844, "t": 754.7130737304688, "r": 523.59357, "b": 764.043212890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545792937278748, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 70, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6702270507812, "t": 754.3177490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9093314409255981, "cells": [{"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "55"}, {"label": "list_item", "id": 2, "page_no": 70, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03018188476562, "t": 70.50949096679688, "r": 544.50513, "b": 104.85425567626953, "coord_origin": "TOPLEFT"}, "confidence": 0.9784817099571228, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 70, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.3019256591797, "t": 111.28250122070312, "r": 542.18152, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9687250852584839, "cells": [{"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 70, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.4884796142578, "t": 140.4087677001953, "r": 537.78314, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983960747718811, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 70, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.66030883789062, "t": 217.47354125976562, "r": 381.32654, "b": 227.79330444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9481797814369202, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 70, "cluster": {"id": 6, "label": "text", "bbox": {"l": 151.00958251953125, "t": 234.5278778076172, "r": 314.76883, "b": 245.11355590820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7769520878791809, "cells": [{"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 70, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.95968627929688, "t": 529.3792114257812, "r": 384.6536865234375, "b": 538.73486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.947584867477417, "cells": [{"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-29 New row permissions on the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 70, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.22802734375, "t": 258.7868347167969, "r": 507.9937438964844, "b": 526.5271606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9844093918800354, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 70, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03018188476562, "t": 70.50949096679688, "r": 544.50513, "b": 104.85425567626953, "coord_origin": "TOPLEFT"}, "confidence": 0.9784817099571228, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 70, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.3019256591797, "t": 111.28250122070312, "r": 542.18152, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9687250852584839, "cells": [{"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 70, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.4884796142578, "t": 140.4087677001953, "r": 537.78314, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983960747718811, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 70, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.66030883789062, "t": 217.47354125976562, "r": 381.32654, "b": 227.79330444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9481797814369202, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 70, "cluster": {"id": 6, "label": "text", "bbox": {"l": 151.00958251953125, "t": 234.5278778076172, "r": 314.76883, "b": 245.11355590820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7769520878791809, "cells": [{"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 70, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.95968627929688, "t": 529.3792114257812, "r": 384.6536865234375, "b": 538.73486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.947584867477417, "cells": [{"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-29 New row permissions on the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 70, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.22802734375, "t": 258.7868347167969, "r": 507.9937438964844, "b": 526.5271606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9844093918800354, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 70, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.24986267089844, "t": 754.7130737304688, "r": 523.59357, "b": 764.043212890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545792937278748, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 70, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6702270507812, "t": 754.3177490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9093314409255981, "cells": [{"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "55"}]}}, {"page_no": 71, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.20973205566406, "t": 754.2777099609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9139277338981628, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28527069091797, "t": 754.64208984375, "r": 334.42142, "b": 763.944091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527794718742371, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.20513916015625, "t": 70.595458984375, "r": 543.83636, "b": 117.18975830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9810321927070618, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.44004821777344, "t": 123.32445526123047, "r": 539.45398, "b": 145.70074, "coord_origin": "TOPLEFT"}, "confidence": 0.9677587151527405, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.2493438720703, "t": 152.3936767578125, "r": 537.75769, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9846922159194946, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.43359375, "t": 229.4423370361328, "r": 381.32697, "b": 239.7835235595703, "coord_origin": "TOPLEFT"}, "confidence": 0.9531306028366089, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.8797149658203, "t": 246.4891815185547, "r": 314.76926, "b": 256.9587707519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8528881072998047, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.3364486694336, "t": 584.8099365234375, "r": 305.99822998046875, "b": 594.063, "coord_origin": "TOPLEFT"}, "confidence": 0.9497343897819519, "cells": [{"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 63.957679748535156, "t": 270.48822021484375, "r": 540.6087646484375, "b": 582.9116821289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9854897260665894, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 71, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20973205566406, "t": 754.2777099609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9139277338981628, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "56"}, {"label": "page_footer", "id": 1, "page_no": 71, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28527069091797, "t": 754.64208984375, "r": 334.42142, "b": 763.944091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527794718742371, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 71, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20513916015625, "t": 70.595458984375, "r": 543.83636, "b": 117.18975830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9810321927070618, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 71, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.44004821777344, "t": 123.32445526123047, "r": 539.45398, "b": 145.70074, "coord_origin": "TOPLEFT"}, "confidence": 0.9677587151527405, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 71, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2493438720703, "t": 152.3936767578125, "r": 537.75769, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9846922159194946, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 71, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.43359375, "t": 229.4423370361328, "r": 381.32697, "b": 239.7835235595703, "coord_origin": "TOPLEFT"}, "confidence": 0.9531306028366089, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 71, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.8797149658203, "t": 246.4891815185547, "r": 314.76926, "b": 256.9587707519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8528881072998047, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 71, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.3364486694336, "t": 584.8099365234375, "r": 305.99822998046875, "b": 594.063, "coord_origin": "TOPLEFT"}, "confidence": 0.9497343897819519, "cells": [{"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-30 New row permissions on the ACCOUNTS table"}, {"label": "picture", "id": 8, "page_no": 71, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.957679748535156, "t": 270.48822021484375, "r": 540.6087646484375, "b": 582.9116821289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9854897260665894, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 71, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20513916015625, "t": 70.595458984375, "r": 543.83636, "b": 117.18975830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9810321927070618, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 71, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.44004821777344, "t": 123.32445526123047, "r": 539.45398, "b": 145.70074, "coord_origin": "TOPLEFT"}, "confidence": 0.9677587151527405, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 71, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2493438720703, "t": 152.3936767578125, "r": 537.75769, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9846922159194946, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 71, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.43359375, "t": 229.4423370361328, "r": 381.32697, "b": 239.7835235595703, "coord_origin": "TOPLEFT"}, "confidence": 0.9531306028366089, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 71, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.8797149658203, "t": 246.4891815185547, "r": 314.76926, "b": 256.9587707519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8528881072998047, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 71, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.3364486694336, "t": 584.8099365234375, "r": 305.99822998046875, "b": 594.063, "coord_origin": "TOPLEFT"}, "confidence": 0.9497343897819519, "cells": [{"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-30 New row permissions on the ACCOUNTS table"}, {"label": "picture", "id": 8, "page_no": 71, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.957679748535156, "t": 270.48822021484375, "r": 540.6087646484375, "b": 582.9116821289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9854897260665894, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 71, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20973205566406, "t": 754.2777099609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9139277338981628, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "56"}, {"label": "page_footer", "id": 1, "page_no": 71, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28527069091797, "t": 754.64208984375, "r": 334.42142, "b": 763.944091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527794718742371, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 72, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.22891235351562, "t": 754.7304077148438, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545765519142151, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5846557617188, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9055094718933105, "cells": [{"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.74258422851562, "t": 70.44811248779297, "r": 529.90491, "b": 116.96112823486328, "coord_origin": "TOPLEFT"}, "confidence": 0.9810266494750977, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.45989990234375, "t": 123.25712585449219, "r": 547.22925, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9677688479423523, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.29940795898438, "t": 152.36669921875, "r": 537.78314, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983658492565155, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.38229370117188, "t": 306.10906982421875, "r": 381.32654, "b": 316.44915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9394587874412537, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.89027404785156, "t": 322.4906311035156, "r": 314.76883, "b": 333.08697509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.7668123245239258, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.22490692138672, "t": 713.5319213867188, "r": 325.5702819824219, "b": 722.9600830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502029418945312, "cells": [{"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 170.69351196289062, "t": 240.3377685546875, "r": 533.39197, "b": 286.7464904785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9755160808563232, "cells": [{"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 63.73027801513672, "t": 346.8805236816406, "r": 535.9136352539062, "b": 711.4491577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9856986403465271, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 72, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.22891235351562, "t": 754.7304077148438, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545765519142151, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 72, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5846557617188, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9055094718933105, "cells": [{"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "57"}, {"label": "list_item", "id": 2, "page_no": 72, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.74258422851562, "t": 70.44811248779297, "r": 529.90491, "b": 116.96112823486328, "coord_origin": "TOPLEFT"}, "confidence": 0.9810266494750977, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 72, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.45989990234375, "t": 123.25712585449219, "r": 547.22925, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9677688479423523, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows."}, {"label": "list_item", "id": 4, "page_no": 72, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.29940795898438, "t": 152.36669921875, "r": 537.78314, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983658492565155, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 72, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.38229370117188, "t": 306.10906982421875, "r": 381.32654, "b": 316.44915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9394587874412537, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 72, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.89027404785156, "t": 322.4906311035156, "r": 314.76883, "b": 333.08697509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.7668123245239258, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 72, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.22490692138672, "t": 713.5319213867188, "r": 325.5702819824219, "b": 722.9600830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502029418945312, "cells": [{"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table"}, {"label": "text", "id": 8, "page_no": 72, "cluster": {"id": 8, "label": "text", "bbox": {"l": 170.69351196289062, "t": 240.3377685546875, "r": 533.39197, "b": 286.7464904785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9755160808563232, "cells": [{"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}]}, "text": "Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored."}, {"label": "picture", "id": 9, "page_no": 72, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.73027801513672, "t": 346.8805236816406, "r": 535.9136352539062, "b": 711.4491577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9856986403465271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 72, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.74258422851562, "t": 70.44811248779297, "r": 529.90491, "b": 116.96112823486328, "coord_origin": "TOPLEFT"}, "confidence": 0.9810266494750977, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 72, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.45989990234375, "t": 123.25712585449219, "r": 547.22925, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9677688479423523, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows."}, {"label": "list_item", "id": 4, "page_no": 72, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.29940795898438, "t": 152.36669921875, "r": 537.78314, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983658492565155, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 72, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.38229370117188, "t": 306.10906982421875, "r": 381.32654, "b": 316.44915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9394587874412537, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 72, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.89027404785156, "t": 322.4906311035156, "r": 314.76883, "b": 333.08697509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.7668123245239258, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 72, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.22490692138672, "t": 713.5319213867188, "r": 325.5702819824219, "b": 722.9600830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502029418945312, "cells": [{"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table"}, {"label": "text", "id": 8, "page_no": 72, "cluster": {"id": 8, "label": "text", "bbox": {"l": 170.69351196289062, "t": 240.3377685546875, "r": 533.39197, "b": 286.7464904785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9755160808563232, "cells": [{"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}]}, "text": "Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored."}, {"label": "picture", "id": 9, "page_no": 72, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.73027801513672, "t": 346.8805236816406, "r": 535.9136352539062, "b": 711.4491577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9856986403465271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 72, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.22891235351562, "t": 754.7304077148438, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545765519142151, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 72, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5846557617188, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9055094718933105, "cells": [{"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "57"}]}}, {"page_no": 73, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.232666015625, "t": 754.386474609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160420298576355, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35807037353516, "t": 754.7005615234375, "r": 334.42142, "b": 763.9410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541155695915222, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.36386108398438, "t": 70.54908752441406, "r": 521.19122, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9746115207672119, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.27239227294922, "t": 274.6299133300781, "r": 292.91876220703125, "b": 283.9879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9361065626144409, "cells": [{"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.21476745605469, "t": 303.8726806640625, "r": 327.40588, "b": 317.2160339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9644060134887695, "cells": [{"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.03562927246094, "t": 329.9996337890625, "r": 479.42001000000005, "b": 340.2921142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9330124855041504, "cells": [{"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 344.64999, "r": 523.07068, "b": 381.08123779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9756982922554016, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.1403350830078, "t": 571.737060546875, "r": 287.95941162109375, "b": 581.0671997070312, "coord_origin": "TOPLEFT"}, "confidence": 0.947037935256958, "cells": [{"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.1191864013672, "t": 395.1215515136719, "r": 456.9282531738281, "b": 568.6239013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855613112449646, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 64.10432434082031, "t": 119.99431610107422, "r": 545.318603515625, "b": 271.414306640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9836570024490356, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 73, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.232666015625, "t": 754.386474609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160420298576355, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "58"}, {"label": "page_footer", "id": 1, "page_no": 73, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35807037353516, "t": 754.7005615234375, "r": 334.42142, "b": 763.9410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541155695915222, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 73, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.36386108398438, "t": 70.54908752441406, "r": 521.19122, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9746115207672119, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled."}, {"label": "caption", "id": 3, "page_no": 73, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27239227294922, "t": 274.6299133300781, "r": 292.91876220703125, "b": 283.9879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9361065626144409, "cells": [{"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 73, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21476745605469, "t": 303.8726806640625, "r": 327.40588, "b": 317.2160339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9644060134887695, "cells": [{"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.6 Defining and creating column masks"}, {"label": "text", "id": 5, "page_no": 73, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.03562927246094, "t": 329.9996337890625, "r": 479.42001000000005, "b": 340.2921142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9330124855041504, "cells": [{"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}]}, "text": "This section defines the masks on the columns. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 73, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 344.64999, "r": 523.07068, "b": 381.08123779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9756982922554016, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the main navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Column Masks , and select New \uf0ae Column Mask , as shown in Figure 4-33."}, {"label": "caption", "id": 7, "page_no": 73, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1403350830078, "t": 571.737060546875, "r": 287.95941162109375, "b": 581.0671997070312, "coord_origin": "TOPLEFT"}, "confidence": 0.947037935256958, "cells": [{"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-33 Creating a column mask"}, {"label": "picture", "id": 8, "page_no": 73, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.1191864013672, "t": 395.1215515136719, "r": 456.9282531738281, "b": 568.6239013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855613112449646, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 73, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.10432434082031, "t": 119.99431610107422, "r": 545.318603515625, "b": 271.414306640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9836570024490356, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 73, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.36386108398438, "t": 70.54908752441406, "r": 521.19122, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9746115207672119, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled."}, {"label": "caption", "id": 3, "page_no": 73, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27239227294922, "t": 274.6299133300781, "r": 292.91876220703125, "b": 283.9879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9361065626144409, "cells": [{"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 73, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21476745605469, "t": 303.8726806640625, "r": 327.40588, "b": 317.2160339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9644060134887695, "cells": [{"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.6 Defining and creating column masks"}, {"label": "text", "id": 5, "page_no": 73, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.03562927246094, "t": 329.9996337890625, "r": 479.42001000000005, "b": 340.2921142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9330124855041504, "cells": [{"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}]}, "text": "This section defines the masks on the columns. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 73, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 344.64999, "r": 523.07068, "b": 381.08123779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9756982922554016, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the main navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Column Masks , and select New \uf0ae Column Mask , as shown in Figure 4-33."}, {"label": "caption", "id": 7, "page_no": 73, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1403350830078, "t": 571.737060546875, "r": 287.95941162109375, "b": 581.0671997070312, "coord_origin": "TOPLEFT"}, "confidence": 0.947037935256958, "cells": [{"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-33 Creating a column mask"}, {"label": "picture", "id": 8, "page_no": 73, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.1191864013672, "t": 395.1215515136719, "r": 456.9282531738281, "b": 568.6239013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855613112449646, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 73, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.10432434082031, "t": 119.99431610107422, "r": 545.318603515625, "b": 271.414306640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9836570024490356, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 73, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.232666015625, "t": 754.386474609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160420298576355, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "58"}, {"label": "page_footer", "id": 1, "page_no": 73, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35807037353516, "t": 754.7005615234375, "r": 334.42142, "b": 763.9410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541155695915222, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 74, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.23280334472656, "t": 754.7346801757812, "r": 523.59357, "b": 763.9798583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9574586153030396, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6565551757812, "t": 754.1910400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9153223633766174, "cells": [{"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.03579711914062, "t": 70.76680755615234, "r": 524.10217, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.935202956199646, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.32827758789062, "t": 99.3359375, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9387155175209045, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.2732391357422, "t": 111.13023376464844, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9359274506568909, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.39305114746094, "t": 123.64397430419922, "r": 531.30621, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9761620759963989, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.79855346679688, "t": 164.49195861816406, "r": 314.76685, "b": 175.1024627685547, "coord_origin": "TOPLEFT"}, "confidence": 0.7048681974411011, "cells": [{"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 135.8140106201172, "t": 604.765380859375, "r": 395.16131591796875, "b": 614.04291, "coord_origin": "TOPLEFT"}, "confidence": 0.9423272013664246, "cells": [{"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.26536560058594, "t": 630.8367919921875, "r": 522.03296, "b": 641.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.8807461857795715, "cells": [{"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.44378662109375, "t": 647.1741943359375, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}, "confidence": 0.9306973814964294, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.36248779296875, "t": 659.518798828125, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}, "confidence": 0.9286901354789734, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.4147491455078, "t": 671.4402465820312, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}, "confidence": 0.9449449777603149, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 151.27947998046875, "t": 683.0931396484375, "r": 379.591064453125, "b": 693.92086, "coord_origin": "TOPLEFT"}, "confidence": 0.924078106880188, "cells": [{"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 151.41717529296875, "t": 695.0255737304688, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}, "confidence": 0.9357948303222656, "cells": [{"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 151.33258056640625, "t": 707.4501953125, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}, "confidence": 0.9366948008537292, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 136.62161254882812, "t": 188.8601531982422, "r": 533.3434448242188, "b": 602.5858154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9852358102798462, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 74, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.23280334472656, "t": 754.7346801757812, "r": 523.59357, "b": 763.9798583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9574586153030396, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 74, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6565551757812, "t": 754.1910400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9153223633766174, "cells": [{"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "59"}, {"label": "list_item", "id": 2, "page_no": 74, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03579711914062, "t": 70.76680755615234, "r": 524.10217, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.935202956199646, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information:"}, {"label": "list_item", "id": 3, "page_no": 74, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.32827758789062, "t": 99.3359375, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9387155175209045, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the CUSTOMERS table on which to create the column mask."}, {"label": "list_item", "id": 4, "page_no": 74, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2732391357422, "t": 111.13023376464844, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9359274506568909, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the Column to mask; in this example, it is CUSTOMER_EMAIL."}, {"label": "list_item", "id": 5, "page_no": 74, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.39305114746094, "t": 123.64397430419922, "r": 531.30621, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9761620759963989, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****."}, {"label": "text", "id": 6, "page_no": 74, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.79855346679688, "t": 164.49195861816406, "r": 314.76685, "b": 175.1024627685547, "coord_origin": "TOPLEFT"}, "confidence": 0.7048681974411011, "cells": [{"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 74, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.8140106201172, "t": 604.765380859375, "r": 395.16131591796875, "b": 614.04291, "coord_origin": "TOPLEFT"}, "confidence": 0.9423272013664246, "cells": [{"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table"}, {"label": "list_item", "id": 8, "page_no": 74, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.26536560058594, "t": 630.8367919921875, "r": 522.03296, "b": 641.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.8807461857795715, "cells": [{"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}]}, "text": "3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns:"}, {"label": "list_item", "id": 9, "page_no": 74, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.44378662109375, "t": 647.1741943359375, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}, "confidence": 0.9306973814964294, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_DRIVERS_LICENSE_ON_CUSTOMERS"}, {"label": "list_item", "id": 10, "page_no": 74, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.36248779296875, "t": 659.518798828125, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}, "confidence": 0.9286901354789734, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_LOGIN_ID_ON_CUSTOMERS"}, {"label": "list_item", "id": 11, "page_no": 74, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4147491455078, "t": 671.4402465820312, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}, "confidence": 0.9449449777603149, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS"}, {"label": "list_item", "id": 12, "page_no": 74, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.27947998046875, "t": 683.0931396484375, "r": 379.591064453125, "b": 693.92086, "coord_origin": "TOPLEFT"}, "confidence": 0.924078106880188, "cells": [{"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_ACCOUNT_NUMBER_ON_ACCOUNTS"}, {"label": "list_item", "id": 13, "page_no": 74, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 151.41717529296875, "t": 695.0255737304688, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}, "confidence": 0.9357948303222656, "cells": [{"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ON_CUSTOMERS"}, {"label": "list_item", "id": 14, "page_no": 74, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 151.33258056640625, "t": 707.4501953125, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}, "confidence": 0.9366948008537292, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_TAX_ID_ON_CUSTOMERS"}, {"label": "picture", "id": 15, "page_no": 74, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.62161254882812, "t": 188.8601531982422, "r": 533.3434448242188, "b": 602.5858154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9852358102798462, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 74, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03579711914062, "t": 70.76680755615234, "r": 524.10217, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.935202956199646, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information:"}, {"label": "list_item", "id": 3, "page_no": 74, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.32827758789062, "t": 99.3359375, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9387155175209045, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the CUSTOMERS table on which to create the column mask."}, {"label": "list_item", "id": 4, "page_no": 74, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2732391357422, "t": 111.13023376464844, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9359274506568909, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the Column to mask; in this example, it is CUSTOMER_EMAIL."}, {"label": "list_item", "id": 5, "page_no": 74, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.39305114746094, "t": 123.64397430419922, "r": 531.30621, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9761620759963989, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****."}, {"label": "text", "id": 6, "page_no": 74, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.79855346679688, "t": 164.49195861816406, "r": 314.76685, "b": 175.1024627685547, "coord_origin": "TOPLEFT"}, "confidence": 0.7048681974411011, "cells": [{"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 74, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.8140106201172, "t": 604.765380859375, "r": 395.16131591796875, "b": 614.04291, "coord_origin": "TOPLEFT"}, "confidence": 0.9423272013664246, "cells": [{"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table"}, {"label": "list_item", "id": 8, "page_no": 74, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.26536560058594, "t": 630.8367919921875, "r": 522.03296, "b": 641.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.8807461857795715, "cells": [{"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}]}, "text": "3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns:"}, {"label": "list_item", "id": 9, "page_no": 74, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.44378662109375, "t": 647.1741943359375, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}, "confidence": 0.9306973814964294, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_DRIVERS_LICENSE_ON_CUSTOMERS"}, {"label": "list_item", "id": 10, "page_no": 74, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.36248779296875, "t": 659.518798828125, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}, "confidence": 0.9286901354789734, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_LOGIN_ID_ON_CUSTOMERS"}, {"label": "list_item", "id": 11, "page_no": 74, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4147491455078, "t": 671.4402465820312, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}, "confidence": 0.9449449777603149, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS"}, {"label": "list_item", "id": 12, "page_no": 74, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.27947998046875, "t": 683.0931396484375, "r": 379.591064453125, "b": 693.92086, "coord_origin": "TOPLEFT"}, "confidence": 0.924078106880188, "cells": [{"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_ACCOUNT_NUMBER_ON_ACCOUNTS"}, {"label": "list_item", "id": 13, "page_no": 74, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 151.41717529296875, "t": 695.0255737304688, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}, "confidence": 0.9357948303222656, "cells": [{"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ON_CUSTOMERS"}, {"label": "list_item", "id": 14, "page_no": 74, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 151.33258056640625, "t": 707.4501953125, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}, "confidence": 0.9366948008537292, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_TAX_ID_ON_CUSTOMERS"}, {"label": "picture", "id": 15, "page_no": 74, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.62161254882812, "t": 188.8601531982422, "r": 533.3434448242188, "b": 602.5858154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9852358102798462, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 74, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.23280334472656, "t": 754.7346801757812, "r": 523.59357, "b": 763.9798583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9574586153030396, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 74, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6565551757812, "t": 754.1910400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9153223633766174, "cells": [{"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "59"}]}}, {"page_no": 75, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.13931274414062, "t": 754.37646484375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9181943535804749, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2583236694336, "t": 754.7027587890625, "r": 334.42142, "b": 763.9403686523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9538118243217468, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.86886596679688, "t": 70.40605926513672, "r": 525.70728, "b": 92.86236572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9647813439369202, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.10326385498047, "t": 183.41061401367188, "r": 285.1827087402344, "b": 192.7096710205078, "coord_origin": "TOPLEFT"}, "confidence": 0.9432595372200012, "cells": [{"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.0513916015625, "t": 212.59413146972656, "r": 433.79065, "b": 225.7198028564453, "coord_origin": "TOPLEFT"}, "confidence": 0.9636105895042419, "cells": [{"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.85455322265625, "t": 238.7532196044922, "r": 544.92688, "b": 284.9345397949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9866855144500732, "cells": [{"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.1099090576172, "t": 296.4962158203125, "r": 266.86069, "b": 307.0681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8199454545974731, "cells": [{"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.3522491455078, "t": 313.09881591796875, "r": 547.19568, "b": 347.6925048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9741182923316956, "cells": [{"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 135.78135681152344, "t": 471.4366455078125, "r": 334.3720397949219, "b": 480.8490295410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9464175701141357, "cells": [{"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.75648498535156, "t": 497.3858337402344, "r": 547.73962, "b": 519.6641845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9690989851951599, "cells": [{"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 64.25939178466797, "t": 602.9214477539062, "r": 221.74893188476562, "b": 612.18291, "coord_origin": "TOPLEFT"}, "confidence": 0.9495618343353271, "cells": [{"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 136.29519653320312, "t": 362.13775634765625, "r": 545.3217163085938, "b": 468.5462951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.983352780342102, "cells": []}, {"id": 12, "label": "picture", "bbox": {"l": 64.00347900390625, "t": 533.6920776367188, "r": 546.5211181640625, "b": 600.8970947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9819415807723999, "cells": []}, {"id": 13, "label": "picture", "bbox": {"l": 64.02095031738281, "t": 107.45484924316406, "r": 547.409912109375, "b": 180.8109893798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9703426361083984, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 75, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.13931274414062, "t": 754.37646484375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9181943535804749, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "60"}, {"label": "page_footer", "id": 1, "page_no": 75, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2583236694336, "t": 754.7027587890625, "r": 334.42142, "b": 763.9403686523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9538118243217468, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 75, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.86886596679688, "t": 70.40605926513672, "r": 525.70728, "b": 92.86236572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9647813439369202, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled."}, {"label": "caption", "id": 3, "page_no": 75, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.10326385498047, "t": 183.41061401367188, "r": 285.1827087402344, "b": 192.7096710205078, "coord_origin": "TOPLEFT"}, "confidence": 0.9432595372200012, "cells": [{"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-35 List of column masks on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 75, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.0513916015625, "t": 212.59413146972656, "r": 433.79065, "b": 225.7198028564453, "coord_origin": "TOPLEFT"}, "confidence": 0.9636105895042419, "cells": [{"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.7 Restricting the inserting and updating of masked data"}, {"label": "text", "id": 5, "page_no": 75, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85455322265625, "t": 238.7532196044922, "r": 544.92688, "b": 284.9345397949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9866855144500732, "cells": [{"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}]}, "text": "This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on page 108."}, {"label": "section_header", "id": 6, "page_no": 75, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.1099090576172, "t": 296.4962158203125, "r": 266.86069, "b": 307.0681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8199454545974731, "cells": [{"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 75, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.3522491455078, "t": 313.09881591796875, "r": 547.19568, "b": 347.6925048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9741182923316956, "cells": [{"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36"}, {"label": "caption", "id": 8, "page_no": 75, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.78135681152344, "t": 471.4366455078125, "r": 334.3720397949219, "b": 480.8490295410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9464175701141357, "cells": [{"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-36 Definition of the CUSTOMERS table"}, {"label": "list_item", "id": 9, "page_no": 75, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75648498535156, "t": 497.3858337402344, "r": 547.73962, "b": 519.6641845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9690989851951599, "cells": [{"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}]}, "text": "2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37."}, {"label": "caption", "id": 10, "page_no": 75, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.25939178466797, "t": 602.9214477539062, "r": 221.74893188476562, "b": 612.18291, "coord_origin": "TOPLEFT"}, "confidence": 0.9495618343353271, "cells": [{"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-37 Adding a check constraint"}, {"label": "picture", "id": 11, "page_no": 75, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.29519653320312, "t": 362.13775634765625, "r": 545.3217163085938, "b": 468.5462951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.983352780342102, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 75, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 64.00347900390625, "t": 533.6920776367188, "r": 546.5211181640625, "b": 600.8970947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9819415807723999, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 13, "page_no": 75, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 64.02095031738281, "t": 107.45484924316406, "r": 547.409912109375, "b": 180.8109893798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9703426361083984, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 75, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.86886596679688, "t": 70.40605926513672, "r": 525.70728, "b": 92.86236572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9647813439369202, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled."}, {"label": "caption", "id": 3, "page_no": 75, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.10326385498047, "t": 183.41061401367188, "r": 285.1827087402344, "b": 192.7096710205078, "coord_origin": "TOPLEFT"}, "confidence": 0.9432595372200012, "cells": [{"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-35 List of column masks on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 75, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.0513916015625, "t": 212.59413146972656, "r": 433.79065, "b": 225.7198028564453, "coord_origin": "TOPLEFT"}, "confidence": 0.9636105895042419, "cells": [{"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.7 Restricting the inserting and updating of masked data"}, {"label": "text", "id": 5, "page_no": 75, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85455322265625, "t": 238.7532196044922, "r": 544.92688, "b": 284.9345397949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9866855144500732, "cells": [{"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}]}, "text": "This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on page 108."}, {"label": "section_header", "id": 6, "page_no": 75, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.1099090576172, "t": 296.4962158203125, "r": 266.86069, "b": 307.0681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8199454545974731, "cells": [{"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 75, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.3522491455078, "t": 313.09881591796875, "r": 547.19568, "b": 347.6925048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9741182923316956, "cells": [{"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36"}, {"label": "caption", "id": 8, "page_no": 75, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.78135681152344, "t": 471.4366455078125, "r": 334.3720397949219, "b": 480.8490295410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9464175701141357, "cells": [{"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-36 Definition of the CUSTOMERS table"}, {"label": "list_item", "id": 9, "page_no": 75, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75648498535156, "t": 497.3858337402344, "r": 547.73962, "b": 519.6641845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9690989851951599, "cells": [{"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}]}, "text": "2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37."}, {"label": "caption", "id": 10, "page_no": 75, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.25939178466797, "t": 602.9214477539062, "r": 221.74893188476562, "b": 612.18291, "coord_origin": "TOPLEFT"}, "confidence": 0.9495618343353271, "cells": [{"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-37 Adding a check constraint"}, {"label": "picture", "id": 11, "page_no": 75, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.29519653320312, "t": 362.13775634765625, "r": 545.3217163085938, "b": 468.5462951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.983352780342102, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 75, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 64.00347900390625, "t": 533.6920776367188, "r": 546.5211181640625, "b": 600.8970947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9819415807723999, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 13, "page_no": 75, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 64.02095031738281, "t": 107.45484924316406, "r": 547.409912109375, "b": 180.8109893798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9703426361083984, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 75, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.13931274414062, "t": 754.37646484375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9181943535804749, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "60"}, {"label": "page_footer", "id": 1, "page_no": 75, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2583236694336, "t": 754.7027587890625, "r": 334.42142, "b": 763.9403686523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9538118243217468, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 76, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.33963012695312, "t": 754.6822509765625, "r": 523.59357, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9542582035064697, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6194458007812, "t": 754.259521484375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9045737385749817, "cells": [{"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.19448852539062, "t": 70.60295867919922, "r": 515.81549, "b": 92.99156951904297, "coord_origin": "TOPLEFT"}, "confidence": 0.9727184176445007, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 150.47923278808594, "t": 99.40367889404297, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9255325794219971, "cells": [{"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 150.597412109375, "t": 116.41293334960938, "r": 541.59985, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9738664627075195, "cells": [{"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.6071319580078, "t": 145.43560791015625, "r": 511.92703, "b": 155.8599853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9509996175765991, "cells": [{"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 64.2974853515625, "t": 653.2451782226562, "r": 362.4355773925781, "b": 662.75830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9486740827560425, "cells": [{"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 63.89818572998047, "t": 169.34371948242188, "r": 543.365966796875, "b": 650.5548095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851900935173035, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 76, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.33963012695312, "t": 754.6822509765625, "r": 523.59357, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9542582035064697, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 76, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6194458007812, "t": 754.259521484375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9045737385749817, "cells": [{"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "61"}, {"label": "list_item", "id": 2, "page_no": 76, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.19448852539062, "t": 70.60295867919922, "r": 515.81549, "b": 92.99156951904297, "coord_origin": "TOPLEFT"}, "confidence": 0.9727184176445007, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 76, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.47923278808594, "t": 99.40367889404297, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9255325794219971, "cells": [{"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "a. Select the CUSTOMER_EMAIL column."}, {"label": "list_item", "id": 4, "page_no": 76, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 150.597412109375, "t": 116.41293334960938, "r": 541.59985, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9738664627075195, "cells": [{"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value."}, {"label": "list_item", "id": 5, "page_no": 76, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.6071319580078, "t": 145.43560791015625, "r": 511.92703, "b": 155.8599853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9509996175765991, "cells": [{"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}]}, "text": "c. Select the On update violation, preserve column value option and click OK ."}, {"label": "caption", "id": 6, "page_no": 76, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.2974853515625, "t": 653.2451782226562, "r": 362.4355773925781, "b": 662.75830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9486740827560425, "cells": [{"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table"}, {"label": "picture", "id": 7, "page_no": 76, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.89818572998047, "t": 169.34371948242188, "r": 543.365966796875, "b": 650.5548095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851900935173035, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 76, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.19448852539062, "t": 70.60295867919922, "r": 515.81549, "b": 92.99156951904297, "coord_origin": "TOPLEFT"}, "confidence": 0.9727184176445007, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 76, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.47923278808594, "t": 99.40367889404297, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9255325794219971, "cells": [{"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "a. Select the CUSTOMER_EMAIL column."}, {"label": "list_item", "id": 4, "page_no": 76, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 150.597412109375, "t": 116.41293334960938, "r": 541.59985, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9738664627075195, "cells": [{"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value."}, {"label": "list_item", "id": 5, "page_no": 76, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.6071319580078, "t": 145.43560791015625, "r": 511.92703, "b": 155.8599853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9509996175765991, "cells": [{"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}]}, "text": "c. Select the On update violation, preserve column value option and click OK ."}, {"label": "caption", "id": 6, "page_no": 76, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.2974853515625, "t": 653.2451782226562, "r": 362.4355773925781, "b": 662.75830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9486740827560425, "cells": [{"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table"}, {"label": "picture", "id": 7, "page_no": 76, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.89818572998047, "t": 169.34371948242188, "r": 543.365966796875, "b": 650.5548095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851900935173035, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 76, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.33963012695312, "t": 754.6822509765625, "r": 523.59357, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9542582035064697, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 76, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6194458007812, "t": 754.259521484375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9045737385749817, "cells": [{"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "61"}]}}, {"page_no": 77, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.20623016357422, "t": 754.3389282226562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9119569659233093, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.26509857177734, "t": 754.6648559570312, "r": 334.42142, "b": 763.939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9529509544372559, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.84481811523438, "t": 70.5638198852539, "r": 535.55554, "b": 92.91973876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9732864499092102, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.23225402832031, "t": 386.5921325683594, "r": 294.2088317871094, "b": 395.9991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9511763453483582, "cells": [{"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.3284149169922, "t": 412.6619567871094, "r": 547.27332, "b": 447.14215087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9731178879737854, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.24510955810547, "t": 602.5396118164062, "r": 323.0049743652344, "b": 611.9821166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9424684047698975, "cells": [{"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.67375564575195, "t": 107.14707946777344, "r": 546.8531494140625, "b": 383.6925354003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9858631491661072, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 63.88129806518555, "t": 461.2124938964844, "r": 543.3204956054688, "b": 600.3211669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816429018974304, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 77, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20623016357422, "t": 754.3389282226562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9119569659233093, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "62"}, {"label": "page_footer", "id": 1, "page_no": 77, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26509857177734, "t": 754.6648559570312, "r": 334.42142, "b": 763.939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9529509544372559, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 77, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.84481811523438, "t": 70.5638198852539, "r": 535.55554, "b": 92.91973876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9732864499092102, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column."}, {"label": "caption", "id": 3, "page_no": 77, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.23225402832031, "t": 386.5921325683594, "r": 294.2088317871094, "b": 395.9991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9511763453483582, "cells": [{"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-39 Check constraint on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 77, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.3284149169922, "t": 412.6619567871094, "r": 547.27332, "b": 447.14215087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9731178879737854, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40."}, {"label": "caption", "id": 5, "page_no": 77, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.24510955810547, "t": 602.5396118164062, "r": 323.0049743652344, "b": 611.9821166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9424684047698975, "cells": [{"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table"}, {"label": "picture", "id": 6, "page_no": 77, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.67375564575195, "t": 107.14707946777344, "r": 546.8531494140625, "b": 383.6925354003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9858631491661072, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 77, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.88129806518555, "t": 461.2124938964844, "r": 543.3204956054688, "b": 600.3211669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816429018974304, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 77, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.84481811523438, "t": 70.5638198852539, "r": 535.55554, "b": 92.91973876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9732864499092102, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column."}, {"label": "caption", "id": 3, "page_no": 77, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.23225402832031, "t": 386.5921325683594, "r": 294.2088317871094, "b": 395.9991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9511763453483582, "cells": [{"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-39 Check constraint on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 77, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.3284149169922, "t": 412.6619567871094, "r": 547.27332, "b": 447.14215087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9731178879737854, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40."}, {"label": "caption", "id": 5, "page_no": 77, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.24510955810547, "t": 602.5396118164062, "r": 323.0049743652344, "b": 611.9821166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9424684047698975, "cells": [{"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table"}, {"label": "picture", "id": 6, "page_no": 77, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.67375564575195, "t": 107.14707946777344, "r": 546.8531494140625, "b": 383.6925354003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9858631491661072, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 77, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.88129806518555, "t": 461.2124938964844, "r": 543.3204956054688, "b": 600.3211669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816429018974304, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 77, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20623016357422, "t": 754.3389282226562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9119569659233093, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "62"}, {"label": "page_footer", "id": 1, "page_no": 77, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26509857177734, "t": 754.6648559570312, "r": 334.42142, "b": 763.939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9529509544372559, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 78, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.27894592285156, "t": 754.7236328125, "r": 523.59357, "b": 764.05419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9573627710342407, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.566162109375, "t": 754.30859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157171249389648, "cells": [{"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.11198425292969, "t": 70.35449981689453, "r": 360.40594, "b": 83.69813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9612811207771301, "cells": [{"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.0153350830078, "t": 96.60980987548828, "r": 516.22321, "b": 118.89674377441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9671575427055359, "cells": [{"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 125.977294921875, "r": 542.70996, "b": 160.520263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9787286520004272, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.109375, "t": 335.1785888671875, "r": 361.76947021484375, "b": 344.71710205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520919322967529, "cells": [{"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.86691284179688, "t": 361.27203369140625, "r": 537.47778, "b": 395.48135, "coord_origin": "TOPLEFT"}, "confidence": 0.969711422920227, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.17703247070312, "t": 575.9801635742188, "r": 318.5569763183594, "b": 585.77587890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541999101638794, "cells": [{"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.82846069335938, "t": 410.0953674316406, "r": 534.9657592773438, "b": 572.7034912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863720536231995, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 135.9375457763672, "t": 173.51026916503906, "r": 546.1521606445312, "b": 332.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9859922528266907, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 78, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27894592285156, "t": 754.7236328125, "r": 523.59357, "b": 764.05419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9573627710342407, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 78, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.566162109375, "t": 754.30859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157171249389648, "cells": [{"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "63"}, {"label": "section_header", "id": 2, "page_no": 78, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.11198425292969, "t": 70.35449981689453, "r": 360.40594, "b": 83.69813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9612811207771301, "cells": [{"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.8 Activating row and column access control"}, {"label": "text", "id": 3, "page_no": 78, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.0153350830078, "t": 96.60980987548828, "r": 516.22321, "b": 118.89674377441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9671575427055359, "cells": [{"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 78, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 125.977294921875, "r": 542.70996, "b": 160.520263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9787286520004272, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 5, "page_no": 78, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.109375, "t": 335.1785888671875, "r": 361.76947021484375, "b": 344.71710205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520919322967529, "cells": [{"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table"}, {"label": "list_item", "id": 6, "page_no": 78, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.86691284179688, "t": 361.27203369140625, "r": 537.47778, "b": 395.48135, "coord_origin": "TOPLEFT"}, "confidence": 0.969711422920227, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}]}, "text": "2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 7, "page_no": 78, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.17703247070312, "t": 575.9801635742188, "r": 318.5569763183594, "b": 585.77587890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541999101638794, "cells": [{"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS"}, {"label": "picture", "id": 8, "page_no": 78, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.82846069335938, "t": 410.0953674316406, "r": 534.9657592773438, "b": 572.7034912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863720536231995, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 78, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9375457763672, "t": 173.51026916503906, "r": 546.1521606445312, "b": 332.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9859922528266907, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 78, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.11198425292969, "t": 70.35449981689453, "r": 360.40594, "b": 83.69813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9612811207771301, "cells": [{"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.8 Activating row and column access control"}, {"label": "text", "id": 3, "page_no": 78, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.0153350830078, "t": 96.60980987548828, "r": 516.22321, "b": 118.89674377441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9671575427055359, "cells": [{"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 78, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 125.977294921875, "r": 542.70996, "b": 160.520263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9787286520004272, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 5, "page_no": 78, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.109375, "t": 335.1785888671875, "r": 361.76947021484375, "b": 344.71710205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520919322967529, "cells": [{"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table"}, {"label": "list_item", "id": 6, "page_no": 78, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.86691284179688, "t": 361.27203369140625, "r": 537.47778, "b": 395.48135, "coord_origin": "TOPLEFT"}, "confidence": 0.969711422920227, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}]}, "text": "2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 7, "page_no": 78, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.17703247070312, "t": 575.9801635742188, "r": 318.5569763183594, "b": 585.77587890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541999101638794, "cells": [{"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS"}, {"label": "picture", "id": 8, "page_no": 78, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.82846069335938, "t": 410.0953674316406, "r": 534.9657592773438, "b": 572.7034912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863720536231995, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 78, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9375457763672, "t": 173.51026916503906, "r": 546.1521606445312, "b": 332.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9859922528266907, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 78, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27894592285156, "t": 754.7236328125, "r": 523.59357, "b": 764.05419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9573627710342407, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 78, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.566162109375, "t": 754.30859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157171249389648, "cells": [{"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "63"}]}}, {"page_no": 79, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.15714263916016, "t": 754.3335571289062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127570390701294, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.25228881835938, "t": 754.6705932617188, "r": 334.42142, "b": 763.9555053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9553424715995789, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.11422729492188, "t": 70.50455474853516, "r": 544.67987, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9770053625106812, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.18548583984375, "t": 279.2968444824219, "r": 338.2870788574219, "b": 289.08013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507059454917908, "cells": [{"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.14816284179688, "t": 307.58905029296875, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}, "confidence": 0.9649584889411926, "cells": [{"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9355010986328, "t": 333.9635009765625, "r": 535.83545, "b": 356.36151, "coord_origin": "TOPLEFT"}, "confidence": 0.9637021422386169, "cells": [{"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.80099, "t": 363.3408508300781, "r": 533.23096, "b": 397.5221252441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9786288738250732, "cells": [{"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.30838775634766, "t": 584.093017578125, "r": 271.8835754394531, "b": 593.4585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9465454816818237, "cells": [{"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.07981872558594, "t": 119.14159393310547, "r": 547.2720947265625, "b": 276.12908935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865725040435791, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 63.96348190307617, "t": 412.05908203125, "r": 546.8929443359375, "b": 581.2628784179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9827678799629211, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 79, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15714263916016, "t": 754.3335571289062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127570390701294, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "64"}, {"label": "page_footer", "id": 1, "page_no": 79, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.25228881835938, "t": 754.6705932617188, "r": 334.42142, "b": 763.9555053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9553424715995789, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 79, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.11422729492188, "t": 70.50455474853516, "r": 544.67987, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9770053625106812, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK ."}, {"label": "caption", "id": 3, "page_no": 79, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.18548583984375, "t": 279.2968444824219, "r": 338.2870788574219, "b": 289.08013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507059454917908, "cells": [{"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS"}, {"label": "section_header", "id": 4, "page_no": 79, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.14816284179688, "t": 307.58905029296875, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}, "confidence": 0.9649584889411926, "cells": [{"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.9 Reviewing row permissions"}, {"label": "text", "id": 5, "page_no": 79, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9355010986328, "t": 333.9635009765625, "r": 535.83545, "b": 356.36151, "coord_origin": "TOPLEFT"}, "confidence": 0.9637021422386169, "cells": [{"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}]}, "text": "This section displays all the row permissions after enabling RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 79, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80099, "t": 363.3408508300781, "r": 533.23096, "b": 397.5221252441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9786288738250732, "cells": [{"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission."}, {"label": "caption", "id": 7, "page_no": 79, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.30838775634766, "t": 584.093017578125, "r": 271.8835754394531, "b": 593.4585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9465454816818237, "cells": [{"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-44 Row permissions after enabling RCAC"}, {"label": "picture", "id": 8, "page_no": 79, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.07981872558594, "t": 119.14159393310547, "r": 547.2720947265625, "b": 276.12908935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865725040435791, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 79, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.96348190307617, "t": 412.05908203125, "r": 546.8929443359375, "b": 581.2628784179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9827678799629211, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 79, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.11422729492188, "t": 70.50455474853516, "r": 544.67987, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9770053625106812, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK ."}, {"label": "caption", "id": 3, "page_no": 79, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.18548583984375, "t": 279.2968444824219, "r": 338.2870788574219, "b": 289.08013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507059454917908, "cells": [{"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS"}, {"label": "section_header", "id": 4, "page_no": 79, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.14816284179688, "t": 307.58905029296875, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}, "confidence": 0.9649584889411926, "cells": [{"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.9 Reviewing row permissions"}, {"label": "text", "id": 5, "page_no": 79, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9355010986328, "t": 333.9635009765625, "r": 535.83545, "b": 356.36151, "coord_origin": "TOPLEFT"}, "confidence": 0.9637021422386169, "cells": [{"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}]}, "text": "This section displays all the row permissions after enabling RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 79, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80099, "t": 363.3408508300781, "r": 533.23096, "b": 397.5221252441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9786288738250732, "cells": [{"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission."}, {"label": "caption", "id": 7, "page_no": 79, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.30838775634766, "t": 584.093017578125, "r": 271.8835754394531, "b": 593.4585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9465454816818237, "cells": [{"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-44 Row permissions after enabling RCAC"}, {"label": "picture", "id": 8, "page_no": 79, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.07981872558594, "t": 119.14159393310547, "r": 547.2720947265625, "b": 276.12908935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865725040435791, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 79, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.96348190307617, "t": 412.05908203125, "r": 546.8929443359375, "b": 581.2628784179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9827678799629211, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 79, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15714263916016, "t": 754.3335571289062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127570390701294, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "64"}, {"label": "page_footer", "id": 1, "page_no": 79, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.25228881835938, "t": 754.6705932617188, "r": 334.42142, "b": 763.9555053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9553424715995789, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 80, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.26358032226562, "t": 754.7083740234375, "r": 523.59357, "b": 764.0580444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9547041058540344, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6220703125, "t": 754.29638671875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9117289185523987, "cells": [{"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.80770874023438, "t": 70.57334899902344, "r": 544.37872, "b": 92.76964569091797, "coord_origin": "TOPLEFT"}, "confidence": 0.965424120426178, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.82278442382812, "t": 241.54090881347656, "r": 328.7805480957031, "b": 250.71495056152344, "coord_origin": "TOPLEFT"}, "confidence": 0.9502364993095398, "cells": [{"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.20486450195312, "t": 267.31622314453125, "r": 546.08038, "b": 313.33673095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9789031744003296, "cells": [{"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.38289642333984, "t": 598.0608520507812, "r": 342.9576110839844, "b": 607.2294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9494208693504333, "cells": [{"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.34481811523438, "t": 107.48910522460938, "r": 467.5279846191406, "b": 238.44802856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9859717488288879, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 63.714664459228516, "t": 327.1063232421875, "r": 502.0154113769531, "b": 595.8734741210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9849998950958252, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 80, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.26358032226562, "t": 754.7083740234375, "r": 523.59357, "b": 764.0580444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9547041058540344, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 80, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6220703125, "t": 754.29638671875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9117289185523987, "cells": [{"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "65"}, {"label": "list_item", "id": 2, "page_no": 80, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.80770874023438, "t": 70.57334899902344, "r": 544.37872, "b": 92.76964569091797, "coord_origin": "TOPLEFT"}, "confidence": 0.965424120426178, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45."}, {"label": "caption", "id": 3, "page_no": 80, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.82278442382812, "t": 241.54090881347656, "r": 328.7805480957031, "b": 250.71495056152344, "coord_origin": "TOPLEFT"}, "confidence": 0.9502364993095398, "cells": [{"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-45 Selecting row permission definition"}, {"label": "list_item", "id": 4, "page_no": 80, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.20486450195312, "t": 267.31622314453125, "r": 546.08038, "b": 313.33673095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9789031744003296, "cells": [{"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}]}, "text": "3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied."}, {"label": "caption", "id": 5, "page_no": 80, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.38289642333984, "t": 598.0608520507812, "r": 342.9576110839844, "b": 607.2294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9494208693504333, "cells": [{"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission"}, {"label": "picture", "id": 6, "page_no": 80, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.34481811523438, "t": 107.48910522460938, "r": 467.5279846191406, "b": 238.44802856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9859717488288879, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 80, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.714664459228516, "t": 327.1063232421875, "r": 502.0154113769531, "b": 595.8734741210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9849998950958252, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 80, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.80770874023438, "t": 70.57334899902344, "r": 544.37872, "b": 92.76964569091797, "coord_origin": "TOPLEFT"}, "confidence": 0.965424120426178, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45."}, {"label": "caption", "id": 3, "page_no": 80, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.82278442382812, "t": 241.54090881347656, "r": 328.7805480957031, "b": 250.71495056152344, "coord_origin": "TOPLEFT"}, "confidence": 0.9502364993095398, "cells": [{"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-45 Selecting row permission definition"}, {"label": "list_item", "id": 4, "page_no": 80, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.20486450195312, "t": 267.31622314453125, "r": 546.08038, "b": 313.33673095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9789031744003296, "cells": [{"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}]}, "text": "3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied."}, {"label": "caption", "id": 5, "page_no": 80, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.38289642333984, "t": 598.0608520507812, "r": 342.9576110839844, "b": 607.2294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9494208693504333, "cells": [{"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission"}, {"label": "picture", "id": 6, "page_no": 80, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.34481811523438, "t": 107.48910522460938, "r": 467.5279846191406, "b": 238.44802856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9859717488288879, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 80, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.714664459228516, "t": 327.1063232421875, "r": 502.0154113769531, "b": 595.8734741210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9849998950958252, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 80, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.26358032226562, "t": 754.7083740234375, "r": 523.59357, "b": 764.0580444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9547041058540344, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 80, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6220703125, "t": 754.29638671875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9117289185523987, "cells": [{"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "65"}]}}, {"page_no": 81, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.22357940673828, "t": 754.4584350585938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105024337768555, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.37715148925781, "t": 754.6815795898438, "r": 334.42142, "b": 763.9869384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9468215703964233, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.1228256225586, "t": 70.26021575927734, "r": 347.13361, "b": 83.70108795166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9626623392105103, "cells": [{"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.73379516601562, "t": 96.64435577392578, "r": 547.25568, "b": 119.03988647460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9718443751335144, "cells": [{"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.537353515625, "t": 125.70227813720703, "r": 390.82486, "b": 135.94515991210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9467165470123291, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6352081298828, "t": 142.6588897705078, "r": 543.19196, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9719513654708862, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.70932006835938, "t": 171.48867797851562, "r": 543.64008, "b": 193.7998046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9690733551979065, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.35504150390625, "t": 200.90966796875, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}, "confidence": 0.914056658744812, "cells": [{"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.4617462158203, "t": 213.36526489257812, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}, "confidence": 0.908424973487854, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.39413452148438, "t": 224.96202087402344, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9008285403251648, "cells": [{"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.38189697265625, "t": 237.14512634277344, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9172974228858948, "cells": [{"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.4001007080078, "t": 248.64210510253906, "r": 318.3563537597656, "b": 258.73914, "coord_origin": "TOPLEFT"}, "confidence": 0.9473636746406555, "cells": [{"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 136.71405029296875, "t": 274.4760437011719, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9395599961280823, "cells": [{"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.20758056640625, "t": 289.3038635253906, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}, "confidence": 0.9441509246826172, "cells": [{"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 136.73385620117188, "t": 306.8790588378906, "r": 531.48303, "b": 328.8634033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9618597626686096, "cells": [{"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "caption", "bbox": {"l": 136.308349609375, "t": 440.55535888671875, "r": 262.7190856933594, "b": 450.0071105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9195859432220459, "cells": [{"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.81915283203125, "t": 466.6739807128906, "r": 503.15964, "b": 477.26654052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9244843125343323, "cells": [{"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "caption", "bbox": {"l": 136.09771728515625, "t": 626.5655517578125, "r": 451.9573974609375, "b": 636.12291, "coord_origin": "TOPLEFT"}, "confidence": 0.9248898029327393, "cells": [{"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "picture", "bbox": {"l": 135.9881591796875, "t": 491.6136474609375, "r": 393.8948669433594, "b": 625.150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8431334495544434, "cells": []}, {"id": 19, "label": "picture", "bbox": {"l": 136.04849243164062, "t": 343.6217346191406, "r": 358.4311218261719, "b": 438.34320068359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7820501923561096, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 81, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22357940673828, "t": 754.4584350585938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105024337768555, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "66"}, {"label": "page_footer", "id": 1, "page_no": 81, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37715148925781, "t": 754.6815795898438, "r": 334.42142, "b": 763.9869384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9468215703964233, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 81, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.1228256225586, "t": 70.26021575927734, "r": 347.13361, "b": 83.70108795166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9626623392105103, "cells": [{"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.10 Demonstrating data access with RCAC"}, {"label": "text", "id": 3, "page_no": 81, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.73379516601562, "t": 96.64435577392578, "r": 547.25568, "b": 119.03988647460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9718443751335144, "cells": [{"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):"}, {"label": "list_item", "id": 4, "page_no": 81, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.537353515625, "t": 125.70227813720703, "r": 390.82486, "b": 135.94515991210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9467165470123291, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that returns the SESSION_USER."}, {"label": "list_item", "id": 5, "page_no": 81, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6352081298828, "t": 142.6588897705078, "r": 543.19196, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9719513654708862, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table."}, {"label": "list_item", "id": 6, "page_no": 81, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.70932006835938, "t": 171.48867797851562, "r": 543.64008, "b": 193.7998046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9690733551979065, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name:"}, {"label": "list_item", "id": 7, "page_no": 81, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.35504150390625, "t": 200.90966796875, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}, "confidence": 0.914056658744812, "cells": [{"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ i d"}, {"label": "list_item", "id": 8, "page_no": 81, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.4617462158203, "t": 213.36526489257812, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}, "confidence": 0.908424973487854, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_name"}, {"label": "list_item", "id": 9, "page_no": 81, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.39413452148438, "t": 224.96202087402344, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9008285403251648, "cells": [{"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_email"}, {"label": "list_item", "id": 10, "page_no": 81, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.38189697265625, "t": 237.14512634277344, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9172974228858948, "cells": [{"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ t a x _ i d"}, {"label": "list_item", "id": 11, "page_no": 81, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4001007080078, "t": 248.64210510253906, "r": 318.3563537597656, "b": 258.73914, "coord_origin": "TOPLEFT"}, "confidence": 0.9473636746406555, "cells": [{"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_drivers_license_number"}, {"label": "section_header", "id": 12, "page_no": 81, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.71405029296875, "t": 274.4760437011719, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9395599961280823, "cells": [{"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for a DBE user with RCAC"}, {"label": "text", "id": 13, "page_no": 81, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.20758056640625, "t": 289.3038635253906, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}, "confidence": 0.9441509246826172, "cells": [{"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a DBE (MCAIN) user, complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 81, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.73385620117188, "t": 306.8790588378906, "r": 531.48303, "b": 328.8634033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9618597626686096, "cells": [{"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user."}, {"label": "caption", "id": 15, "page_no": 81, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 136.308349609375, "t": 440.55535888671875, "r": 262.7190856933594, "b": 450.0071105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9195859432220459, "cells": [{"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-47 DBE session user"}, {"label": "list_item", "id": 16, "page_no": 81, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.81915283203125, "t": 466.6739807128906, "r": 503.15964, "b": 477.26654052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9244843125343323, "cells": [{"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48."}, {"label": "caption", "id": 17, "page_no": 81, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 136.09771728515625, "t": 626.5655517578125, "r": 451.9573974609375, "b": 636.12291, "coord_origin": "TOPLEFT"}, "confidence": 0.9248898029327393, "cells": [{"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table"}, {"label": "picture", "id": 18, "page_no": 81, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 135.9881591796875, "t": 491.6136474609375, "r": 393.8948669433594, "b": 625.150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8431334495544434, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 19, "page_no": 81, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 136.04849243164062, "t": 343.6217346191406, "r": 358.4311218261719, "b": 438.34320068359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7820501923561096, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 81, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.1228256225586, "t": 70.26021575927734, "r": 347.13361, "b": 83.70108795166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9626623392105103, "cells": [{"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.10 Demonstrating data access with RCAC"}, {"label": "text", "id": 3, "page_no": 81, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.73379516601562, "t": 96.64435577392578, "r": 547.25568, "b": 119.03988647460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9718443751335144, "cells": [{"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):"}, {"label": "list_item", "id": 4, "page_no": 81, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.537353515625, "t": 125.70227813720703, "r": 390.82486, "b": 135.94515991210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9467165470123291, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that returns the SESSION_USER."}, {"label": "list_item", "id": 5, "page_no": 81, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6352081298828, "t": 142.6588897705078, "r": 543.19196, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9719513654708862, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table."}, {"label": "list_item", "id": 6, "page_no": 81, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.70932006835938, "t": 171.48867797851562, "r": 543.64008, "b": 193.7998046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9690733551979065, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name:"}, {"label": "list_item", "id": 7, "page_no": 81, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.35504150390625, "t": 200.90966796875, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}, "confidence": 0.914056658744812, "cells": [{"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ i d"}, {"label": "list_item", "id": 8, "page_no": 81, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.4617462158203, "t": 213.36526489257812, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}, "confidence": 0.908424973487854, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_name"}, {"label": "list_item", "id": 9, "page_no": 81, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.39413452148438, "t": 224.96202087402344, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9008285403251648, "cells": [{"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_email"}, {"label": "list_item", "id": 10, "page_no": 81, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.38189697265625, "t": 237.14512634277344, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9172974228858948, "cells": [{"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ t a x _ i d"}, {"label": "list_item", "id": 11, "page_no": 81, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4001007080078, "t": 248.64210510253906, "r": 318.3563537597656, "b": 258.73914, "coord_origin": "TOPLEFT"}, "confidence": 0.9473636746406555, "cells": [{"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_drivers_license_number"}, {"label": "section_header", "id": 12, "page_no": 81, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.71405029296875, "t": 274.4760437011719, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9395599961280823, "cells": [{"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for a DBE user with RCAC"}, {"label": "text", "id": 13, "page_no": 81, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.20758056640625, "t": 289.3038635253906, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}, "confidence": 0.9441509246826172, "cells": [{"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a DBE (MCAIN) user, complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 81, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.73385620117188, "t": 306.8790588378906, "r": 531.48303, "b": 328.8634033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9618597626686096, "cells": [{"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user."}, {"label": "caption", "id": 15, "page_no": 81, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 136.308349609375, "t": 440.55535888671875, "r": 262.7190856933594, "b": 450.0071105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9195859432220459, "cells": [{"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-47 DBE session user"}, {"label": "list_item", "id": 16, "page_no": 81, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.81915283203125, "t": 466.6739807128906, "r": 503.15964, "b": 477.26654052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9244843125343323, "cells": [{"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48."}, {"label": "caption", "id": 17, "page_no": 81, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 136.09771728515625, "t": 626.5655517578125, "r": 451.9573974609375, "b": 636.12291, "coord_origin": "TOPLEFT"}, "confidence": 0.9248898029327393, "cells": [{"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table"}, {"label": "picture", "id": 18, "page_no": 81, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 135.9881591796875, "t": 491.6136474609375, "r": 393.8948669433594, "b": 625.150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8431334495544434, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 19, "page_no": 81, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 136.04849243164062, "t": 343.6217346191406, "r": 358.4311218261719, "b": 438.34320068359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7820501923561096, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 81, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22357940673828, "t": 754.4584350585938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105024337768555, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "66"}, {"label": "page_footer", "id": 1, "page_no": 81, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37715148925781, "t": 754.6815795898438, "r": 334.42142, "b": 763.9869384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9468215703964233, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 82, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.31561279296875, "t": 754.7977905273438, "r": 523.59357, "b": 764.0062866210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9568237662315369, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5758666992188, "t": 754.2555541992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127215147018433, "cells": [{"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.20147705078125, "t": 70.6068115234375, "r": 547.29102, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9730502963066101, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.37542724609375, "t": 469.88720703125, "r": 376.57159423828125, "b": 479.52301, "coord_origin": "TOPLEFT"}, "confidence": 0.940518319606781, "cells": [{"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.4634246826172, "t": 495.54241943359375, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}, "confidence": 0.9448604583740234, "cells": [{"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.3077392578125, "t": 511.1701354980469, "r": 382.87076, "b": 521.498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9233824014663696, "cells": [{"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 527.958740234375, "r": 531.48303, "b": 550.41796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.09732055664062, "t": 687.5260620117188, "r": 289.5880432128906, "b": 696.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477524161338806, "cells": [{"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.97964477539062, "t": 564.6740112304688, "r": 354.29364013671875, "b": 685.4274291992188, "coord_origin": "TOPLEFT"}, "confidence": 0.945771336555481, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 82, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31561279296875, "t": 754.7977905273438, "r": 523.59357, "b": 764.0062866210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9568237662315369, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 82, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5758666992188, "t": 754.2555541992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127215147018433, "cells": [{"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "67"}, {"label": "list_item", "id": 2, "page_no": 82, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20147705078125, "t": 70.6068115234375, "r": 547.29102, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9730502963066101, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked."}, {"label": "caption", "id": 3, "page_no": 82, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37542724609375, "t": 469.88720703125, "r": 376.57159423828125, "b": 479.52301, "coord_origin": "TOPLEFT"}, "confidence": 0.940518319606781, "cells": [{"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns"}, {"label": "section_header", "id": 4, "page_no": 82, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.4634246826172, "t": 495.54241943359375, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}, "confidence": 0.9448604583740234, "cells": [{"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for SECURITY user with RCAC"}, {"label": "text", "id": 5, "page_no": 82, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.3077392578125, "t": 511.1701354980469, "r": 382.87076, "b": 521.498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9233824014663696, "cells": [{"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}]}, "text": "To test a SECURITY user, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 82, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 527.958740234375, "r": 531.48303, "b": 550.41796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer."}, {"label": "caption", "id": 7, "page_no": 82, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.09732055664062, "t": 687.5260620117188, "r": 289.5880432128906, "b": 696.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477524161338806, "cells": [{"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-50 SECURITY session user"}, {"label": "picture", "id": 8, "page_no": 82, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.97964477539062, "t": 564.6740112304688, "r": 354.29364013671875, "b": 685.4274291992188, "coord_origin": "TOPLEFT"}, "confidence": 0.945771336555481, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 82, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20147705078125, "t": 70.6068115234375, "r": 547.29102, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9730502963066101, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked."}, {"label": "caption", "id": 3, "page_no": 82, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37542724609375, "t": 469.88720703125, "r": 376.57159423828125, "b": 479.52301, "coord_origin": "TOPLEFT"}, "confidence": 0.940518319606781, "cells": [{"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns"}, {"label": "section_header", "id": 4, "page_no": 82, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.4634246826172, "t": 495.54241943359375, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}, "confidence": 0.9448604583740234, "cells": [{"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for SECURITY user with RCAC"}, {"label": "text", "id": 5, "page_no": 82, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.3077392578125, "t": 511.1701354980469, "r": 382.87076, "b": 521.498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9233824014663696, "cells": [{"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}]}, "text": "To test a SECURITY user, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 82, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 527.958740234375, "r": 531.48303, "b": 550.41796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer."}, {"label": "caption", "id": 7, "page_no": 82, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.09732055664062, "t": 687.5260620117188, "r": 289.5880432128906, "b": 696.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477524161338806, "cells": [{"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-50 SECURITY session user"}, {"label": "picture", "id": 8, "page_no": 82, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.97964477539062, "t": 564.6740112304688, "r": 354.29364013671875, "b": 685.4274291992188, "coord_origin": "TOPLEFT"}, "confidence": 0.945771336555481, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 82, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31561279296875, "t": 754.7977905273438, "r": 523.59357, "b": 764.0062866210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9568237662315369, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 82, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5758666992188, "t": 754.2555541992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127215147018433, "cells": [{"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "67"}]}}, {"page_no": 83, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.20339965820312, "t": 754.427978515625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9174648523330688, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.34625244140625, "t": 754.708740234375, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526290893554688, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.87147521972656, "t": 70.62814331054688, "r": 547.19379, "b": 93.03572082519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9643672108650208, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.1445770263672, "t": 228.07118225097656, "r": 486.7213439941406, "b": 237.11375427246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9390786290168762, "cells": [{"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.01255798339844, "t": 254.04481506347656, "r": 542.73871, "b": 275.8885192871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9614978432655334, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.1894760131836, "t": 440.5732116699219, "r": 362.28131103515625, "b": 450.00302, "coord_origin": "TOPLEFT"}, "confidence": 0.952978253364563, "cells": [{"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.5155792236328, "t": 466.390380859375, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}, "confidence": 0.9474611878395081, "cells": [{"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.20401000976562, "t": 481.7389831542969, "r": 427.75647, "b": 492.3285217285156, "coord_origin": "TOPLEFT"}, "confidence": 0.9360538125038147, "cells": [{"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.66238403320312, "t": 498.4595947265625, "r": 530.67822, "b": 520.9165649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.960720956325531, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "caption", "bbox": {"l": 136.1230010986328, "t": 672.151611328125, "r": 278.20037841796875, "b": 681.5107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9520363211631775, "cells": [{"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 135.7608642578125, "t": 535.8259887695312, "r": 362.02239990234375, "b": 669.7214965820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9807249307632446, "cells": []}, {"id": 11, "label": "picture", "bbox": {"l": 64.11683654785156, "t": 289.6597900390625, "r": 546.5642700195312, "b": 438.1582946777344, "coord_origin": "TOPLEFT"}, "confidence": 0.9767975211143494, "cells": []}, {"id": 12, "label": "picture", "bbox": {"l": 136.23712158203125, "t": 107.2462158203125, "r": 385.9791564941406, "b": 225.44589233398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9731733202934265, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 83, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20339965820312, "t": 754.427978515625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9174648523330688, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "68"}, {"label": "page_footer", "id": 1, "page_no": 83, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34625244140625, "t": 754.708740234375, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526290893554688, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 83, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87147521972656, "t": 70.62814331054688, "r": 547.19379, "b": 93.03572082519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9643672108650208, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all."}, {"label": "caption", "id": 3, "page_no": 83, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.1445770263672, "t": 228.07118225097656, "r": 486.7213439941406, "b": 237.11375427246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9390786290168762, "cells": [{"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 83, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01255798339844, "t": 254.04481506347656, "r": 542.73871, "b": 275.8885192871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9614978432655334, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer."}, {"label": "caption", "id": 5, "page_no": 83, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.1894760131836, "t": 440.5732116699219, "r": 362.28131103515625, "b": 450.00302, "coord_origin": "TOPLEFT"}, "confidence": 0.952978253364563, "cells": [{"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results"}, {"label": "section_header", "id": 6, "page_no": 83, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.5155792236328, "t": 466.390380859375, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}, "confidence": 0.9474611878395081, "cells": [{"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for TELLER user with RCAC"}, {"label": "text", "id": 7, "page_no": 83, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.20401000976562, "t": 481.7389831542969, "r": 427.75647, "b": 492.3285217285156, "coord_origin": "TOPLEFT"}, "confidence": 0.9360538125038147, "cells": [{"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a Teller (TQSPENCER) user, complete the following steps:"}, {"label": "list_item", "id": 8, "page_no": 83, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.66238403320312, "t": 498.4595947265625, "r": 530.67822, "b": 520.9165649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.960720956325531, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user."}, {"label": "caption", "id": 9, "page_no": 83, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.1230010986328, "t": 672.151611328125, "r": 278.20037841796875, "b": 681.5107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9520363211631775, "cells": [{"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-53 TELLER session user"}, {"label": "picture", "id": 10, "page_no": 83, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.7608642578125, "t": 535.8259887695312, "r": 362.02239990234375, "b": 669.7214965820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9807249307632446, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 83, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.11683654785156, "t": 289.6597900390625, "r": 546.5642700195312, "b": 438.1582946777344, "coord_origin": "TOPLEFT"}, "confidence": 0.9767975211143494, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 83, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 136.23712158203125, "t": 107.2462158203125, "r": 385.9791564941406, "b": 225.44589233398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9731733202934265, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 83, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87147521972656, "t": 70.62814331054688, "r": 547.19379, "b": 93.03572082519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9643672108650208, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all."}, {"label": "caption", "id": 3, "page_no": 83, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.1445770263672, "t": 228.07118225097656, "r": 486.7213439941406, "b": 237.11375427246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9390786290168762, "cells": [{"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 83, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01255798339844, "t": 254.04481506347656, "r": 542.73871, "b": 275.8885192871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9614978432655334, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer."}, {"label": "caption", "id": 5, "page_no": 83, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.1894760131836, "t": 440.5732116699219, "r": 362.28131103515625, "b": 450.00302, "coord_origin": "TOPLEFT"}, "confidence": 0.952978253364563, "cells": [{"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results"}, {"label": "section_header", "id": 6, "page_no": 83, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.5155792236328, "t": 466.390380859375, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}, "confidence": 0.9474611878395081, "cells": [{"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for TELLER user with RCAC"}, {"label": "text", "id": 7, "page_no": 83, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.20401000976562, "t": 481.7389831542969, "r": 427.75647, "b": 492.3285217285156, "coord_origin": "TOPLEFT"}, "confidence": 0.9360538125038147, "cells": [{"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a Teller (TQSPENCER) user, complete the following steps:"}, {"label": "list_item", "id": 8, "page_no": 83, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.66238403320312, "t": 498.4595947265625, "r": 530.67822, "b": 520.9165649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.960720956325531, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user."}, {"label": "caption", "id": 9, "page_no": 83, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.1230010986328, "t": 672.151611328125, "r": 278.20037841796875, "b": 681.5107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9520363211631775, "cells": [{"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-53 TELLER session user"}, {"label": "picture", "id": 10, "page_no": 83, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.7608642578125, "t": 535.8259887695312, "r": 362.02239990234375, "b": 669.7214965820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9807249307632446, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 83, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.11683654785156, "t": 289.6597900390625, "r": 546.5642700195312, "b": 438.1582946777344, "coord_origin": "TOPLEFT"}, "confidence": 0.9767975211143494, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 83, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 136.23712158203125, "t": 107.2462158203125, "r": 385.9791564941406, "b": 225.44589233398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9731733202934265, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 83, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20339965820312, "t": 754.427978515625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9174648523330688, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "68"}, {"label": "page_footer", "id": 1, "page_no": 83, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34625244140625, "t": 754.708740234375, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526290893554688, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 84, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.29336547851562, "t": 754.7902221679688, "r": 523.59357, "b": 763.9354248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9566875696182251, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5740966796875, "t": 754.166259765625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140955209732056, "cells": [{"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.8011474609375, "t": 70.60009765625, "r": 547.24017, "b": 92.9535140991211, "coord_origin": "TOPLEFT"}, "confidence": 0.953477680683136, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.62548828125, "t": 221.36160278320312, "r": 482.5060729980469, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9344339370727539, "cells": [{"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.01345825195312, "t": 247.20472717285156, "r": 547.29144, "b": 281.66132, "coord_origin": "TOPLEFT"}, "confidence": 0.9552950263023376, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.17078399658203, "t": 672.1625366210938, "r": 391.8590393066406, "b": 681.483, "coord_origin": "TOPLEFT"}, "confidence": 0.9434057474136353, "cells": [{"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.92535400390625, "t": 107.52780151367188, "r": 388.818115234375, "b": 219.1571807861328, "coord_origin": "TOPLEFT"}, "confidence": 0.9634679555892944, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.41838073730469, "t": 296.1629638671875, "r": 548.2760009765625, "b": 670.6256713867188, "coord_origin": "TOPLEFT"}, "confidence": 0.7070707678794861, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 84, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29336547851562, "t": 754.7902221679688, "r": 523.59357, "b": 763.9354248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9566875696182251, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 84, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5740966796875, "t": 754.166259765625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140955209732056, "cells": [{"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "69"}, {"label": "list_item", "id": 2, "page_no": 84, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.8011474609375, "t": 70.60009765625, "r": 547.24017, "b": 92.9535140991211, "coord_origin": "TOPLEFT"}, "confidence": 0.953477680683136, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows."}, {"label": "caption", "id": 3, "page_no": 84, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.62548828125, "t": 221.36160278320312, "r": 482.5060729980469, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9344339370727539, "cells": [{"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 84, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01345825195312, "t": 247.20472717285156, "r": 547.29144, "b": 281.66132, "coord_origin": "TOPLEFT"}, "confidence": 0.9552950263023376, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked."}, {"label": "caption", "id": 5, "page_no": 84, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.17078399658203, "t": 672.1625366210938, "r": 391.8590393066406, "b": 681.483, "coord_origin": "TOPLEFT"}, "confidence": 0.9434057474136353, "cells": [{"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns"}, {"label": "picture", "id": 6, "page_no": 84, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.92535400390625, "t": 107.52780151367188, "r": 388.818115234375, "b": 219.1571807861328, "coord_origin": "TOPLEFT"}, "confidence": 0.9634679555892944, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 84, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.41838073730469, "t": 296.1629638671875, "r": 548.2760009765625, "b": 670.6256713867188, "coord_origin": "TOPLEFT"}, "confidence": 0.7070707678794861, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 84, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.8011474609375, "t": 70.60009765625, "r": 547.24017, "b": 92.9535140991211, "coord_origin": "TOPLEFT"}, "confidence": 0.953477680683136, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows."}, {"label": "caption", "id": 3, "page_no": 84, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.62548828125, "t": 221.36160278320312, "r": 482.5060729980469, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9344339370727539, "cells": [{"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 84, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01345825195312, "t": 247.20472717285156, "r": 547.29144, "b": 281.66132, "coord_origin": "TOPLEFT"}, "confidence": 0.9552950263023376, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked."}, {"label": "caption", "id": 5, "page_no": 84, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.17078399658203, "t": 672.1625366210938, "r": 391.8590393066406, "b": 681.483, "coord_origin": "TOPLEFT"}, "confidence": 0.9434057474136353, "cells": [{"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns"}, {"label": "picture", "id": 6, "page_no": 84, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.92535400390625, "t": 107.52780151367188, "r": 388.818115234375, "b": 219.1571807861328, "coord_origin": "TOPLEFT"}, "confidence": 0.9634679555892944, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 84, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.41838073730469, "t": 296.1629638671875, "r": 548.2760009765625, "b": 670.6256713867188, "coord_origin": "TOPLEFT"}, "confidence": 0.7070707678794861, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 84, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29336547851562, "t": 754.7902221679688, "r": 523.59357, "b": 763.9354248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9566875696182251, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 84, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5740966796875, "t": 754.166259765625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140955209732056, "cells": [{"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "69"}]}}, {"page_no": 85, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.99982833862305, "t": 754.1723022460938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086830019950867, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.3930892944336, "t": 754.6930541992188, "r": 334.42142, "b": 763.9622192382812, "coord_origin": "TOPLEFT"}, "confidence": 0.9444864988327026, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 136.52813720703125, "t": 70.49939727783203, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9242165684700012, "cells": [{"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.3176727294922, "t": 85.13993835449219, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9380269646644592, "cells": [{"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 102.55648040771484, "r": 547.23853, "b": 125.00703430175781, "coord_origin": "TOPLEFT"}, "confidence": 0.9487622976303101, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.44989013671875, "t": 224.8011932373047, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8895819187164307, "cells": [{"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.9615936279297, "t": 250.71633911132812, "r": 537.45203, "b": 272.96155, "coord_origin": "TOPLEFT"}, "confidence": 0.9431179761886597, "cells": [{"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.13417053222656, "t": 371.2900695800781, "r": 457.3196716308594, "b": 380.5198974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9259661436080933, "cells": [{"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.3792266845703, "t": 287.3948059082031, "r": 382.5545654296875, "b": 368.70892333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7004774212837219, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 136.20846557617188, "t": 138.96017456054688, "r": 352.89752197265625, "b": 222.64027404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.6416024565696716, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 85, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.99982833862305, "t": 754.1723022460938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086830019950867, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "70"}, {"label": "page_footer", "id": 1, "page_no": 85, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3930892944336, "t": 754.6930541992188, "r": 334.42142, "b": 763.9622192382812, "coord_origin": "TOPLEFT"}, "confidence": 0.9444864988327026, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 85, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.52813720703125, "t": 70.49939727783203, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9242165684700012, "cells": [{"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for ADMIN user with RCAC"}, {"label": "text", "id": 3, "page_no": 85, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3176727294922, "t": 85.13993835449219, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9380269646644592, "cells": [{"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 85, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 102.55648040771484, "r": 547.23853, "b": 125.00703430175781, "coord_origin": "TOPLEFT"}, "confidence": 0.9487622976303101, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user."}, {"label": "caption", "id": 5, "page_no": 85, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.44989013671875, "t": 224.8011932373047, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8895819187164307, "cells": [{"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-56 ADMIN session user"}, {"label": "list_item", "id": 6, "page_no": 85, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.9615936279297, "t": 250.71633911132812, "r": 537.45203, "b": 272.96155, "coord_origin": "TOPLEFT"}, "confidence": 0.9431179761886597, "cells": [{"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows."}, {"label": "caption", "id": 7, "page_no": 85, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13417053222656, "t": 371.2900695800781, "r": 457.3196716308594, "b": 380.5198974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9259661436080933, "cells": [{"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 85, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.3792266845703, "t": 287.3948059082031, "r": 382.5545654296875, "b": 368.70892333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7004774212837219, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 85, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.20846557617188, "t": 138.96017456054688, "r": 352.89752197265625, "b": 222.64027404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.6416024565696716, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 85, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.52813720703125, "t": 70.49939727783203, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9242165684700012, "cells": [{"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for ADMIN user with RCAC"}, {"label": "text", "id": 3, "page_no": 85, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3176727294922, "t": 85.13993835449219, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9380269646644592, "cells": [{"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 85, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 102.55648040771484, "r": 547.23853, "b": 125.00703430175781, "coord_origin": "TOPLEFT"}, "confidence": 0.9487622976303101, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user."}, {"label": "caption", "id": 5, "page_no": 85, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.44989013671875, "t": 224.8011932373047, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8895819187164307, "cells": [{"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-56 ADMIN session user"}, {"label": "list_item", "id": 6, "page_no": 85, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.9615936279297, "t": 250.71633911132812, "r": 537.45203, "b": 272.96155, "coord_origin": "TOPLEFT"}, "confidence": 0.9431179761886597, "cells": [{"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows."}, {"label": "caption", "id": 7, "page_no": 85, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13417053222656, "t": 371.2900695800781, "r": 457.3196716308594, "b": 380.5198974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9259661436080933, "cells": [{"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 85, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.3792266845703, "t": 287.3948059082031, "r": 382.5545654296875, "b": 368.70892333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7004774212837219, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 85, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.20846557617188, "t": 138.96017456054688, "r": 352.89752197265625, "b": 222.64027404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.6416024565696716, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 85, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.99982833862305, "t": 754.1723022460938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086830019950867, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "70"}, {"label": "page_footer", "id": 1, "page_no": 85, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3930892944336, "t": 754.6930541992188, "r": 334.42142, "b": 763.9622192382812, "coord_origin": "TOPLEFT"}, "confidence": 0.9444864988327026, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 86, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.297607421875, "t": 754.7944946289062, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9579306244850159, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.4384765625, "t": 754.1445922851562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092021584510803, "cells": [{"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.0950164794922, "t": 70.5864028930664, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9504329562187195, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.27821350097656, "t": 478.5440979003906, "r": 386.91961669921875, "b": 488.0338134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9340198636054993, "cells": [{"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.49583435058594, "t": 504.4722595214844, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9497081637382507, "cells": [{"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1496124267578, "t": 519.399169921875, "r": 527.58466, "b": 541.5465698242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9660984873771667, "cells": [{"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.61180114746094, "t": 548.59814453125, "r": 531.48303, "b": 571.005126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9623847007751465, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.1943817138672, "t": 675.9807739257812, "r": 289.5948791503906, "b": 685.4607543945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9459738731384277, "cells": [{"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.11729431152344, "t": 584.64208984375, "r": 354.23046875, "b": 673.7885131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.949955403804779, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 86, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.297607421875, "t": 754.7944946289062, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9579306244850159, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 86, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4384765625, "t": 754.1445922851562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092021584510803, "cells": [{"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "71"}, {"label": "list_item", "id": 2, "page_no": 86, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0950164794922, "t": 70.5864028930664, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9504329562187195, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns."}, {"label": "caption", "id": 3, "page_no": 86, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27821350097656, "t": 478.5440979003906, "r": 386.91961669921875, "b": 488.0338134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9340198636054993, "cells": [{"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 86, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.49583435058594, "t": 504.4722595214844, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9497081637382507, "cells": [{"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for WEBUSER user with RCAC"}, {"label": "text", "id": 5, "page_no": 86, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1496124267578, "t": 519.399169921875, "r": 527.58466, "b": 541.5465698242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9660984873771667, "cells": [{"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}]}, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 86, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.61180114746094, "t": 548.59814453125, "r": 531.48303, "b": 571.005126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9623847007751465, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user."}, {"label": "caption", "id": 7, "page_no": 86, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1943817138672, "t": 675.9807739257812, "r": 289.5948791503906, "b": 685.4607543945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9459738731384277, "cells": [{"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-59 WEBUSER session user"}, {"label": "picture", "id": 8, "page_no": 86, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.11729431152344, "t": 584.64208984375, "r": 354.23046875, "b": 673.7885131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.949955403804779, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 86, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0950164794922, "t": 70.5864028930664, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9504329562187195, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns."}, {"label": "caption", "id": 3, "page_no": 86, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27821350097656, "t": 478.5440979003906, "r": 386.91961669921875, "b": 488.0338134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9340198636054993, "cells": [{"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 86, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.49583435058594, "t": 504.4722595214844, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9497081637382507, "cells": [{"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for WEBUSER user with RCAC"}, {"label": "text", "id": 5, "page_no": 86, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1496124267578, "t": 519.399169921875, "r": 527.58466, "b": 541.5465698242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9660984873771667, "cells": [{"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}]}, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 86, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.61180114746094, "t": 548.59814453125, "r": 531.48303, "b": 571.005126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9623847007751465, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user."}, {"label": "caption", "id": 7, "page_no": 86, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1943817138672, "t": 675.9807739257812, "r": 289.5948791503906, "b": 685.4607543945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9459738731384277, "cells": [{"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-59 WEBUSER session user"}, {"label": "picture", "id": 8, "page_no": 86, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.11729431152344, "t": 584.64208984375, "r": 354.23046875, "b": 673.7885131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.949955403804779, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 86, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.297607421875, "t": 754.7944946289062, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9579306244850159, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 86, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4384765625, "t": 754.1445922851562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092021584510803, "cells": [{"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "71"}]}}, {"page_no": 87, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.95808410644531, "t": 754.2484130859375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9073862433433533, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32298278808594, "t": 754.67529296875, "r": 334.42142, "b": 764.010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9502434730529785, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.97177124023438, "t": 70.53437042236328, "r": 547.29254, "b": 105.20692443847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9725183844566345, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.13768005371094, "t": 223.07266235351562, "r": 394.4398498535156, "b": 232.92161560058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9459361433982849, "cells": [{"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.97732543945312, "t": 249.29721069335938, "r": 514.37964, "b": 271.60693359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9487968683242798, "cells": [{"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.13868713378906, "t": 521.3612060546875, "r": 320.7819519042969, "b": 530.787841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9481346607208252, "cells": [{"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.78077697753906, "t": 547.3094482421875, "r": 541.26068, "b": 569.7304077148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9655671715736389, "cells": [{"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.2648468017578, "t": 685.8698120117188, "r": 474.20855712890625, "b": 695.402901, "coord_origin": "TOPLEFT"}, "confidence": 0.9365612864494324, "cells": [{"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.12271118164062, "t": 285.7159118652344, "r": 395.9803466796875, "b": 519.3853149414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9821423888206482, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 136.00576782226562, "t": 584.1505737304688, "r": 382.0115966796875, "b": 684.032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9579524993896484, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 135.9663848876953, "t": 119.12814331054688, "r": 547.538818359375, "b": 221.56602478027344, "coord_origin": "TOPLEFT"}, "confidence": 0.9356961846351624, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 87, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95808410644531, "t": 754.2484130859375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9073862433433533, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "72"}, {"label": "page_footer", "id": 1, "page_no": 87, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32298278808594, "t": 754.67529296875, "r": 334.42142, "b": 764.010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9502434730529785, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 87, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97177124023438, "t": 70.53437042236328, "r": 547.29254, "b": 105.20692443847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9725183844566345, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID."}, {"label": "caption", "id": 3, "page_no": 87, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13768005371094, "t": 223.07266235351562, "r": 394.4398498535156, "b": 232.92161560058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9459361433982849, "cells": [{"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID"}, {"label": "list_item", "id": 4, "page_no": 87, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.97732543945312, "t": 249.29721069335938, "r": 514.37964, "b": 271.60693359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9487968683242798, "cells": [{"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}]}, "text": "3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61."}, {"label": "caption", "id": 5, "page_no": 87, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.13868713378906, "t": 521.3612060546875, "r": 320.7819519042969, "b": 530.787841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9481346607208252, "cells": [{"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-61 Viewing the global variable value"}, {"label": "list_item", "id": 6, "page_no": 87, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78077697753906, "t": 547.3094482421875, "r": 541.26068, "b": 569.7304077148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9655671715736389, "cells": [{"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}]}, "text": "4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID."}, {"label": "caption", "id": 7, "page_no": 87, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.2648468017578, "t": 685.8698120117188, "r": 474.20855712890625, "b": 695.402901, "coord_origin": "TOPLEFT"}, "confidence": 0.9365612864494324, "cells": [{"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 87, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.12271118164062, "t": 285.7159118652344, "r": 395.9803466796875, "b": 519.3853149414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9821423888206482, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 87, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.00576782226562, "t": 584.1505737304688, "r": 382.0115966796875, "b": 684.032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9579524993896484, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 87, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.9663848876953, "t": 119.12814331054688, "r": 547.538818359375, "b": 221.56602478027344, "coord_origin": "TOPLEFT"}, "confidence": 0.9356961846351624, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 87, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97177124023438, "t": 70.53437042236328, "r": 547.29254, "b": 105.20692443847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9725183844566345, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID."}, {"label": "caption", "id": 3, "page_no": 87, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13768005371094, "t": 223.07266235351562, "r": 394.4398498535156, "b": 232.92161560058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9459361433982849, "cells": [{"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID"}, {"label": "list_item", "id": 4, "page_no": 87, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.97732543945312, "t": 249.29721069335938, "r": 514.37964, "b": 271.60693359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9487968683242798, "cells": [{"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}]}, "text": "3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61."}, {"label": "caption", "id": 5, "page_no": 87, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.13868713378906, "t": 521.3612060546875, "r": 320.7819519042969, "b": 530.787841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9481346607208252, "cells": [{"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-61 Viewing the global variable value"}, {"label": "list_item", "id": 6, "page_no": 87, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78077697753906, "t": 547.3094482421875, "r": 541.26068, "b": 569.7304077148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9655671715736389, "cells": [{"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}]}, "text": "4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID."}, {"label": "caption", "id": 7, "page_no": 87, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.2648468017578, "t": 685.8698120117188, "r": 474.20855712890625, "b": 695.402901, "coord_origin": "TOPLEFT"}, "confidence": 0.9365612864494324, "cells": [{"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 87, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.12271118164062, "t": 285.7159118652344, "r": 395.9803466796875, "b": 519.3853149414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9821423888206482, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 87, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.00576782226562, "t": 584.1505737304688, "r": 382.0115966796875, "b": 684.032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9579524993896484, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 87, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.9663848876953, "t": 119.12814331054688, "r": 547.538818359375, "b": 221.56602478027344, "coord_origin": "TOPLEFT"}, "confidence": 0.9356961846351624, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 87, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95808410644531, "t": 754.2484130859375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9073862433433533, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "72"}, {"label": "page_footer", "id": 1, "page_no": 87, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32298278808594, "t": 754.67529296875, "r": 334.42142, "b": 764.010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9502434730529785, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 88, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.31243896484375, "t": 754.7880249023438, "r": 523.59357, "b": 764.0306396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9599050283432007, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3995361328125, "t": 754.3471069335938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170706868171692, "cells": [{"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.2493438720703, "t": 70.56134033203125, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9599125981330872, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.18749237060547, "t": 252.73291015625, "r": 368.2061462402344, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9425347447395325, "cells": [{"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.10256958007812, "t": 278.1611328125, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.956287682056427, "cells": [{"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.91213989257812, "t": 293.9790344238281, "r": 512.95129, "b": 316.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9553588032722473, "cells": [{"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5059051513672, "t": 322.4664001464844, "r": 535.26086, "b": 356.90073, "coord_origin": "TOPLEFT"}, "confidence": 0.9514802098274231, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.13351440429688, "t": 544.0534057617188, "r": 520.2975463867188, "b": 553.3374633789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9272187948226929, "cells": [{"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 64.07161712646484, "t": 107.4771728515625, "r": 546.6607055664062, "b": 250.95677185058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9455775618553162, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 88, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31243896484375, "t": 754.7880249023438, "r": 523.59357, "b": 764.0306396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9599050283432007, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 88, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3995361328125, "t": 754.3471069335938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170706868171692, "cells": [{"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "73"}, {"label": "list_item", "id": 2, "page_no": 88, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.2493438720703, "t": 70.56134033203125, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9599125981330872, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user\u2019s own row."}, {"label": "caption", "id": 3, "page_no": 88, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.18749237060547, "t": 252.73291015625, "r": 368.2061462402344, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9425347447395325, "cells": [{"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 88, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.10256958007812, "t": 278.1611328125, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.956287682056427, "cells": [{"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Other examples of data access with RCAC"}, {"label": "text", "id": 5, "page_no": 88, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.91213989257812, "t": 293.9790344238281, "r": 512.95129, "b": 316.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9553588032722473, "cells": [{"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}]}, "text": "To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 88, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5059051513672, "t": 322.4664001464844, "r": 535.26086, "b": 356.90073, "coord_origin": "TOPLEFT"}, "confidence": 0.9514802098274231, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts."}, {"label": "caption", "id": 7, "page_no": 88, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13351440429688, "t": 544.0534057617188, "r": 520.2975463867188, "b": 553.3374633789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9272187948226929, "cells": [{"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile"}, {"label": "picture", "id": 8, "page_no": 88, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.07161712646484, "t": 107.4771728515625, "r": 546.6607055664062, "b": 250.95677185058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9455775618553162, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 88, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.2493438720703, "t": 70.56134033203125, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9599125981330872, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user\u2019s own row."}, {"label": "caption", "id": 3, "page_no": 88, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.18749237060547, "t": 252.73291015625, "r": 368.2061462402344, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9425347447395325, "cells": [{"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 88, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.10256958007812, "t": 278.1611328125, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.956287682056427, "cells": [{"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Other examples of data access with RCAC"}, {"label": "text", "id": 5, "page_no": 88, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.91213989257812, "t": 293.9790344238281, "r": 512.95129, "b": 316.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9553588032722473, "cells": [{"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}]}, "text": "To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 88, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5059051513672, "t": 322.4664001464844, "r": 535.26086, "b": 356.90073, "coord_origin": "TOPLEFT"}, "confidence": 0.9514802098274231, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts."}, {"label": "caption", "id": 7, "page_no": 88, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13351440429688, "t": 544.0534057617188, "r": 520.2975463867188, "b": 553.3374633789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9272187948226929, "cells": [{"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile"}, {"label": "picture", "id": 8, "page_no": 88, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.07161712646484, "t": 107.4771728515625, "r": 546.6607055664062, "b": 250.95677185058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9455775618553162, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 88, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31243896484375, "t": 754.7880249023438, "r": 523.59357, "b": 764.0306396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9599050283432007, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 88, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3995361328125, "t": 754.3471069335938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170706868171692, "cells": [{"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "73"}]}}, {"page_no": 89, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.96171188354492, "t": 754.11767578125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9149019718170166, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27671813964844, "t": 754.632568359375, "r": 334.42142, "b": 764.0243530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9512301087379456, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.940185546875, "t": 70.60448455810547, "r": 547.25665, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9553778171539307, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.05810546875, "t": 501.21514892578125, "r": 535.08740234375, "b": 510.911376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9247013926506042, "cells": [{"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 89, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.96171188354492, "t": 754.11767578125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9149019718170166, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "74"}, {"label": "page_footer", "id": 1, "page_no": 89, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27671813964844, "t": 754.632568359375, "r": 334.42142, "b": 764.0243530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9512301087379456, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 89, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.940185546875, "t": 70.60448455810547, "r": 547.25665, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9553778171539307, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions."}, {"label": "caption", "id": 3, "page_no": 89, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.05810546875, "t": 501.21514892578125, "r": 535.08740234375, "b": 510.911376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9247013926506042, "cells": [{"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile"}], "body": [{"label": "list_item", "id": 2, "page_no": 89, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.940185546875, "t": 70.60448455810547, "r": 547.25665, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9553778171539307, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions."}, {"label": "caption", "id": 3, "page_no": 89, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.05810546875, "t": 501.21514892578125, "r": 535.08740234375, "b": 510.911376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9247013926506042, "cells": [{"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 89, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.96171188354492, "t": 754.11767578125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9149019718170166, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "74"}, {"label": "page_footer", "id": 1, "page_no": 89, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27671813964844, "t": 754.632568359375, "r": 334.42142, "b": 764.0243530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9512301087379456, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 90, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.29998779296875, "t": 754.763427734375, "r": 523.59357, "b": 764.0404663085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9579424262046814, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.4443969726562, "t": 754.1858520507812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183679819107056, "cells": [{"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.18202209472656, "t": 70.665283203125, "r": 547.24005, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9646015167236328, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.2951202392578, "t": 492.5509033203125, "r": 501.49591064453125, "b": 502.1121826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9091576933860779, "cells": [{"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.09226989746094, "t": 521.0582885742188, "r": 375.06628, "b": 534.3353271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9637629389762878, "cells": [{"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.77622985839844, "t": 547.2048950195312, "r": 547.16693, "b": 593.8646850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9798411130905151, "cells": [{"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 90, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29998779296875, "t": 754.763427734375, "r": 523.59357, "b": 764.0404663085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9579424262046814, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 90, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4443969726562, "t": 754.1858520507812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183679819107056, "cells": [{"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "75"}, {"label": "list_item", "id": 2, "page_no": 90, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.18202209472656, "t": 70.665283203125, "r": 547.24005, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9646015167236328, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 90, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2951202392578, "t": 492.5509033203125, "r": 501.49591064453125, "b": 502.1121826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9091576933860779, "cells": [{"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile"}, {"label": "section_header", "id": 4, "page_no": 90, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.09226989746094, "t": 521.0582885742188, "r": 375.06628, "b": 534.3353271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9637629389762878, "cells": [{"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.11 Query implementation with RCAC activated"}, {"label": "text", "id": 5, "page_no": 90, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.77622985839844, "t": 547.2048950195312, "r": 547.16693, "b": 593.8646850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9798411130905151, "cells": [{"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}]}, "text": "This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer."}], "body": [{"label": "list_item", "id": 2, "page_no": 90, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.18202209472656, "t": 70.665283203125, "r": 547.24005, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9646015167236328, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 90, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2951202392578, "t": 492.5509033203125, "r": 501.49591064453125, "b": 502.1121826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9091576933860779, "cells": [{"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile"}, {"label": "section_header", "id": 4, "page_no": 90, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.09226989746094, "t": 521.0582885742188, "r": 375.06628, "b": 534.3353271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9637629389762878, "cells": [{"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.11 Query implementation with RCAC activated"}, {"label": "text", "id": 5, "page_no": 90, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.77622985839844, "t": 547.2048950195312, "r": 547.16693, "b": 593.8646850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9798411130905151, "cells": [{"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}]}, "text": "This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 90, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29998779296875, "t": 754.763427734375, "r": 523.59357, "b": 764.0404663085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9579424262046814, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 90, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4443969726562, "t": 754.1858520507812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183679819107056, "cells": [{"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "75"}]}}, {"page_no": 91, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.95058822631836, "t": 754.2190551757812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9133445024490356, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32958221435547, "t": 754.64501953125, "r": 334.42142, "b": 763.9790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.952595591545105, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 136.1143798828125, "t": 70.55393981933594, "r": 266.86069, "b": 81.28746795654297, "coord_origin": "TOPLEFT"}, "confidence": 0.7829880118370056, "cells": [{"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.79046630859375, "t": 87.4289321899414, "r": 532.47498, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9777867794036865, "cells": [{"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.02316284179688, "t": 500.6075134277344, "r": 340.572021484375, "b": 510.297119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476897120475769, "cells": [{"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.32431030273438, "t": 135.9857940673828, "r": 399.8092956542969, "b": 498.6230773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9861094355583191, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 91, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95058822631836, "t": 754.2190551757812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9133445024490356, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "76"}, {"label": "page_footer", "id": 1, "page_no": 91, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32958221435547, "t": 754.64501953125, "r": 334.42142, "b": 763.9790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.952595591545105, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 91, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.1143798828125, "t": 70.55393981933594, "r": 266.86069, "b": 81.28746795654297, "coord_origin": "TOPLEFT"}, "confidence": 0.7829880118370056, "cells": [{"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 91, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.79046630859375, "t": 87.4289321899414, "r": 532.47498, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9777867794036865, "cells": [{"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing."}, {"label": "caption", "id": 4, "page_no": 91, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.02316284179688, "t": 500.6075134277344, "r": 340.572021484375, "b": 510.297119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476897120475769, "cells": [{"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-67 Visual Explain with no RCAC enabled"}, {"label": "picture", "id": 5, "page_no": 91, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.32431030273438, "t": 135.9857940673828, "r": 399.8092956542969, "b": 498.6230773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9861094355583191, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 91, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.1143798828125, "t": 70.55393981933594, "r": 266.86069, "b": 81.28746795654297, "coord_origin": "TOPLEFT"}, "confidence": 0.7829880118370056, "cells": [{"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 91, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.79046630859375, "t": 87.4289321899414, "r": 532.47498, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9777867794036865, "cells": [{"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing."}, {"label": "caption", "id": 4, "page_no": 91, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.02316284179688, "t": 500.6075134277344, "r": 340.572021484375, "b": 510.297119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476897120475769, "cells": [{"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-67 Visual Explain with no RCAC enabled"}, {"label": "picture", "id": 5, "page_no": 91, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.32431030273438, "t": 135.9857940673828, "r": 399.8092956542969, "b": 498.6230773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9861094355583191, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 91, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95058822631836, "t": 754.2190551757812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9133445024490356, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "76"}, {"label": "page_footer", "id": 1, "page_no": 91, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32958221435547, "t": 754.64501953125, "r": 334.42142, "b": 763.9790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.952595591545105, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 92, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 92, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 92, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 92, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 92, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 92, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 92, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 92, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 92, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 92, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 92, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 92, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 92, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 92, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 92, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 92, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 92, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 93, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.94062805175781, "t": 754.1842651367188, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147760272026062, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.33392333984375, "t": 754.6708374023438, "r": 334.42142, "b": 763.9481811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9523293972015381, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.9367218017578, "t": 70.61515045166016, "r": 547.18872, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9803981184959412, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.2020263671875, "t": 238.3303680419922, "r": 249.87530517578125, "b": 247.58013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9492548704147339, "cells": [{"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 64.13593292236328, "t": 119.456298828125, "r": 508.70513916015625, "b": 234.94915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9820812344551086, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 93, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.94062805175781, "t": 754.1842651367188, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147760272026062, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "78"}, {"label": "page_footer", "id": 1, "page_no": 93, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33392333984375, "t": 754.6708374023438, "r": 334.42142, "b": 763.9481811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9523293972015381, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 93, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9367218017578, "t": 70.61515045166016, "r": 547.18872, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9803981184959412, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, \u201cIndex advisor\u201d on page 99."}, {"label": "caption", "id": 3, "page_no": 93, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.2020263671875, "t": 238.3303680419922, "r": 249.87530517578125, "b": 247.58013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9492548704147339, "cells": [{"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-70 Index advice with RCAC enabled"}, {"label": "picture", "id": 4, "page_no": 93, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.13593292236328, "t": 119.456298828125, "r": 508.70513916015625, "b": 234.94915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9820812344551086, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 93, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9367218017578, "t": 70.61515045166016, "r": 547.18872, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9803981184959412, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, \u201cIndex advisor\u201d on page 99."}, {"label": "caption", "id": 3, "page_no": 93, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.2020263671875, "t": 238.3303680419922, "r": 249.87530517578125, "b": 247.58013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9492548704147339, "cells": [{"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-70 Index advice with RCAC enabled"}, {"label": "picture", "id": 4, "page_no": 93, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.13593292236328, "t": 119.456298828125, "r": 508.70513916015625, "b": 234.94915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9820812344551086, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 93, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.94062805175781, "t": 754.1842651367188, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147760272026062, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "78"}, {"label": "page_footer", "id": 1, "page_no": 93, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33392333984375, "t": 754.6708374023438, "r": 334.42142, "b": 763.9481811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9523293972015381, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 94, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.744651794433594, "t": 754.7680053710938, "r": 257.24335, "b": 764.091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.949221134185791, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3575439453125, "t": 754.22607421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138334393501282, "cells": [{"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.33033752441406, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9421312808990479, "cells": [{"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.93673706054688, "t": 316.58636474609375, "r": 547.18188, "b": 386.9336242675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9848811626434326, "cells": [{"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.76991271972656, "t": 398.7801208496094, "r": 547.25549, "b": 432.91998, "coord_origin": "TOPLEFT"}, "confidence": 0.981573224067688, "cells": [{"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.10678100585938, "t": 444.8198547363281, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9355656504631042, "cells": [{"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8011016845703, "t": 462.3359680175781, "r": 254.56697, "b": 472.4132080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.946121335029602, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7434844970703, "t": 474.6011657714844, "r": 285.9834289550781, "b": 483.91916, "coord_origin": "TOPLEFT"}, "confidence": 0.9351681470870972, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.7656707763672, "t": 485.91131591796875, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}, "confidence": 0.9449910521507263, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.72933959960938, "t": 498.2069091796875, "r": 318.95844, "b": 508.3310852050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9523792862892151, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6404241919517517, "cells": [{"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "picture", "bbox": {"l": 32.17748260498047, "t": 70.54951477050781, "r": 239.63507080078125, "b": 238.013427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.7029868960380554, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 94, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.744651794433594, "t": 754.7680053710938, "r": 257.24335, "b": 764.091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.949221134185791, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 94, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3575439453125, "t": 754.22607421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138334393501282, "cells": [{"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "79"}, {"label": "text", "id": 2, "page_no": 94, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5."}, {"label": "section_header", "id": 3, "page_no": 94, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.33033752441406, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9421312808990479, "cells": [{"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC and non-SQL interfaces"}, {"label": "text", "id": 4, "page_no": 94, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93673706054688, "t": 316.58636474609375, "r": 547.18188, "b": 386.9336242675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9848811626434326, "cells": [{"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}]}, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF )."}, {"label": "text", "id": 5, "page_no": 94, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.76991271972656, "t": 398.7801208496094, "r": 547.25549, "b": 432.91998, "coord_origin": "TOPLEFT"}, "confidence": 0.981573224067688, "cells": [{"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}]}, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter."}, {"label": "text", "id": 6, "page_no": 94, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.10678100585938, "t": 444.8198547363281, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9355656504631042, "cells": [{"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 94, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8011016845703, "t": 462.3359680175781, "r": 254.56697, "b": 472.4132080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.946121335029602, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Unsupported interfaces"}, {"label": "list_item", "id": 8, "page_no": 94, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7434844970703, "t": 474.6011657714844, "r": 285.9834289550781, "b": 483.91916, "coord_origin": "TOPLEFT"}, "confidence": 0.9351681470870972, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native query result differences"}, {"label": "list_item", "id": 9, "page_no": 94, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.7656707763672, "t": 485.91131591796875, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}, "confidence": 0.9449910521507263, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Accidental updates with masked values"}, {"label": "list_item", "id": 10, "page_no": 94, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72933959960938, "t": 498.2069091796875, "r": 318.95844, "b": 508.3310852050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9523792862892151, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH System CL commands considerations"}, {"label": "text", "id": 11, "page_no": 94, "cluster": {"id": 11, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6404241919517517, "cells": [{"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "picture", "id": 12, "page_no": 94, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 32.17748260498047, "t": 70.54951477050781, "r": 239.63507080078125, "b": 238.013427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.7029868960380554, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 94, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5."}, {"label": "section_header", "id": 3, "page_no": 94, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.33033752441406, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9421312808990479, "cells": [{"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC and non-SQL interfaces"}, {"label": "text", "id": 4, "page_no": 94, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93673706054688, "t": 316.58636474609375, "r": 547.18188, "b": 386.9336242675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9848811626434326, "cells": [{"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}]}, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF )."}, {"label": "text", "id": 5, "page_no": 94, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.76991271972656, "t": 398.7801208496094, "r": 547.25549, "b": 432.91998, "coord_origin": "TOPLEFT"}, "confidence": 0.981573224067688, "cells": [{"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}]}, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter."}, {"label": "text", "id": 6, "page_no": 94, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.10678100585938, "t": 444.8198547363281, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9355656504631042, "cells": [{"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 94, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8011016845703, "t": 462.3359680175781, "r": 254.56697, "b": 472.4132080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.946121335029602, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Unsupported interfaces"}, {"label": "list_item", "id": 8, "page_no": 94, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7434844970703, "t": 474.6011657714844, "r": 285.9834289550781, "b": 483.91916, "coord_origin": "TOPLEFT"}, "confidence": 0.9351681470870972, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native query result differences"}, {"label": "list_item", "id": 9, "page_no": 94, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.7656707763672, "t": 485.91131591796875, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}, "confidence": 0.9449910521507263, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Accidental updates with masked values"}, {"label": "list_item", "id": 10, "page_no": 94, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72933959960938, "t": 498.2069091796875, "r": 318.95844, "b": 508.3310852050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9523792862892151, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH System CL commands considerations"}, {"label": "text", "id": 11, "page_no": 94, "cluster": {"id": 11, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6404241919517517, "cells": [{"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "picture", "id": 12, "page_no": 94, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 32.17748260498047, "t": 70.54951477050781, "r": 239.63507080078125, "b": 238.013427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.7029868960380554, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 94, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.744651794433594, "t": 754.7680053710938, "r": 257.24335, "b": 764.091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.949221134185791, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 94, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3575439453125, "t": 754.22607421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138334393501282, "cells": [{"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "79"}]}}, {"page_no": 95, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1874008178711, "t": 754.3892211914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9252743721008301, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2634048461914, "t": 754.6898193359375, "r": 334.42142, "b": 763.9056396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9558761715888977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.43855285644531, "t": 73.36776733398438, "r": 275.70184, "b": 89.5892105102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9696915745735168, "cells": [{"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.1591339111328, "t": 105.93167114257812, "r": 519.797, "b": 128.38632202148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9809359312057495, "cells": [{"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.89776611328125, "t": 140.08090209960938, "r": 547.21381, "b": 174.56727600097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9822454452514648, "cells": [{"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5338592529297, "t": 180.65792846679688, "r": 526.03485, "b": 191.1039581298828, "coord_origin": "TOPLEFT"}, "confidence": 0.9507953524589539, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.57638549804688, "t": 192.57815551757812, "r": 410.49484, "b": 203.17335510253906, "coord_origin": "TOPLEFT"}, "confidence": 0.9401845932006836, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.51390075683594, "t": 205.0358123779297, "r": 264.33585, "b": 215.18972778320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9484872221946716, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.78880310058594, "t": 226.60470581054688, "r": 537.02081, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9780105948448181, "cells": [{"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.04721069335938, "t": 260.5085144042969, "r": 547.27563, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9873144030570984, "cells": [{"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.47200012207031, "t": 415.3008117675781, "r": 329.61151, "b": 431.6415710449219, "coord_origin": "TOPLEFT"}, "confidence": 0.9681466221809387, "cells": [{"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.66397094726562, "t": 447.6929626464844, "r": 542.39417, "b": 494.5770263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9864740371704102, "cells": [{"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.92169189453125, "t": 500.54949951171875, "r": 198.29859924316406, "b": 510.86075, "coord_origin": "TOPLEFT"}, "confidence": 0.9383296370506287, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.69873046875, "t": 512.3756713867188, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}, "confidence": 0.9262765645980835, "cells": [{"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.62481689453125, "t": 524.65283203125, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9469870328903198, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.5345458984375, "t": 536.3973388671875, "r": 285.93896484375, "b": 546.8602, "coord_origin": "TOPLEFT"}, "confidence": 0.934996485710144, "cells": [{"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.56021118164062, "t": 548.5358276367188, "r": 441.7839660644531, "b": 558.86, "coord_origin": "TOPLEFT"}, "confidence": 0.9559246897697449, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 135.97003173828125, "t": 570.7841796875, "r": 541.63519, "b": 617.0958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9824656248092651, "cells": [{"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 135.73948669433594, "t": 628.62744140625, "r": 547.28345, "b": 651.3435668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.975006639957428, "cells": [{"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.9209747314453, "t": 658.1214599609375, "r": 299.18975830078125, "b": 668.4609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9473878741264343, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.68008422851562, "t": 670.212890625, "r": 393.49902, "b": 680.426513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9464444518089294, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.76820373535156, "t": 681.9945068359375, "r": 358.48862, "b": 692.8447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444779753684998, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.62449645996094, "t": 693.85107421875, "r": 310.7019348144531, "b": 704.2999267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9346434473991394, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 135.7325439453125, "t": 705.99072265625, "r": 354.20792, "b": 716.4747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9466715455055237, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 135.72433471679688, "t": 718.1799926757812, "r": 246.4168701171875, "b": 728.3264770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9458449482917786, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "text", "bbox": {"l": 141.973876953125, "t": 336.4569396972656, "r": 541.237, "b": 383.3992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816816449165344, "cells": [{"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 95, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1874008178711, "t": 754.3892211914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9252743721008301, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "80"}, {"label": "page_footer", "id": 1, "page_no": 95, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2634048461914, "t": 754.6898193359375, "r": 334.42142, "b": 763.9056396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9558761715888977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 95, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.43855285644531, "t": 73.36776733398438, "r": 275.70184, "b": 89.5892105102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9696915745735168, "cells": [{"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.1 Unsupported interfaces"}, {"label": "text", "id": 3, "page_no": 95, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1591339111328, "t": 105.93167114257812, "r": 519.797, "b": 128.38632202148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9809359312057495, "cells": [{"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is not possible to create a row permission or column mask on a distributed table or a program-described file."}, {"label": "text", "id": 4, "page_no": 95, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.89776611328125, "t": 140.08090209960938, "r": 547.21381, "b": 174.56727600097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9822454452514648, "cells": [{"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message:"}, {"label": "list_item", "id": 5, "page_no": 95, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5338592529297, "t": 180.65792846679688, "r": 526.03485, "b": 191.1039581298828, "coord_origin": "TOPLEFT"}, "confidence": 0.9507953524589539, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A logical file with multiple formats if the open attempt requests more than one format."}, {"label": "list_item", "id": 6, "page_no": 95, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.57638549804688, "t": 192.57815551757812, "r": 410.49484, "b": 203.17335510253906, "coord_origin": "TOPLEFT"}, "confidence": 0.9401845932006836, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table or query that specifies an ICU 2.6.1 sort sequence."}, {"label": "list_item", "id": 7, "page_no": 95, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.51390075683594, "t": 205.0358123779297, "r": 264.33585, "b": 215.18972778320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9484872221946716, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table with read triggers."}, {"label": "text", "id": 8, "page_no": 95, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78880310058594, "t": 226.60470581054688, "r": 537.02081, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9780105948448181, "cells": [{"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}]}, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated."}, {"label": "text", "id": 9, "page_no": 95, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04721069335938, "t": 260.5085144042969, "r": 547.27563, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9873144030570984, "cells": [{"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1."}, {"label": "section_header", "id": 10, "page_no": 95, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.47200012207031, "t": 415.3008117675781, "r": 329.61151, "b": 431.6415710449219, "coord_origin": "TOPLEFT"}, "confidence": 0.9681466221809387, "cells": [{"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.2 Native query result differences"}, {"label": "text", "id": 11, "page_no": 95, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.66397094726562, "t": 447.6929626464844, "r": 542.39417, "b": 494.5770263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9864740371704102, "cells": [{"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items:"}, {"label": "list_item", "id": 12, "page_no": 95, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.92169189453125, "t": 500.54949951171875, "r": 198.29859924316406, "b": 510.86075, "coord_origin": "TOPLEFT"}, "confidence": 0.9383296370506287, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query/400"}, {"label": "list_item", "id": 13, "page_no": 95, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.69873046875, "t": 512.3756713867188, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}, "confidence": 0.9262765645980835, "cells": [{"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH QQQQRY API"}, {"label": "list_item", "id": 14, "page_no": 95, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.62481689453125, "t": 524.65283203125, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9469870328903198, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Open Query File ( OPNQRYF ) command"}, {"label": "list_item", "id": 15, "page_no": 95, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.5345458984375, "t": 536.3973388671875, "r": 285.93896484375, "b": 546.8602, "coord_origin": "TOPLEFT"}, "confidence": 0.934996485710144, "cells": [{"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Run Query ( RUNQRY ) command"}, {"label": "list_item", "id": 16, "page_no": 95, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.56021118164062, "t": 548.5358276367188, "r": 441.7839660644531, "b": 558.86, "coord_origin": "TOPLEFT"}, "confidence": 0.9559246897697449, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view"}, {"label": "text", "id": 17, "page_no": 95, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.97003173828125, "t": 570.7841796875, "r": 541.63519, "b": 617.0958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9824656248092651, "cells": [{"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}]}, "text": "Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default."}, {"label": "text", "id": 18, "page_no": 95, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.73948669433594, "t": 628.62744140625, "r": 547.28345, "b": 651.3435668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.975006639957428, "cells": [{"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}]}, "text": "The following list documents some of the query output differences that can occur when native query requests are processed by CQE:"}, {"label": "list_item", "id": 19, "page_no": 95, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.9209747314453, "t": 658.1214599609375, "r": 299.18975830078125, "b": 668.4609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9473878741264343, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different ordering in the result set"}, {"label": "list_item", "id": 20, "page_no": 95, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68008422851562, "t": 670.212890625, "r": 393.49902, "b": 680.426513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9464444518089294, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different values for null columns or columns with errors"}, {"label": "list_item", "id": 21, "page_no": 95, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.76820373535156, "t": 681.9945068359375, "r": 358.48862, "b": 692.8447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444779753684998, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Suppression of some mapping error messages"}, {"label": "list_item", "id": 22, "page_no": 95, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62449645996094, "t": 693.85107421875, "r": 310.7019348144531, "b": 704.2999267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9346434473991394, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Loss of RRN positioning capabilities"}, {"label": "list_item", "id": 23, "page_no": 95, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.7325439453125, "t": 705.99072265625, "r": 354.20792, "b": 716.4747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9466715455055237, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Duplicate key processing behavior differences"}, {"label": "list_item", "id": 24, "page_no": 95, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.72433471679688, "t": 718.1799926757812, "r": 246.4168701171875, "b": 728.3264770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9458449482917786, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Missing key feedback"}, {"label": "text", "id": 25, "page_no": 95, "cluster": {"id": 25, "label": "text", "bbox": {"l": 141.973876953125, "t": 336.4569396972656, "r": 541.237, "b": 383.3992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816816449165344, "cells": [{"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC."}], "body": [{"label": "section_header", "id": 2, "page_no": 95, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.43855285644531, "t": 73.36776733398438, "r": 275.70184, "b": 89.5892105102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9696915745735168, "cells": [{"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.1 Unsupported interfaces"}, {"label": "text", "id": 3, "page_no": 95, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1591339111328, "t": 105.93167114257812, "r": 519.797, "b": 128.38632202148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9809359312057495, "cells": [{"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is not possible to create a row permission or column mask on a distributed table or a program-described file."}, {"label": "text", "id": 4, "page_no": 95, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.89776611328125, "t": 140.08090209960938, "r": 547.21381, "b": 174.56727600097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9822454452514648, "cells": [{"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message:"}, {"label": "list_item", "id": 5, "page_no": 95, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5338592529297, "t": 180.65792846679688, "r": 526.03485, "b": 191.1039581298828, "coord_origin": "TOPLEFT"}, "confidence": 0.9507953524589539, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A logical file with multiple formats if the open attempt requests more than one format."}, {"label": "list_item", "id": 6, "page_no": 95, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.57638549804688, "t": 192.57815551757812, "r": 410.49484, "b": 203.17335510253906, "coord_origin": "TOPLEFT"}, "confidence": 0.9401845932006836, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table or query that specifies an ICU 2.6.1 sort sequence."}, {"label": "list_item", "id": 7, "page_no": 95, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.51390075683594, "t": 205.0358123779297, "r": 264.33585, "b": 215.18972778320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9484872221946716, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table with read triggers."}, {"label": "text", "id": 8, "page_no": 95, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78880310058594, "t": 226.60470581054688, "r": 537.02081, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9780105948448181, "cells": [{"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}]}, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated."}, {"label": "text", "id": 9, "page_no": 95, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04721069335938, "t": 260.5085144042969, "r": 547.27563, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9873144030570984, "cells": [{"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1."}, {"label": "section_header", "id": 10, "page_no": 95, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.47200012207031, "t": 415.3008117675781, "r": 329.61151, "b": 431.6415710449219, "coord_origin": "TOPLEFT"}, "confidence": 0.9681466221809387, "cells": [{"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.2 Native query result differences"}, {"label": "text", "id": 11, "page_no": 95, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.66397094726562, "t": 447.6929626464844, "r": 542.39417, "b": 494.5770263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9864740371704102, "cells": [{"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items:"}, {"label": "list_item", "id": 12, "page_no": 95, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.92169189453125, "t": 500.54949951171875, "r": 198.29859924316406, "b": 510.86075, "coord_origin": "TOPLEFT"}, "confidence": 0.9383296370506287, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query/400"}, {"label": "list_item", "id": 13, "page_no": 95, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.69873046875, "t": 512.3756713867188, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}, "confidence": 0.9262765645980835, "cells": [{"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH QQQQRY API"}, {"label": "list_item", "id": 14, "page_no": 95, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.62481689453125, "t": 524.65283203125, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9469870328903198, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Open Query File ( OPNQRYF ) command"}, {"label": "list_item", "id": 15, "page_no": 95, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.5345458984375, "t": 536.3973388671875, "r": 285.93896484375, "b": 546.8602, "coord_origin": "TOPLEFT"}, "confidence": 0.934996485710144, "cells": [{"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Run Query ( RUNQRY ) command"}, {"label": "list_item", "id": 16, "page_no": 95, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.56021118164062, "t": 548.5358276367188, "r": 441.7839660644531, "b": 558.86, "coord_origin": "TOPLEFT"}, "confidence": 0.9559246897697449, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view"}, {"label": "text", "id": 17, "page_no": 95, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.97003173828125, "t": 570.7841796875, "r": 541.63519, "b": 617.0958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9824656248092651, "cells": [{"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}]}, "text": "Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default."}, {"label": "text", "id": 18, "page_no": 95, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.73948669433594, "t": 628.62744140625, "r": 547.28345, "b": 651.3435668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.975006639957428, "cells": [{"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}]}, "text": "The following list documents some of the query output differences that can occur when native query requests are processed by CQE:"}, {"label": "list_item", "id": 19, "page_no": 95, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.9209747314453, "t": 658.1214599609375, "r": 299.18975830078125, "b": 668.4609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9473878741264343, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different ordering in the result set"}, {"label": "list_item", "id": 20, "page_no": 95, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68008422851562, "t": 670.212890625, "r": 393.49902, "b": 680.426513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9464444518089294, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different values for null columns or columns with errors"}, {"label": "list_item", "id": 21, "page_no": 95, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.76820373535156, "t": 681.9945068359375, "r": 358.48862, "b": 692.8447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444779753684998, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Suppression of some mapping error messages"}, {"label": "list_item", "id": 22, "page_no": 95, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62449645996094, "t": 693.85107421875, "r": 310.7019348144531, "b": 704.2999267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9346434473991394, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Loss of RRN positioning capabilities"}, {"label": "list_item", "id": 23, "page_no": 95, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.7325439453125, "t": 705.99072265625, "r": 354.20792, "b": 716.4747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9466715455055237, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Duplicate key processing behavior differences"}, {"label": "list_item", "id": 24, "page_no": 95, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.72433471679688, "t": 718.1799926757812, "r": 246.4168701171875, "b": 728.3264770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9458449482917786, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Missing key feedback"}, {"label": "text", "id": 25, "page_no": 95, "cluster": {"id": 25, "label": "text", "bbox": {"l": 141.973876953125, "t": 336.4569396972656, "r": 541.237, "b": 383.3992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816816449165344, "cells": [{"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 95, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1874008178711, "t": 754.3892211914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9252743721008301, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "80"}, {"label": "page_footer", "id": 1, "page_no": 95, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2634048461914, "t": 754.6898193359375, "r": 334.42142, "b": 763.9056396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9558761715888977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 96, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 353.64373779296875, "t": 754.87646484375, "r": 523.63324, "b": 764.1002197265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9528434872627258, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.66748046875, "t": 754.2764282226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146247506141663, "cells": [{"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.42791748046875, "t": 70.61494445800781, "r": 543.05804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9628674387931824, "cells": [{"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.22903442382812, "t": 99.42984008789062, "r": 521.8867797851562, "b": 109.78103637695312, "coord_origin": "TOPLEFT"}, "confidence": 0.8841223120689392, "cells": [{"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.18670654296875, "t": 121.53282165527344, "r": 544.66058, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9777080416679382, "cells": [{"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.66980743408203, "t": 228.1348419189453, "r": 396.82227, "b": 244.21737670898438, "coord_origin": "TOPLEFT"}, "confidence": 0.967221200466156, "cells": [{"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.81739807128906, "t": 260.6902770996094, "r": 547.18481, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9834569096565247, "cells": [{"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.87274169921875, "t": 306.6039123535156, "r": 541.6969, "b": 352.80584716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875996112823486, "cells": [{"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.08998107910156, "t": 364.7171325683594, "r": 547.14398, "b": 422.7193, "coord_origin": "TOPLEFT"}, "confidence": 0.9872422218322754, "cells": [{"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "caption", "bbox": {"l": 136.07180786132812, "t": 722.1818237304688, "r": 374.3499755859375, "b": 731.462898, "coord_origin": "TOPLEFT"}, "confidence": 0.9452338218688965, "cells": [{"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 141.93385314941406, "t": 161.8843994140625, "r": 495.4548, "b": 196.31082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9745184183120728, "cells": [{"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 135.8197021484375, "t": 437.9704895019531, "r": 527.1633911132812, "b": 719.9022827148438, "coord_origin": "TOPLEFT"}, "confidence": 0.980728805065155, "cells": [{"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 96, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.64373779296875, "t": 754.87646484375, "r": 523.63324, "b": 764.1002197265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9528434872627258, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 96, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.66748046875, "t": 754.2764282226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146247506141663, "cells": [{"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "81"}, {"label": "text", "id": 2, "page_no": 96, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.42791748046875, "t": 70.61494445800781, "r": 543.05804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9628674387931824, "cells": [{"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at:"}, {"label": "text", "id": 3, "page_no": 96, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.22903442382812, "t": 99.42984008789062, "r": 521.8867797851562, "b": 109.78103637695312, "coord_origin": "TOPLEFT"}, "confidence": 0.8841223120689392, "cells": [{"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "text", "id": 4, "page_no": 96, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.18670654296875, "t": 121.53282165527344, "r": 544.66058, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9777080416679382, "cells": [{"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance."}, {"label": "section_header", "id": 5, "page_no": 96, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.66980743408203, "t": 228.1348419189453, "r": 396.82227, "b": 244.21737670898438, "coord_origin": "TOPLEFT"}, "confidence": 0.967221200466156, "cells": [{"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "5.3 Accidental updates with masked values"}, {"label": "text", "id": 6, "page_no": 96, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81739807128906, "t": 260.6902770996094, "r": 547.18481, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9834569096565247, "cells": [{"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access."}, {"label": "text", "id": 7, "page_no": 96, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87274169921875, "t": 306.6039123535156, "r": 541.6969, "b": 352.80584716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875996112823486, "cells": [{"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as shown Figure 5-1."}, {"label": "text", "id": 8, "page_no": 96, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08998107910156, "t": 364.7171325683594, "r": 547.14398, "b": 422.7193, "coord_origin": "TOPLEFT"}, "confidence": 0.9872422218322754, "cells": [{"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value."}, {"label": "caption", "id": 9, "page_no": 96, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.07180786132812, "t": 722.1818237304688, "r": 374.3499755859375, "b": 731.462898, "coord_origin": "TOPLEFT"}, "confidence": 0.9452338218688965, "cells": [{"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5-1 Accidental update with masked values scenario"}, {"label": "text", "id": 10, "page_no": 96, "cluster": {"id": 10, "label": "text", "bbox": {"l": 141.93385314941406, "t": 161.8843994140625, "r": 495.4548, "b": 196.31082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9745184183120728, "cells": [{"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces."}, {"label": "picture", "id": 11, "page_no": 96, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 135.8197021484375, "t": 437.9704895019531, "r": 527.1633911132812, "b": 719.9022827148438, "coord_origin": "TOPLEFT"}, "confidence": 0.980728805065155, "cells": [{"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 96, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.42791748046875, "t": 70.61494445800781, "r": 543.05804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9628674387931824, "cells": [{"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at:"}, {"label": "text", "id": 3, "page_no": 96, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.22903442382812, "t": 99.42984008789062, "r": 521.8867797851562, "b": 109.78103637695312, "coord_origin": "TOPLEFT"}, "confidence": 0.8841223120689392, "cells": [{"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "text", "id": 4, "page_no": 96, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.18670654296875, "t": 121.53282165527344, "r": 544.66058, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9777080416679382, "cells": [{"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance."}, {"label": "section_header", "id": 5, "page_no": 96, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.66980743408203, "t": 228.1348419189453, "r": 396.82227, "b": 244.21737670898438, "coord_origin": "TOPLEFT"}, "confidence": 0.967221200466156, "cells": [{"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "5.3 Accidental updates with masked values"}, {"label": "text", "id": 6, "page_no": 96, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81739807128906, "t": 260.6902770996094, "r": 547.18481, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9834569096565247, "cells": [{"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access."}, {"label": "text", "id": 7, "page_no": 96, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87274169921875, "t": 306.6039123535156, "r": 541.6969, "b": 352.80584716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875996112823486, "cells": [{"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as shown Figure 5-1."}, {"label": "text", "id": 8, "page_no": 96, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08998107910156, "t": 364.7171325683594, "r": 547.14398, "b": 422.7193, "coord_origin": "TOPLEFT"}, "confidence": 0.9872422218322754, "cells": [{"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value."}, {"label": "caption", "id": 9, "page_no": 96, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.07180786132812, "t": 722.1818237304688, "r": 374.3499755859375, "b": 731.462898, "coord_origin": "TOPLEFT"}, "confidence": 0.9452338218688965, "cells": [{"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5-1 Accidental update with masked values scenario"}, {"label": "text", "id": 10, "page_no": 96, "cluster": {"id": 10, "label": "text", "bbox": {"l": 141.93385314941406, "t": 161.8843994140625, "r": 495.4548, "b": 196.31082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9745184183120728, "cells": [{"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces."}, {"label": "picture", "id": 11, "page_no": 96, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 135.8197021484375, "t": 437.9704895019531, "r": 527.1633911132812, "b": 719.9022827148438, "coord_origin": "TOPLEFT"}, "confidence": 0.980728805065155, "cells": [{"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 96, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.64373779296875, "t": 754.87646484375, "r": 523.63324, "b": 764.1002197265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9528434872627258, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 96, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.66748046875, "t": 754.2764282226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146247506141663, "cells": [{"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "81"}]}}, {"page_no": 97, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.22566223144531, "t": 754.41650390625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9210326671600342, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.18901824951172, "t": 754.7184448242188, "r": 334.42142, "b": 763.9121704101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9529549479484558, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.91806030273438, "t": 70.726806640625, "r": 545.14294, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9776225686073303, "cells": [{"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.93345642089844, "t": 104.64000701904297, "r": 547.26752, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9867440462112427, "cells": [{"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.44256591796875, "t": 177.93212890625, "r": 385.58484, "b": 194.52586364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9684726595878601, "cells": [{"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.84999084472656, "t": 210.4622344970703, "r": 547.48962, "b": 269.1277770996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875320792198181, "cells": [{"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.2880630493164, "t": 288.19952392578125, "r": 405.04672, "b": 301.8869323730469, "coord_origin": "TOPLEFT"}, "confidence": 0.9681828022003174, "cells": [{"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.64491271972656, "t": 314.66900634765625, "r": 542.97083, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.987525224685669, "cells": [{"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.95484924316406, "t": 372.71258544921875, "r": 538.55847, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9827100038528442, "cells": [{"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.810791015625, "t": 418.80743408203125, "r": 547.21686, "b": 476.839599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9882908463478088, "cells": [{"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.34564208984375, "t": 495.8337097167969, "r": 270.95599, "b": 509.7830810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9675832390785217, "cells": [{"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.7013702392578, "t": 522.5596313476562, "r": 547.28552, "b": 557.3438110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9865304827690125, "cells": [{"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.7746124267578, "t": 568.5869750976562, "r": 547.32733, "b": 662.71976, "coord_origin": "TOPLEFT"}, "confidence": 0.9887324571609497, "cells": [{"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.0672149658203, "t": 674.6004638671875, "r": 535.8108520507812, "b": 720.9636840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881445169448853, "cells": [{"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 97, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22566223144531, "t": 754.41650390625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9210326671600342, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "82"}, {"label": "page_footer", "id": 1, "page_no": 97, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.18901824951172, "t": 754.7184448242188, "r": 334.42142, "b": 763.9121704101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9529549479484558, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 97, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91806030273438, "t": 70.726806640625, "r": 545.14294, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9776225686073303, "cells": [{"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values."}, {"label": "text", "id": 3, "page_no": 97, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93345642089844, "t": 104.64000701904297, "r": 547.26752, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9867440462112427, "cells": [{"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, \u201cCheck constraint solution\u201d on page 108."}, {"label": "section_header", "id": 4, "page_no": 97, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44256591796875, "t": 177.93212890625, "r": 385.58484, "b": 194.52586364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9684726595878601, "cells": [{"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}]}, "text": "5.4 System CL commands considerations"}, {"label": "text", "id": 5, "page_no": 97, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84999084472656, "t": 210.4622344970703, "r": 547.48962, "b": 269.1277770996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875320792198181, "cells": [{"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC."}, {"label": "section_header", "id": 6, "page_no": 97, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.2880630493164, "t": 288.19952392578125, "r": 405.04672, "b": 301.8869323730469, "coord_origin": "TOPLEFT"}, "confidence": 0.9681828022003174, "cells": [{"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command"}, {"label": "text", "id": 7, "page_no": 97, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.64491271972656, "t": 314.66900634765625, "r": 542.97083, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.987525224685669, "cells": [{"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL ."}, {"label": "text", "id": 8, "page_no": 97, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.95484924316406, "t": 372.71258544921875, "r": 538.55847, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9827100038528442, "cells": [{"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error."}, {"label": "text", "id": 9, "page_no": 97, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.810791015625, "t": 418.80743408203125, "r": 547.21686, "b": 476.839599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9882908463478088, "cells": [{"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}]}, "text": "When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object."}, {"label": "section_header", "id": 10, "page_no": 97, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.34564208984375, "t": 495.8337097167969, "r": 270.95599, "b": 509.7830810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9675832390785217, "cells": [{"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.2 Copy File (CPYF) command"}, {"label": "text", "id": 11, "page_no": 97, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.7013702392578, "t": 522.5596313476562, "r": 547.28552, "b": 557.3438110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9865304827690125, "cells": [{"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table."}, {"label": "text", "id": 12, "page_no": 97, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.7746124267578, "t": 568.5869750976562, "r": 547.32733, "b": 662.71976, "coord_origin": "TOPLEFT"}, "confidence": 0.9887324571609497, "cells": [{"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}]}, "text": "When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command."}, {"label": "text", "id": 13, "page_no": 97, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.0672149658203, "t": 674.6004638671875, "r": 535.8108520507812, "b": 720.9636840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881445169448853, "cells": [{"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}]}, "text": "If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received."}], "body": [{"label": "text", "id": 2, "page_no": 97, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91806030273438, "t": 70.726806640625, "r": 545.14294, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9776225686073303, "cells": [{"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values."}, {"label": "text", "id": 3, "page_no": 97, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93345642089844, "t": 104.64000701904297, "r": 547.26752, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9867440462112427, "cells": [{"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, \u201cCheck constraint solution\u201d on page 108."}, {"label": "section_header", "id": 4, "page_no": 97, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44256591796875, "t": 177.93212890625, "r": 385.58484, "b": 194.52586364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9684726595878601, "cells": [{"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}]}, "text": "5.4 System CL commands considerations"}, {"label": "text", "id": 5, "page_no": 97, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84999084472656, "t": 210.4622344970703, "r": 547.48962, "b": 269.1277770996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875320792198181, "cells": [{"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC."}, {"label": "section_header", "id": 6, "page_no": 97, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.2880630493164, "t": 288.19952392578125, "r": 405.04672, "b": 301.8869323730469, "coord_origin": "TOPLEFT"}, "confidence": 0.9681828022003174, "cells": [{"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command"}, {"label": "text", "id": 7, "page_no": 97, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.64491271972656, "t": 314.66900634765625, "r": 542.97083, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.987525224685669, "cells": [{"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL ."}, {"label": "text", "id": 8, "page_no": 97, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.95484924316406, "t": 372.71258544921875, "r": 538.55847, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9827100038528442, "cells": [{"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error."}, {"label": "text", "id": 9, "page_no": 97, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.810791015625, "t": 418.80743408203125, "r": 547.21686, "b": 476.839599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9882908463478088, "cells": [{"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}]}, "text": "When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object."}, {"label": "section_header", "id": 10, "page_no": 97, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.34564208984375, "t": 495.8337097167969, "r": 270.95599, "b": 509.7830810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9675832390785217, "cells": [{"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.2 Copy File (CPYF) command"}, {"label": "text", "id": 11, "page_no": 97, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.7013702392578, "t": 522.5596313476562, "r": 547.28552, "b": 557.3438110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9865304827690125, "cells": [{"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table."}, {"label": "text", "id": 12, "page_no": 97, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.7746124267578, "t": 568.5869750976562, "r": 547.32733, "b": 662.71976, "coord_origin": "TOPLEFT"}, "confidence": 0.9887324571609497, "cells": [{"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}]}, "text": "When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command."}, {"label": "text", "id": 13, "page_no": 97, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.0672149658203, "t": 674.6004638671875, "r": 535.8108520507812, "b": 720.9636840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881445169448853, "cells": [{"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}]}, "text": "If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 97, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22566223144531, "t": 754.41650390625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9210326671600342, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "82"}, {"label": "page_footer", "id": 1, "page_no": 97, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.18901824951172, "t": 754.7184448242188, "r": 334.42142, "b": 763.9121704101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9529549479484558, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 98, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 353.7088317871094, "t": 754.8579711914062, "r": 523.63324, "b": 764.1048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9495401382446289, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.67578125, "t": 754.3722534179688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9193902611732483, "cells": [{"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.39531707763672, "t": 70.02782440185547, "r": 305.67719, "b": 83.7774429321289, "coord_origin": "TOPLEFT"}, "confidence": 0.968555748462677, "cells": [{"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.95230102539062, "t": 96.7219467163086, "r": 544.97375, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9855459928512573, "cells": [{"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 98, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.7088317871094, "t": 754.8579711914062, "r": 523.63324, "b": 764.1048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9495401382446289, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 98, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.67578125, "t": 754.3722534179688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9193902611732483, "cells": [{"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "83"}, {"label": "section_header", "id": 2, "page_no": 98, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39531707763672, "t": 70.02782440185547, "r": 305.67719, "b": 83.7774429321289, "coord_origin": "TOPLEFT"}, "confidence": 0.968555748462677, "cells": [{"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.3 Copy Library (CPYLIB) command"}, {"label": "text", "id": 3, "page_no": 98, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.95230102539062, "t": 96.7219467163086, "r": 544.97375, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9855459928512573, "cells": [{"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object (CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL ."}], "body": [{"label": "section_header", "id": 2, "page_no": 98, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39531707763672, "t": 70.02782440185547, "r": 305.67719, "b": 83.7774429321289, "coord_origin": "TOPLEFT"}, "confidence": 0.968555748462677, "cells": [{"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.3 Copy Library (CPYLIB) command"}, {"label": "text", "id": 3, "page_no": 98, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.95230102539062, "t": 96.7219467163086, "r": 544.97375, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9855459928512573, "cells": [{"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object (CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL ."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 98, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.7088317871094, "t": 754.8579711914062, "r": 523.63324, "b": 764.1048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9495401382446289, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 98, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.67578125, "t": 754.3722534179688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9193902611732483, "cells": [{"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "83"}]}}, {"page_no": 99, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.472412109375, "t": 754.2569580078125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9049738645553589, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35282135009766, "t": 754.5419311523438, "r": 334.50579833984375, "b": 764.05126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411050081253052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 99, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.472412109375, "t": 754.2569580078125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9049738645553589, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "84"}, {"label": "page_footer", "id": 1, "page_no": 99, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35282135009766, "t": 754.5419311523438, "r": 334.50579833984375, "b": 764.05126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411050081253052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 99, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.472412109375, "t": 754.2569580078125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9049738645553589, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "84"}, {"label": "page_footer", "id": 1, "page_no": 99, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35282135009766, "t": 754.5419311523438, "r": 334.50579833984375, "b": 764.05126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411050081253052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 100, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.789581298828125, "t": 754.7017822265625, "r": 257.24335, "b": 764.1205444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9495893716812134, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6629028320312, "t": 754.3357543945312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917849063873291, "cells": [{"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.34396362304688, "t": 253.19119262695312, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9567626714706421, "cells": [{"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.87008666992188, "t": 316.7393493652344, "r": 531.34546, "b": 339.10498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9598965644836426, "cells": [{"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.8069610595703, "t": 346.03759765625, "r": 267.31885, "b": 356.3053283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.9453163743019104, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6639404296875, "t": 358.057373046875, "r": 221.46388244628906, "b": 367.94092, "coord_origin": "TOPLEFT"}, "confidence": 0.9263733625411987, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.80430603027344, "t": 370.3742370605469, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}, "confidence": 0.909616231918335, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.77816772460938, "t": 382.2833251953125, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9085867404937744, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.9530487060547, "t": 394.1155090332031, "r": 262.43051, "b": 404.1868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477983713150024, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.72091674804688, "t": 406.3046569824219, "r": 210.3322296142578, "b": 415.94019, "coord_origin": "TOPLEFT"}, "confidence": 0.9171162247657776, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.53468322753906, "t": 418.32232666015625, "r": 310.97345, "b": 428.54669189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9497132301330566, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.64329528808594, "t": 429.8523864746094, "r": 273.34265, "b": 440.3828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9438368082046509, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.005859375, "t": 451.9608154296875, "r": 347.41214, "b": 462.3204650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.875919759273529, "cells": [{"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.94393920898438, "t": 468.6572265625, "r": 267.31885, "b": 479.11810302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9442504644393921, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.8094024658203, "t": 480.9632568359375, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}, "confidence": 0.9341280460357666, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.80313110351562, "t": 492.80511474609375, "r": 248.5316162109375, "b": 502.96875, "coord_origin": "TOPLEFT"}, "confidence": 0.9282206892967224, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 135.69058227539062, "t": 504.4717712402344, "r": 368.62, "b": 515.00390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455210566520691, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.53225708007812, "t": 516.2424926757812, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}, "confidence": 0.9446545243263245, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.63209533691406, "t": 528.7277221679688, "r": 349.38428, "b": 539.08544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.68804931640625, "t": 540.8400268554688, "r": 390.44034, "b": 551.35888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9479876160621643, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.8003692626953, "t": 552.6859741210938, "r": 315.37079, "b": 563.0116577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9349662661552429, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.62815856933594, "t": 564.294189453125, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}, "confidence": 0.9371550679206848, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 135.61077880859375, "t": 576.708740234375, "r": 315.14774, "b": 587.1307983398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9537895917892456, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "text", "bbox": {"l": 500.39999, "t": 93.05345916748047, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7402352690696716, "cells": [{"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 32.03302764892578, "t": 70.35401916503906, "r": 238.4545135498047, "b": 238.00796508789062, "coord_origin": "TOPLEFT"}, "confidence": 0.6230185627937317, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 100, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.789581298828125, "t": 754.7017822265625, "r": 257.24335, "b": 764.1205444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9495893716812134, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 100, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6629028320312, "t": 754.3357543945312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917849063873291, "cells": [{"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "85"}, {"label": "text", "id": 2, "page_no": 100, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6."}, {"label": "section_header", "id": 3, "page_no": 100, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.34396362304688, "t": 253.19119262695312, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9567626714706421, "cells": [{"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Additional considerations"}, {"label": "text", "id": 4, "page_no": 100, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.87008666992188, "t": 316.7393493652344, "r": 531.34546, "b": 339.10498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9598965644836426, "cells": [{"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions:"}, {"label": "list_item", "id": 5, "page_no": 100, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.8069610595703, "t": 346.03759765625, "r": 267.31885, "b": 356.3053283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.9453163743019104, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 6, "page_no": 100, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6639404296875, "t": 358.057373046875, "r": 221.46388244628906, "b": 367.94092, "coord_origin": "TOPLEFT"}, "confidence": 0.9263733625411987, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Data movement"}, {"label": "list_item", "id": 7, "page_no": 100, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.80430603027344, "t": 370.3742370605469, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}, "confidence": 0.909616231918335, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Joins"}, {"label": "list_item", "id": 8, "page_no": 100, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77816772460938, "t": 382.2833251953125, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9085867404937744, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views"}, {"label": "list_item", "id": 9, "page_no": 100, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.9530487060547, "t": 394.1155090332031, "r": 262.43051, "b": 404.1868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477983713150024, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Materialized query tables"}, {"label": "list_item", "id": 10, "page_no": 100, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72091674804688, "t": 406.3046569824219, "r": 210.3322296142578, "b": 415.94019, "coord_origin": "TOPLEFT"}, "confidence": 0.9171162247657776, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Index advisor"}, {"label": "list_item", "id": 11, "page_no": 100, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53468322753906, "t": 418.32232666015625, "r": 310.97345, "b": 428.54669189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9497132301330566, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analysis, and debugging"}, {"label": "list_item", "id": 12, "page_no": 100, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64329528808594, "t": 429.8523864746094, "r": 273.34265, "b": 440.3828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9438368082046509, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and scalability"}, {"label": "text", "id": 13, "page_no": 100, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.005859375, "t": 451.9608154296875, "r": 347.41214, "b": 462.3204650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.875919759273529, "cells": [{"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 14, "page_no": 100, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.94393920898438, "t": 468.6572265625, "r": 267.31885, "b": 479.11810302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9442504644393921, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 15, "page_no": 100, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8094024658203, "t": 480.9632568359375, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}, "confidence": 0.9341280460357666, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on data movement"}, {"label": "list_item", "id": 16, "page_no": 100, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.80313110351562, "t": 492.80511474609375, "r": 248.5316162109375, "b": 502.96875, "coord_origin": "TOPLEFT"}, "confidence": 0.9282206892967224, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on joins"}, {"label": "list_item", "id": 17, "page_no": 100, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.69058227539062, "t": 504.4717712402344, "r": 368.62, "b": 515.00390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455210566520691, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analyzing, and debugging with RCAC"}, {"label": "list_item", "id": 18, "page_no": 100, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.53225708007812, "t": 516.2424926757812, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}, "confidence": 0.9446545243263245, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views, materialized query tables, and query rewrite with RCAC"}, {"label": "list_item", "id": 19, "page_no": 100, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.63209533691406, "t": 528.7277221679688, "r": 349.38428, "b": 539.08544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on performance and scalability"}, {"label": "list_item", "id": 20, "page_no": 100, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68804931640625, "t": 540.8400268554688, "r": 390.44034, "b": 551.35888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9479876160621643, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Exclusive lock to implement RCAC (availability issues)"}, {"label": "list_item", "id": 21, "page_no": 100, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.8003692626953, "t": 552.6859741210938, "r": 315.37079, "b": 563.0116577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9349662661552429, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Avoiding propagation of masked data"}, {"label": "list_item", "id": 22, "page_no": 100, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62815856933594, "t": 564.294189453125, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}, "confidence": 0.9371550679206848, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Triggers and functions (SECURED)"}, {"label": "list_item", "id": 23, "page_no": 100, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.61077880859375, "t": 576.708740234375, "r": 315.14774, "b": 587.1307983398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9537895917892456, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC is only one part of the solution"}, {"label": "text", "id": 24, "page_no": 100, "cluster": {"id": 24, "label": "text", "bbox": {"l": 500.39999, "t": 93.05345916748047, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7402352690696716, "cells": [{"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "picture", "id": 25, "page_no": 100, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 32.03302764892578, "t": 70.35401916503906, "r": 238.4545135498047, "b": 238.00796508789062, "coord_origin": "TOPLEFT"}, "confidence": 0.6230185627937317, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 100, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6."}, {"label": "section_header", "id": 3, "page_no": 100, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.34396362304688, "t": 253.19119262695312, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9567626714706421, "cells": [{"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Additional considerations"}, {"label": "text", "id": 4, "page_no": 100, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.87008666992188, "t": 316.7393493652344, "r": 531.34546, "b": 339.10498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9598965644836426, "cells": [{"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions:"}, {"label": "list_item", "id": 5, "page_no": 100, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.8069610595703, "t": 346.03759765625, "r": 267.31885, "b": 356.3053283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.9453163743019104, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 6, "page_no": 100, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6639404296875, "t": 358.057373046875, "r": 221.46388244628906, "b": 367.94092, "coord_origin": "TOPLEFT"}, "confidence": 0.9263733625411987, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Data movement"}, {"label": "list_item", "id": 7, "page_no": 100, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.80430603027344, "t": 370.3742370605469, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}, "confidence": 0.909616231918335, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Joins"}, {"label": "list_item", "id": 8, "page_no": 100, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77816772460938, "t": 382.2833251953125, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9085867404937744, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views"}, {"label": "list_item", "id": 9, "page_no": 100, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.9530487060547, "t": 394.1155090332031, "r": 262.43051, "b": 404.1868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477983713150024, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Materialized query tables"}, {"label": "list_item", "id": 10, "page_no": 100, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72091674804688, "t": 406.3046569824219, "r": 210.3322296142578, "b": 415.94019, "coord_origin": "TOPLEFT"}, "confidence": 0.9171162247657776, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Index advisor"}, {"label": "list_item", "id": 11, "page_no": 100, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53468322753906, "t": 418.32232666015625, "r": 310.97345, "b": 428.54669189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9497132301330566, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analysis, and debugging"}, {"label": "list_item", "id": 12, "page_no": 100, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64329528808594, "t": 429.8523864746094, "r": 273.34265, "b": 440.3828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9438368082046509, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and scalability"}, {"label": "text", "id": 13, "page_no": 100, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.005859375, "t": 451.9608154296875, "r": 347.41214, "b": 462.3204650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.875919759273529, "cells": [{"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 14, "page_no": 100, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.94393920898438, "t": 468.6572265625, "r": 267.31885, "b": 479.11810302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9442504644393921, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 15, "page_no": 100, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8094024658203, "t": 480.9632568359375, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}, "confidence": 0.9341280460357666, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on data movement"}, {"label": "list_item", "id": 16, "page_no": 100, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.80313110351562, "t": 492.80511474609375, "r": 248.5316162109375, "b": 502.96875, "coord_origin": "TOPLEFT"}, "confidence": 0.9282206892967224, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on joins"}, {"label": "list_item", "id": 17, "page_no": 100, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.69058227539062, "t": 504.4717712402344, "r": 368.62, "b": 515.00390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455210566520691, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analyzing, and debugging with RCAC"}, {"label": "list_item", "id": 18, "page_no": 100, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.53225708007812, "t": 516.2424926757812, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}, "confidence": 0.9446545243263245, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views, materialized query tables, and query rewrite with RCAC"}, {"label": "list_item", "id": 19, "page_no": 100, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.63209533691406, "t": 528.7277221679688, "r": 349.38428, "b": 539.08544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on performance and scalability"}, {"label": "list_item", "id": 20, "page_no": 100, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68804931640625, "t": 540.8400268554688, "r": 390.44034, "b": 551.35888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9479876160621643, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Exclusive lock to implement RCAC (availability issues)"}, {"label": "list_item", "id": 21, "page_no": 100, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.8003692626953, "t": 552.6859741210938, "r": 315.37079, "b": 563.0116577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9349662661552429, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Avoiding propagation of masked data"}, {"label": "list_item", "id": 22, "page_no": 100, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62815856933594, "t": 564.294189453125, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}, "confidence": 0.9371550679206848, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Triggers and functions (SECURED)"}, {"label": "list_item", "id": 23, "page_no": 100, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.61077880859375, "t": 576.708740234375, "r": 315.14774, "b": 587.1307983398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9537895917892456, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC is only one part of the solution"}, {"label": "text", "id": 24, "page_no": 100, "cluster": {"id": 24, "label": "text", "bbox": {"l": 500.39999, "t": 93.05345916748047, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7402352690696716, "cells": [{"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "picture", "id": 25, "page_no": 100, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 32.03302764892578, "t": 70.35401916503906, "r": 238.4545135498047, "b": 238.00796508789062, "coord_origin": "TOPLEFT"}, "confidence": 0.6230185627937317, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 100, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.789581298828125, "t": 754.7017822265625, "r": 257.24335, "b": 764.1205444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9495893716812134, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 100, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6629028320312, "t": 754.3357543945312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917849063873291, "cells": [{"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "85"}]}}, {"page_no": 101, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.28016662597656, "t": 754.42529296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138955473899841, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.40719604492188, "t": 754.6533813476562, "r": 334.42142, "b": 763.9609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9498723745346069, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.63821411132812, "t": 73.412353515625, "r": 298.45441, "b": 89.93876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9695685505867004, "cells": [{"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9453887939453, "t": 105.85498046875, "r": 547.24963, "b": 164.5647430419922, "coord_origin": "TOPLEFT"}, "confidence": 0.9870750308036804, "cells": [{"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.015625, "t": 176.0285186767578, "r": 547.23254, "b": 198.28158569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9749656319618225, "cells": [{"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.17198181152344, "t": 472.1231689453125, "r": 290.1625061035156, "b": 481.7851867675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9372553825378418, "cells": [{"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 222.81260681152344, "t": 223.79876708984375, "r": 250.3378143310547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6529437899589539, "cells": [{"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 289.8625183105469, "t": 223.75645446777344, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6274991631507874, "cells": [{"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 223.27870178222656, "t": 245.79042053222656, "r": 247.33633422851562, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": 0.7264513373374939, "cells": [{"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 223.30404663085938, "t": 256.77313232421875, "r": 264.05712890625, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.739473283290863, "cells": [{"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 289.9476623535156, "t": 256.7027893066406, "r": 384.1680908203125, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.727581799030304, "cells": [{"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 223.270263671875, "t": 268.14324951171875, "r": 262.7109680175781, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.74038165807724, "cells": [{"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 290.0070495605469, "t": 267.8889465332031, "r": 386.24557, "b": 277.3880920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.754478394985199, "cells": [{"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 160.457, "t": 297.8916931152344, "r": 285.01361083984375, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8418190479278564, "cells": [{"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "section_header", "bbox": {"l": 341.02625, "t": 297.97357177734375, "r": 447.76593017578125, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8612884283065796, "cells": [{"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 101, "cluster": {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, "15": {"label": "table", "id": 15, "page_no": 101, "cluster": {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 101, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.28016662597656, "t": 754.42529296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138955473899841, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "86"}, {"label": "page_footer", "id": 1, "page_no": 101, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40719604492188, "t": 754.6533813476562, "r": 334.42142, "b": 763.9609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9498723745346069, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 101, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.63821411132812, "t": 73.412353515625, "r": 298.45441, "b": 89.93876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9695685505867004, "cells": [{"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "6.1 Timing of column masking"}, {"label": "text", "id": 3, "page_no": 101, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9453887939453, "t": 105.85498046875, "r": 547.24963, "b": 164.5647430419922, "coord_origin": "TOPLEFT"}, "confidence": 0.9870750308036804, "cells": [{"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking."}, {"label": "text", "id": 4, "page_no": 101, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.015625, "t": 176.0285186767578, "r": 547.23254, "b": 198.28158569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9749656319618225, "cells": [{"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values."}, {"label": "caption", "id": 5, "page_no": 101, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17198181152344, "t": 472.1231689453125, "r": 290.1625061035156, "b": 481.7851867675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9372553825378418, "cells": [{"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-1 Timing of column masking"}, {"label": "text", "id": 6, "page_no": 101, "cluster": {"id": 6, "label": "text", "bbox": {"l": 222.81260681152344, "t": 223.79876708984375, "r": 250.3378143310547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6529437899589539, "cells": [{"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT"}, {"label": "text", "id": 7, "page_no": 101, "cluster": {"id": 7, "label": "text", "bbox": {"l": 289.8625183105469, "t": 223.75645446777344, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6274991631507874, "cells": [{"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER,"}, {"label": "text", "id": 8, "page_no": 101, "cluster": {"id": 8, "label": "text", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "SUM(AMOUNT) AS TOTAL TRANSACTIONS"}, {"label": "text", "id": 9, "page_no": 101, "cluster": {"id": 9, "label": "text", "bbox": {"l": 223.27870178222656, "t": 245.79042053222656, "r": 247.33633422851562, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": 0.7264513373374939, "cells": [{"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 10, "page_no": 101, "cluster": {"id": 10, "label": "text", "bbox": {"l": 223.30404663085938, "t": 256.77313232421875, "r": 264.05712890625, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.739473283290863, "cells": [{"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "GROUP BY"}, {"label": "text", "id": 11, "page_no": 101, "cluster": {"id": 11, "label": "text", "bbox": {"l": 289.9476623535156, "t": 256.7027893066406, "r": 384.1680908203125, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.727581799030304, "cells": [{"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER"}, {"label": "text", "id": 12, "page_no": 101, "cluster": {"id": 12, "label": "text", "bbox": {"l": 223.270263671875, "t": 268.14324951171875, "r": 262.7109680175781, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.74038165807724, "cells": [{"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "ORDER BY"}, {"label": "text", "id": 13, "page_no": 101, "cluster": {"id": 13, "label": "text", "bbox": {"l": 290.0070495605469, "t": 267.8889465332031, "r": 386.24557, "b": 277.3880920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.754478394985199, "cells": [{"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER;"}, {"label": "table", "id": 14, "page_no": 101, "cluster": {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "table", "id": 15, "page_no": 101, "cluster": {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "section_header", "id": 16, "page_no": 101, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 160.457, "t": 297.8916931152344, "r": 285.01361083984375, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8418190479278564, "cells": [{"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "Without RCAC Masking"}, {"label": "section_header", "id": 17, "page_no": 101, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 341.02625, "t": 297.97357177734375, "r": 447.76593017578125, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8612884283065796, "cells": [{"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "With RCAC Masking"}], "body": [{"label": "section_header", "id": 2, "page_no": 101, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.63821411132812, "t": 73.412353515625, "r": 298.45441, "b": 89.93876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9695685505867004, "cells": [{"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "6.1 Timing of column masking"}, {"label": "text", "id": 3, "page_no": 101, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9453887939453, "t": 105.85498046875, "r": 547.24963, "b": 164.5647430419922, "coord_origin": "TOPLEFT"}, "confidence": 0.9870750308036804, "cells": [{"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking."}, {"label": "text", "id": 4, "page_no": 101, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.015625, "t": 176.0285186767578, "r": 547.23254, "b": 198.28158569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9749656319618225, "cells": [{"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values."}, {"label": "caption", "id": 5, "page_no": 101, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17198181152344, "t": 472.1231689453125, "r": 290.1625061035156, "b": 481.7851867675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9372553825378418, "cells": [{"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-1 Timing of column masking"}, {"label": "text", "id": 6, "page_no": 101, "cluster": {"id": 6, "label": "text", "bbox": {"l": 222.81260681152344, "t": 223.79876708984375, "r": 250.3378143310547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6529437899589539, "cells": [{"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT"}, {"label": "text", "id": 7, "page_no": 101, "cluster": {"id": 7, "label": "text", "bbox": {"l": 289.8625183105469, "t": 223.75645446777344, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6274991631507874, "cells": [{"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER,"}, {"label": "text", "id": 8, "page_no": 101, "cluster": {"id": 8, "label": "text", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "SUM(AMOUNT) AS TOTAL TRANSACTIONS"}, {"label": "text", "id": 9, "page_no": 101, "cluster": {"id": 9, "label": "text", "bbox": {"l": 223.27870178222656, "t": 245.79042053222656, "r": 247.33633422851562, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": 0.7264513373374939, "cells": [{"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 10, "page_no": 101, "cluster": {"id": 10, "label": "text", "bbox": {"l": 223.30404663085938, "t": 256.77313232421875, "r": 264.05712890625, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.739473283290863, "cells": [{"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "GROUP BY"}, {"label": "text", "id": 11, "page_no": 101, "cluster": {"id": 11, "label": "text", "bbox": {"l": 289.9476623535156, "t": 256.7027893066406, "r": 384.1680908203125, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.727581799030304, "cells": [{"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER"}, {"label": "text", "id": 12, "page_no": 101, "cluster": {"id": 12, "label": "text", "bbox": {"l": 223.270263671875, "t": 268.14324951171875, "r": 262.7109680175781, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.74038165807724, "cells": [{"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "ORDER BY"}, {"label": "text", "id": 13, "page_no": 101, "cluster": {"id": 13, "label": "text", "bbox": {"l": 290.0070495605469, "t": 267.8889465332031, "r": 386.24557, "b": 277.3880920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.754478394985199, "cells": [{"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER;"}, {"label": "table", "id": 14, "page_no": 101, "cluster": {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "table", "id": 15, "page_no": 101, "cluster": {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "section_header", "id": 16, "page_no": 101, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 160.457, "t": 297.8916931152344, "r": 285.01361083984375, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8418190479278564, "cells": [{"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "Without RCAC Masking"}, {"label": "section_header", "id": 17, "page_no": 101, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 341.02625, "t": 297.97357177734375, "r": 447.76593017578125, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8612884283065796, "cells": [{"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "With RCAC Masking"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 101, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.28016662597656, "t": 754.42529296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138955473899841, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "86"}, {"label": "page_footer", "id": 1, "page_no": 101, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40719604492188, "t": 754.6533813476562, "r": 334.42142, "b": 763.9609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9498723745346069, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 102, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.0430603027344, "t": 754.8911743164062, "r": 523.62878, "b": 764.1041870117188, "coord_origin": "TOPLEFT"}, "confidence": 0.951887309551239, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6262817382812, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9136953949928284, "cells": [{"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.76144409179688, "t": 70.67374420166016, "r": 547.14746, "b": 164.8749542236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9858981370925903, "cells": [{"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.22874450683594, "t": 531.9801025390625, "r": 386.6689758300781, "b": 541.701416015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9406759738922119, "cells": [{"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 142.0433349609375, "t": 182.4264373779297, "r": 540.74689, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9510505199432373, "cells": [{"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.07940673828125, "t": 255.5457000732422, "r": 412.541015625, "b": 529.3939819335938, "coord_origin": "TOPLEFT"}, "confidence": 0.984312891960144, "cells": [{"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 102, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0430603027344, "t": 754.8911743164062, "r": 523.62878, "b": 764.1041870117188, "coord_origin": "TOPLEFT"}, "confidence": 0.951887309551239, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 102, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6262817382812, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9136953949928284, "cells": [{"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "87"}, {"label": "text", "id": 2, "page_no": 102, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.76144409179688, "t": 70.67374420166016, "r": 547.14746, "b": 164.8749542236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9858981370925903, "cells": [{"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query\u2019s final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2."}, {"label": "caption", "id": 3, "page_no": 102, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.22874450683594, "t": 531.9801025390625, "r": 386.6689758300781, "b": 541.701416015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9406759738922119, "cells": [{"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC"}, {"label": "text", "id": 4, "page_no": 102, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.0433349609375, "t": 182.4264373779297, "r": 540.74689, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9510505199432373, "cells": [{"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask."}, {"label": "picture", "id": 5, "page_no": 102, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.07940673828125, "t": 255.5457000732422, "r": 412.541015625, "b": 529.3939819335938, "coord_origin": "TOPLEFT"}, "confidence": 0.984312891960144, "cells": [{"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 102, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.76144409179688, "t": 70.67374420166016, "r": 547.14746, "b": 164.8749542236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9858981370925903, "cells": [{"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query\u2019s final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2."}, {"label": "caption", "id": 3, "page_no": 102, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.22874450683594, "t": 531.9801025390625, "r": 386.6689758300781, "b": 541.701416015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9406759738922119, "cells": [{"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC"}, {"label": "text", "id": 4, "page_no": 102, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.0433349609375, "t": 182.4264373779297, "r": 540.74689, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9510505199432373, "cells": [{"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask."}, {"label": "picture", "id": 5, "page_no": 102, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.07940673828125, "t": 255.5457000732422, "r": 412.541015625, "b": 529.3939819335938, "coord_origin": "TOPLEFT"}, "confidence": 0.984312891960144, "cells": [{"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 102, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0430603027344, "t": 754.8911743164062, "r": 523.62878, "b": 764.1041870117188, "coord_origin": "TOPLEFT"}, "confidence": 0.951887309551239, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 102, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6262817382812, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9136953949928284, "cells": [{"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "87"}]}}, {"page_no": 103, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.2040786743164, "t": 754.5180053710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170101284980774, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31021881103516, "t": 754.7303466796875, "r": 334.42142, "b": 763.929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9497126936912537, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.4045181274414, "t": 70.29792785644531, "r": 342.9945068359375, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9599847793579102, "cells": [{"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.77244567871094, "t": 102.67330932617188, "r": 547.2276, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9856138825416565, "cells": [{"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 135.88336181640625, "t": 291.65277099609375, "r": 292.6585693359375, "b": 300.9308776855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9376186728477478, "cells": [{"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.75350952148438, "t": 317.5677185058594, "r": 547.27454, "b": 399.9143371582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9871634244918823, "cells": [{"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.97303771972656, "t": 494.7318115234375, "r": 390.66049, "b": 504.98223876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8897727131843567, "cells": [{"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.6826171875, "t": 511.1615905761719, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}, "confidence": 0.9416220784187317, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.69775390625, "t": 523.0594482421875, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}, "confidence": 0.9410248398780823, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.60743713378906, "t": 535.3680419921875, "r": 430.46753000000007, "b": 545.6080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507178664207458, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.18472290039062, "t": 565.0562133789062, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}, "confidence": 0.9600307941436768, "cells": [{"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.2682647705078, "t": 591.3966064453125, "r": 536.16815, "b": 613.52142, "coord_origin": "TOPLEFT"}, "confidence": 0.97333163022995, "cells": [{"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 136.156005859375, "t": 625.2975463867188, "r": 331.8805847167969, "b": 634.7236938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.7500959634780884, "cells": [{"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.8, "t": 642.6497802734375, "r": 346.67709, "b": 652.3346557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.719869077205658, "cells": [{"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 141.819091796875, "t": 417.33447265625, "r": 536.52759, "b": 475.52097, "coord_origin": "TOPLEFT"}, "confidence": 0.9828086495399475, "cells": [{"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.86012268066406, "t": 175.29827880859375, "r": 497.2643127441406, "b": 289.20782470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9842056035995483, "cells": [{"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 103, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2040786743164, "t": 754.5180053710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170101284980774, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "88"}, {"label": "page_footer", "id": 1, "page_no": 103, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31021881103516, "t": 754.7303466796875, "r": 334.42142, "b": 763.929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9497126936912537, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 103, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4045181274414, "t": 70.29792785644531, "r": 342.9945068359375, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9599847793579102, "cells": [{"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.2 RCAC effects on data movement"}, {"label": "text", "id": 3, "page_no": 103, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77244567871094, "t": 102.67330932617188, "r": 547.2276, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9856138825416565, "cells": [{"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss."}, {"label": "caption", "id": 4, "page_no": 103, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.88336181640625, "t": 291.65277099609375, "r": 292.6585693359375, "b": 300.9308776855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9376186728477478, "cells": [{"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-3 RCAC and data movement"}, {"label": "text", "id": 5, "page_no": 103, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.75350952148438, "t": 317.5677185058594, "r": 547.27454, "b": 399.9143371582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9871634244918823, "cells": [{"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}]}, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization\u2019s object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC."}, {"label": "text", "id": 6, "page_no": 103, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.97303771972656, "t": 494.7318115234375, "r": 390.66049, "b": 504.98223876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8897727131843567, "cells": [{"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers in detail the following three examples:"}, {"label": "list_item", "id": 7, "page_no": 103, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6826171875, "t": 511.1615905761719, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}, "confidence": 0.9416220784187317, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the source table"}, {"label": "list_item", "id": 8, "page_no": 103, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.69775390625, "t": 523.0594482421875, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}, "confidence": 0.9410248398780823, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the target table"}, {"label": "list_item", "id": 9, "page_no": 103, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.60743713378906, "t": 535.3680419921875, "r": 430.46753000000007, "b": 545.6080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507178664207458, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on both source and target tables"}, {"label": "section_header", "id": 10, "page_no": 103, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.18472290039062, "t": 565.0562133789062, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}, "confidence": 0.9600307941436768, "cells": [{"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.1 Effects when RCAC is defined on the source table"}, {"label": "text", "id": 11, "page_no": 103, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.2682647705078, "t": 591.3966064453125, "r": 536.16815, "b": 613.52142, "coord_origin": "TOPLEFT"}, "confidence": 0.97333163022995, "cells": [{"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table."}, {"label": "caption", "id": 12, "page_no": 103, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.156005859375, "t": 625.2975463867188, "r": 331.8805847167969, "b": 634.7236938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.7500959634780884, "cells": [{"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 INSERT INTO TARGET statement"}, {"label": "text", "id": 13, "page_no": 103, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.8, "t": 642.6497802734375, "r": 346.67709, "b": 652.3346557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.719869077205658, "cells": [{"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 14, "page_no": 103, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.819091796875, "t": 417.33447265625, "r": 536.52759, "b": 475.52097, "coord_origin": "TOPLEFT"}, "confidence": 0.9828086495399475, "cells": [{"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}]}, "text": "Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data."}, {"label": "picture", "id": 15, "page_no": 103, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.86012268066406, "t": 175.29827880859375, "r": 497.2643127441406, "b": 289.20782470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9842056035995483, "cells": [{"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 103, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4045181274414, "t": 70.29792785644531, "r": 342.9945068359375, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9599847793579102, "cells": [{"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.2 RCAC effects on data movement"}, {"label": "text", "id": 3, "page_no": 103, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77244567871094, "t": 102.67330932617188, "r": 547.2276, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9856138825416565, "cells": [{"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss."}, {"label": "caption", "id": 4, "page_no": 103, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.88336181640625, "t": 291.65277099609375, "r": 292.6585693359375, "b": 300.9308776855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9376186728477478, "cells": [{"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-3 RCAC and data movement"}, {"label": "text", "id": 5, "page_no": 103, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.75350952148438, "t": 317.5677185058594, "r": 547.27454, "b": 399.9143371582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9871634244918823, "cells": [{"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}]}, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization\u2019s object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC."}, {"label": "text", "id": 6, "page_no": 103, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.97303771972656, "t": 494.7318115234375, "r": 390.66049, "b": 504.98223876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8897727131843567, "cells": [{"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers in detail the following three examples:"}, {"label": "list_item", "id": 7, "page_no": 103, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6826171875, "t": 511.1615905761719, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}, "confidence": 0.9416220784187317, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the source table"}, {"label": "list_item", "id": 8, "page_no": 103, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.69775390625, "t": 523.0594482421875, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}, "confidence": 0.9410248398780823, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the target table"}, {"label": "list_item", "id": 9, "page_no": 103, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.60743713378906, "t": 535.3680419921875, "r": 430.46753000000007, "b": 545.6080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507178664207458, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on both source and target tables"}, {"label": "section_header", "id": 10, "page_no": 103, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.18472290039062, "t": 565.0562133789062, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}, "confidence": 0.9600307941436768, "cells": [{"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.1 Effects when RCAC is defined on the source table"}, {"label": "text", "id": 11, "page_no": 103, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.2682647705078, "t": 591.3966064453125, "r": 536.16815, "b": 613.52142, "coord_origin": "TOPLEFT"}, "confidence": 0.97333163022995, "cells": [{"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table."}, {"label": "caption", "id": 12, "page_no": 103, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.156005859375, "t": 625.2975463867188, "r": 331.8805847167969, "b": 634.7236938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.7500959634780884, "cells": [{"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 INSERT INTO TARGET statement"}, {"label": "text", "id": 13, "page_no": 103, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.8, "t": 642.6497802734375, "r": 346.67709, "b": 652.3346557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.719869077205658, "cells": [{"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 14, "page_no": 103, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.819091796875, "t": 417.33447265625, "r": 536.52759, "b": 475.52097, "coord_origin": "TOPLEFT"}, "confidence": 0.9828086495399475, "cells": [{"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}]}, "text": "Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data."}, {"label": "picture", "id": 15, "page_no": 103, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.86012268066406, "t": 175.29827880859375, "r": 497.2643127441406, "b": 289.20782470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9842056035995483, "cells": [{"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 103, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2040786743164, "t": 754.5180053710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170101284980774, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "88"}, {"label": "page_footer", "id": 1, "page_no": 103, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31021881103516, "t": 754.7303466796875, "r": 334.42142, "b": 763.929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9497126936912537, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 104, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.070556640625, "t": 754.9903564453125, "r": 523.62878, "b": 764.04638671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9512802362442017, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6676635742188, "t": 754.3189697265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9165906310081482, "cells": [{"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.09054565429688, "t": 70.63800048828125, "r": 547.29004, "b": 141.22569274902344, "coord_origin": "TOPLEFT"}, "confidence": 0.9863300919532776, "cells": [{"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.06468200683594, "t": 407.373046875, "r": 377.7413635253906, "b": 416.83404541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9107280969619751, "cells": [{"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.16183471679688, "t": 435.82305908203125, "r": 401.65768, "b": 449.0105895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9636408090591431, "cells": [{"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.28038024902344, "t": 462.0472412109375, "r": 536.16815, "b": 484.10153, "coord_origin": "TOPLEFT"}, "confidence": 0.9741792678833008, "cells": [{"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.6165771484375, "t": 495.8085632324219, "r": 331.8912658691406, "b": 505.41259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.6991708874702454, "cells": [{"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 513.3344116210938, "r": 346.67709, "b": 522.9288940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.6854607462882996, "cells": [{"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.99375915527344, "t": 155.52529907226562, "r": 491.57470703125, "b": 403.7139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9803420901298523, "cells": [{"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 104, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.070556640625, "t": 754.9903564453125, "r": 523.62878, "b": 764.04638671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9512802362442017, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 104, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6676635742188, "t": 754.3189697265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9165906310081482, "cells": [{"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "89"}, {"label": "text", "id": 2, "page_no": 104, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.09054565429688, "t": 70.63800048828125, "r": 547.29004, "b": 141.22569274902344, "coord_origin": "TOPLEFT"}, "confidence": 0.9863300919532776, "cells": [{"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, given a \u201csource\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4."}, {"label": "caption", "id": 3, "page_no": 104, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06468200683594, "t": 407.373046875, "r": 377.7413635253906, "b": 416.83404541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9107280969619751, "cells": [{"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-4 RCAC effects on data movement from SOURCE"}, {"label": "section_header", "id": 4, "page_no": 104, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.16183471679688, "t": 435.82305908203125, "r": 401.65768, "b": 449.0105895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9636408090591431, "cells": [{"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.2 Effects when RCAC is defined on the target table"}, {"label": "text", "id": 5, "page_no": 104, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.28038024902344, "t": 462.0472412109375, "r": 536.16815, "b": 484.10153, "coord_origin": "TOPLEFT"}, "confidence": 0.9741792678833008, "cells": [{"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table."}, {"label": "caption", "id": 6, "page_no": 104, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.6165771484375, "t": 495.8085632324219, "r": 331.8912658691406, "b": 505.41259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.6991708874702454, "cells": [{"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 104, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 513.3344116210938, "r": 346.67709, "b": 522.9288940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.6854607462882996, "cells": [{"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "picture", "id": 8, "page_no": 104, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.99375915527344, "t": 155.52529907226562, "r": 491.57470703125, "b": 403.7139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9803420901298523, "cells": [{"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 104, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.09054565429688, "t": 70.63800048828125, "r": 547.29004, "b": 141.22569274902344, "coord_origin": "TOPLEFT"}, "confidence": 0.9863300919532776, "cells": [{"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, given a \u201csource\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4."}, {"label": "caption", "id": 3, "page_no": 104, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06468200683594, "t": 407.373046875, "r": 377.7413635253906, "b": 416.83404541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9107280969619751, "cells": [{"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-4 RCAC effects on data movement from SOURCE"}, {"label": "section_header", "id": 4, "page_no": 104, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.16183471679688, "t": 435.82305908203125, "r": 401.65768, "b": 449.0105895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9636408090591431, "cells": [{"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.2 Effects when RCAC is defined on the target table"}, {"label": "text", "id": 5, "page_no": 104, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.28038024902344, "t": 462.0472412109375, "r": 536.16815, "b": 484.10153, "coord_origin": "TOPLEFT"}, "confidence": 0.9741792678833008, "cells": [{"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table."}, {"label": "caption", "id": 6, "page_no": 104, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.6165771484375, "t": 495.8085632324219, "r": 331.8912658691406, "b": 505.41259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.6991708874702454, "cells": [{"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 104, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 513.3344116210938, "r": 346.67709, "b": 522.9288940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.6854607462882996, "cells": [{"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "picture", "id": 8, "page_no": 104, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.99375915527344, "t": 155.52529907226562, "r": 491.57470703125, "b": 403.7139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9803420901298523, "cells": [{"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 104, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.070556640625, "t": 754.9903564453125, "r": 523.62878, "b": 764.04638671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9512802362442017, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 104, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6676635742188, "t": 754.3189697265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9165906310081482, "cells": [{"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "89"}]}}, {"page_no": 105, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.0672378540039, "t": 754.3772583007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143837690353394, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31163787841797, "t": 754.7432861328125, "r": 334.42142, "b": 763.88671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527189135551453, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.84625244140625, "t": 70.61248779296875, "r": 547.26459, "b": 141.04803466796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9829095602035522, "cells": [{"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.212646484375, "t": 414.0885009765625, "r": 367.2479248046875, "b": 423.6403503417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9330379962921143, "cells": [{"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.19894409179688, "t": 442.4447326660156, "r": 490.12787, "b": 455.5812683105469, "coord_origin": "TOPLEFT"}, "confidence": 0.958083987236023, "cells": [{"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.13351440429688, "t": 468.7479248046875, "r": 541.63324, "b": 490.82153, "coord_origin": "TOPLEFT"}, "confidence": 0.971232533454895, "cells": [{"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.3226776123047, "t": 502.52581787109375, "r": 332.0595703125, "b": 512.0237426757812, "coord_origin": "TOPLEFT"}, "confidence": 0.7299772500991821, "cells": [{"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.995849609375, "t": 548.8137817382812, "r": 547.2467, "b": 618.80023, "coord_origin": "TOPLEFT"}, "confidence": 0.9855359196662903, "cells": [{"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 136.0791015625, "t": 155.57220458984375, "r": 499.302978515625, "b": 410.439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9825493097305298, "cells": [{"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 105, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0672378540039, "t": 754.3772583007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143837690353394, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "90"}, {"label": "page_footer", "id": 1, "page_no": 105, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31163787841797, "t": 754.7432861328125, "r": 334.42142, "b": 763.88671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527189135551453, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 105, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.84625244140625, "t": 70.61248779296875, "r": 547.26459, "b": 141.04803466796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9829095602035522, "cells": [{"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table\u2019s permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read."}, {"label": "caption", "id": 3, "page_no": 105, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.212646484375, "t": 414.0885009765625, "r": 367.2479248046875, "b": 423.6403503417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9330379962921143, "cells": [{"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-5 RCAC effects on data movement on TARGET"}, {"label": "section_header", "id": 4, "page_no": 105, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19894409179688, "t": 442.4447326660156, "r": 490.12787, "b": 455.5812683105469, "coord_origin": "TOPLEFT"}, "confidence": 0.958083987236023, "cells": [{"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.3 Effects when RCAC is defined on both source and target tables"}, {"label": "text", "id": 5, "page_no": 105, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13351440429688, "t": 468.7479248046875, "r": 541.63324, "b": 490.82153, "coord_origin": "TOPLEFT"}, "confidence": 0.971232533454895, "cells": [{"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables."}, {"label": "caption", "id": 6, "page_no": 105, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.3226776123047, "t": 502.52581787109375, "r": 332.0595703125, "b": 512.0237426757812, "coord_origin": "TOPLEFT"}, "confidence": 0.7299772500991821, "cells": [{"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 105, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 8, "page_no": 105, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.995849609375, "t": 548.8137817382812, "r": 547.2467, "b": 618.80023, "coord_origin": "TOPLEFT"}, "confidence": 0.9855359196662903, "cells": [{"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned."}, {"label": "picture", "id": 9, "page_no": 105, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.0791015625, "t": 155.57220458984375, "r": 499.302978515625, "b": 410.439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9825493097305298, "cells": [{"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 105, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.84625244140625, "t": 70.61248779296875, "r": 547.26459, "b": 141.04803466796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9829095602035522, "cells": [{"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table\u2019s permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read."}, {"label": "caption", "id": 3, "page_no": 105, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.212646484375, "t": 414.0885009765625, "r": 367.2479248046875, "b": 423.6403503417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9330379962921143, "cells": [{"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-5 RCAC effects on data movement on TARGET"}, {"label": "section_header", "id": 4, "page_no": 105, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19894409179688, "t": 442.4447326660156, "r": 490.12787, "b": 455.5812683105469, "coord_origin": "TOPLEFT"}, "confidence": 0.958083987236023, "cells": [{"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.3 Effects when RCAC is defined on both source and target tables"}, {"label": "text", "id": 5, "page_no": 105, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13351440429688, "t": 468.7479248046875, "r": 541.63324, "b": 490.82153, "coord_origin": "TOPLEFT"}, "confidence": 0.971232533454895, "cells": [{"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables."}, {"label": "caption", "id": 6, "page_no": 105, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.3226776123047, "t": 502.52581787109375, "r": 332.0595703125, "b": 512.0237426757812, "coord_origin": "TOPLEFT"}, "confidence": 0.7299772500991821, "cells": [{"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 105, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 8, "page_no": 105, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.995849609375, "t": 548.8137817382812, "r": 547.2467, "b": 618.80023, "coord_origin": "TOPLEFT"}, "confidence": 0.9855359196662903, "cells": [{"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned."}, {"label": "picture", "id": 9, "page_no": 105, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.0791015625, "t": 155.57220458984375, "r": 499.302978515625, "b": 410.439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9825493097305298, "cells": [{"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 105, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0672378540039, "t": 754.3772583007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143837690353394, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "90"}, {"label": "page_footer", "id": 1, "page_no": 105, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31163787841797, "t": 754.7432861328125, "r": 334.42142, "b": 763.88671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527189135551453, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 106, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.1033630371094, "t": 754.9728393554688, "r": 523.62878, "b": 764.0504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9539369940757751, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6055297851562, "t": 754.2470092773438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9151113629341125, "cells": [{"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.59042358398438, "t": 70.5692138671875, "r": 547.25018, "b": 116.77182006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9812178611755371, "cells": [{"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.80810546875, "t": 387.26177978515625, "r": 425.63427734375, "b": 396.8255920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9390740990638733, "cells": [{"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.44702911376953, "t": 424.1014404296875, "r": 263.02802, "b": 440.4540100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9687318205833435, "cells": [{"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9691619873047, "t": 456.65673828125, "r": 546.7406, "b": 490.82232666015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842352867126465, "cells": [{"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.0598907470703, "t": 131.39212036132812, "r": 501.41558837890625, "b": 384.4598083496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9831688404083252, "cells": [{"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 142.4822540283203, "t": 508.5616760253906, "r": 541.38123, "b": 530.8720092773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9712533354759216, "cells": [{"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 106, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.1033630371094, "t": 754.9728393554688, "r": 523.62878, "b": 764.0504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9539369940757751, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 106, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6055297851562, "t": 754.2470092773438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9151113629341125, "cells": [{"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "91"}, {"label": "text", "id": 2, "page_no": 106, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.59042358398438, "t": 70.5692138671875, "r": 547.25018, "b": 116.77182006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9812178611755371, "cells": [{"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Although the source rows where NAME <> 'CAIN' do satisfy the target table\u2019s permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data."}, {"label": "caption", "id": 3, "page_no": 106, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.80810546875, "t": 387.26177978515625, "r": 425.63427734375, "b": 396.8255920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9390740990638733, "cells": [{"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET"}, {"label": "section_header", "id": 4, "page_no": 106, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44702911376953, "t": 424.1014404296875, "r": 263.02802, "b": 440.4540100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9687318205833435, "cells": [{"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}]}, "text": "6.3 RCAC effects on joins"}, {"label": "text", "id": 5, "page_no": 106, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9691619873047, "t": 456.65673828125, "r": 546.7406, "b": 490.82232666015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842352867126465, "cells": [{"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}]}, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled."}, {"label": "picture", "id": 6, "page_no": 106, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.0598907470703, "t": 131.39212036132812, "r": 501.41558837890625, "b": 384.4598083496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9831688404083252, "cells": [{"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 7, "page_no": 106, "cluster": {"id": 7, "label": "text", "bbox": {"l": 142.4822540283203, "t": 508.5616760253906, "r": 541.38123, "b": 530.8720092773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9712533354759216, "cells": [{"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation."}], "body": [{"label": "text", "id": 2, "page_no": 106, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.59042358398438, "t": 70.5692138671875, "r": 547.25018, "b": 116.77182006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9812178611755371, "cells": [{"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Although the source rows where NAME <> 'CAIN' do satisfy the target table\u2019s permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data."}, {"label": "caption", "id": 3, "page_no": 106, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.80810546875, "t": 387.26177978515625, "r": 425.63427734375, "b": 396.8255920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9390740990638733, "cells": [{"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET"}, {"label": "section_header", "id": 4, "page_no": 106, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44702911376953, "t": 424.1014404296875, "r": 263.02802, "b": 440.4540100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9687318205833435, "cells": [{"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}]}, "text": "6.3 RCAC effects on joins"}, {"label": "text", "id": 5, "page_no": 106, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9691619873047, "t": 456.65673828125, "r": 546.7406, "b": 490.82232666015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842352867126465, "cells": [{"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}]}, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled."}, {"label": "picture", "id": 6, "page_no": 106, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.0598907470703, "t": 131.39212036132812, "r": 501.41558837890625, "b": 384.4598083496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9831688404083252, "cells": [{"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 7, "page_no": 106, "cluster": {"id": 7, "label": "text", "bbox": {"l": 142.4822540283203, "t": 508.5616760253906, "r": 541.38123, "b": 530.8720092773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9712533354759216, "cells": [{"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 106, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.1033630371094, "t": 754.9728393554688, "r": 523.62878, "b": 764.0504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9539369940757751, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 106, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6055297851562, "t": 754.2470092773438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9151113629341125, "cells": [{"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "91"}]}}, {"page_no": 107, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.16549682617188, "t": 754.3916625976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147290587425232, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.34784698486328, "t": 754.6744995117188, "r": 334.42142, "b": 763.9275512695312, "coord_origin": "TOPLEFT"}, "confidence": 0.951833963394165, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.05355834960938, "t": 70.50668334960938, "r": 537.42993, "b": 92.82316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9440383911132812, "cells": [{"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.143310546875, "t": 319.539306640625, "r": 334.12286376953125, "b": 328.9681701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9443629384040833, "cells": [{"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.19314575195312, "t": 348.505126953125, "r": 166.59303, "b": 361.54974365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9613147974014282, "cells": [{"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.13674926757812, "t": 374.5938415527344, "r": 547.21875, "b": 397.1634216308594, "coord_origin": "TOPLEFT"}, "confidence": 0.965448260307312, "cells": [{"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.0211181640625, "t": 624.7966918945312, "r": 327.359130859375, "b": 634.3587036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9452580213546753, "cells": [{"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.11366271972656, "t": 107.33206176757812, "r": 502.8105773925781, "b": 316.0246887207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9822977781295776, "cells": [{"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.9275665283203, "t": 410.61224365234375, "r": 464.8796691894531, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9838927984237671, "cells": [{"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 107, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16549682617188, "t": 754.3916625976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147290587425232, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "92"}, {"label": "page_footer", "id": 1, "page_no": 107, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34784698486328, "t": 754.6744995117188, "r": 334.42142, "b": 763.9275512695312, "coord_origin": "TOPLEFT"}, "confidence": 0.951833963394165, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 107, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.05355834960938, "t": 70.50668334960938, "r": 537.42993, "b": 92.82316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9440383911132812, "cells": [{"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see."}, {"label": "caption", "id": 3, "page_no": 107, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.143310546875, "t": 319.539306640625, "r": 334.12286376953125, "b": 328.9681701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9443629384040833, "cells": [{"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-7 Set A and set B with row permissions"}, {"label": "section_header", "id": 4, "page_no": 107, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19314575195312, "t": 348.505126953125, "r": 166.59303, "b": 361.54974365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9613147974014282, "cells": [{"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.1 Inner joins"}, {"label": "text", "id": 5, "page_no": 107, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13674926757812, "t": 374.5938415527344, "r": 547.21875, "b": 397.1634216308594, "coord_origin": "TOPLEFT"}, "confidence": 0.965448260307312, "cells": [{"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8."}, {"label": "caption", "id": 6, "page_no": 107, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.0211181640625, "t": 624.7966918945312, "r": 327.359130859375, "b": 634.3587036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9452580213546753, "cells": [{"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-8 Inner join without RCAC permission"}, {"label": "picture", "id": 7, "page_no": 107, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.11366271972656, "t": 107.33206176757812, "r": 502.8105773925781, "b": 316.0246887207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9822977781295776, "cells": [{"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 107, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.9275665283203, "t": 410.61224365234375, "r": 464.8796691894531, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9838927984237671, "cells": [{"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 107, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.05355834960938, "t": 70.50668334960938, "r": 537.42993, "b": 92.82316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9440383911132812, "cells": [{"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see."}, {"label": "caption", "id": 3, "page_no": 107, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.143310546875, "t": 319.539306640625, "r": 334.12286376953125, "b": 328.9681701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9443629384040833, "cells": [{"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-7 Set A and set B with row permissions"}, {"label": "section_header", "id": 4, "page_no": 107, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19314575195312, "t": 348.505126953125, "r": 166.59303, "b": 361.54974365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9613147974014282, "cells": [{"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.1 Inner joins"}, {"label": "text", "id": 5, "page_no": 107, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13674926757812, "t": 374.5938415527344, "r": 547.21875, "b": 397.1634216308594, "coord_origin": "TOPLEFT"}, "confidence": 0.965448260307312, "cells": [{"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8."}, {"label": "caption", "id": 6, "page_no": 107, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.0211181640625, "t": 624.7966918945312, "r": 327.359130859375, "b": 634.3587036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9452580213546753, "cells": [{"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-8 Inner join without RCAC permission"}, {"label": "picture", "id": 7, "page_no": 107, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.11366271972656, "t": 107.33206176757812, "r": 502.8105773925781, "b": 316.0246887207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9822977781295776, "cells": [{"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 107, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.9275665283203, "t": 410.61224365234375, "r": 464.8796691894531, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9838927984237671, "cells": [{"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 107, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16549682617188, "t": 754.3916625976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147290587425232, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "92"}, {"label": "page_footer", "id": 1, "page_no": 107, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34784698486328, "t": 754.6744995117188, "r": 334.42142, "b": 763.9275512695312, "coord_origin": "TOPLEFT"}, "confidence": 0.951833963394165, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 108, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.04339599609375, "t": 754.8524169921875, "r": 523.62878, "b": 764.1233520507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9509537220001221, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5010375976562, "t": 754.3138427734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9208362102508545, "cells": [{"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92884826660156, "t": 70.47429656982422, "r": 547.32196, "b": 116.84603881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9856703877449036, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.20010375976562, "t": 423.43145751953125, "r": 314.9713439941406, "b": 432.9030456542969, "coord_origin": "TOPLEFT"}, "confidence": 0.943959653377533, "cells": [{"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 142.26942443847656, "t": 134.60061645507812, "r": 537.63239, "b": 169.2606201171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9708845019340515, "cells": [{"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.01123046875, "t": 187.63684, "r": 470.03668212890625, "b": 420.47430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9833499193191528, "cells": [{"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 108, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.04339599609375, "t": 754.8524169921875, "r": 523.62878, "b": 764.1233520507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9509537220001221, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 108, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5010375976562, "t": 754.3138427734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9208362102508545, "cells": [{"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "93"}, {"label": "text", "id": 2, "page_no": 108, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92884826660156, "t": 70.47429656982422, "r": 547.32196, "b": 116.84603881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9856703877449036, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9."}, {"label": "caption", "id": 3, "page_no": 108, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.20010375976562, "t": 423.43145751953125, "r": 314.9713439941406, "b": 432.9030456542969, "coord_origin": "TOPLEFT"}, "confidence": 0.943959653377533, "cells": [{"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-9 Inner join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 108, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.26942443847656, "t": 134.60061645507812, "r": 537.63239, "b": 169.2606201171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9708845019340515, "cells": [{"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 108, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01123046875, "t": 187.63684, "r": 470.03668212890625, "b": 420.47430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9833499193191528, "cells": [{"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 108, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92884826660156, "t": 70.47429656982422, "r": 547.32196, "b": 116.84603881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9856703877449036, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9."}, {"label": "caption", "id": 3, "page_no": 108, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.20010375976562, "t": 423.43145751953125, "r": 314.9713439941406, "b": 432.9030456542969, "coord_origin": "TOPLEFT"}, "confidence": 0.943959653377533, "cells": [{"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-9 Inner join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 108, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.26942443847656, "t": 134.60061645507812, "r": 537.63239, "b": 169.2606201171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9708845019340515, "cells": [{"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 108, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01123046875, "t": 187.63684, "r": 470.03668212890625, "b": 420.47430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9833499193191528, "cells": [{"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 108, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.04339599609375, "t": 754.8524169921875, "r": 523.62878, "b": 764.1233520507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9509537220001221, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 108, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5010375976562, "t": 754.3138427734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9208362102508545, "cells": [{"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "93"}]}}, {"page_no": 109, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.17929077148438, "t": 754.3489990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131594896316528, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.3522720336914, "t": 754.6829833984375, "r": 334.42142, "b": 763.9155883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9499405026435852, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.229248046875, "t": 70.42779541015625, "r": 169.51583862304688, "b": 83.49371337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9645467400550842, "cells": [{"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7491912841797, "t": 96.71513366699219, "r": 547.22864, "b": 142.9807586669922, "coord_origin": "TOPLEFT"}, "confidence": 0.9866304993629456, "cells": [{"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.09414672851562, "t": 375.3983154296875, "r": 334.3742370605469, "b": 384.94317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9473740458488464, "cells": [{"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.0685272216797, "t": 157.57115173339844, "r": 478.2557678222656, "b": 372.21685791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9835702180862427, "cells": [{"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 109, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17929077148438, "t": 754.3489990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131594896316528, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "94"}, {"label": "page_footer", "id": 1, "page_no": 109, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3522720336914, "t": 754.6829833984375, "r": 334.42142, "b": 763.9155883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9499405026435852, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 109, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.229248046875, "t": 70.42779541015625, "r": 169.51583862304688, "b": 83.49371337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9645467400550842, "cells": [{"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.2 Outer joins"}, {"label": "text", "id": 3, "page_no": 109, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7491912841797, "t": 96.71513366699219, "r": 547.22864, "b": 142.9807586669922, "coord_origin": "TOPLEFT"}, "confidence": 0.9866304993629456, "cells": [{"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default."}, {"label": "caption", "id": 4, "page_no": 109, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.09414672851562, "t": 375.3983154296875, "r": 334.3742370605469, "b": 384.94317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9473740458488464, "cells": [{"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-10 Outer join without RCAC permission"}, {"label": "picture", "id": 5, "page_no": 109, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.0685272216797, "t": 157.57115173339844, "r": 478.2557678222656, "b": 372.21685791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9835702180862427, "cells": [{"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 109, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.229248046875, "t": 70.42779541015625, "r": 169.51583862304688, "b": 83.49371337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9645467400550842, "cells": [{"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.2 Outer joins"}, {"label": "text", "id": 3, "page_no": 109, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7491912841797, "t": 96.71513366699219, "r": 547.22864, "b": 142.9807586669922, "coord_origin": "TOPLEFT"}, "confidence": 0.9866304993629456, "cells": [{"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default."}, {"label": "caption", "id": 4, "page_no": 109, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.09414672851562, "t": 375.3983154296875, "r": 334.3742370605469, "b": 384.94317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9473740458488464, "cells": [{"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-10 Outer join without RCAC permission"}, {"label": "picture", "id": 5, "page_no": 109, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.0685272216797, "t": 157.57115173339844, "r": 478.2557678222656, "b": 372.21685791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9835702180862427, "cells": [{"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 109, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17929077148438, "t": 754.3489990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131594896316528, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "94"}, {"label": "page_footer", "id": 1, "page_no": 109, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3522720336914, "t": 754.6829833984375, "r": 334.42142, "b": 763.9155883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9499405026435852, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 110, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.03192138671875, "t": 754.89306640625, "r": 523.62878, "b": 764.0955810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9518811702728271, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5347900390625, "t": 754.2847900390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9189174175262451, "cells": [{"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9468994140625, "t": 70.65094757080078, "r": 535.29822, "b": 104.91271209716797, "coord_origin": "TOPLEFT"}, "confidence": 0.9831045269966125, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.94920349121094, "t": 424.67193603515625, "r": 321.8890380859375, "b": 434.1568603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9448755383491516, "cells": [{"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 142.19854736328125, "t": 122.269287109375, "r": 537.63239, "b": 157.0519561767578, "coord_origin": "TOPLEFT"}, "confidence": 0.968166708946228, "cells": [{"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.01914978027344, "t": 183.2970428466797, "r": 483.0831298828125, "b": 421.65618896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9844624996185303, "cells": [{"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 110, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.03192138671875, "t": 754.89306640625, "r": 523.62878, "b": 764.0955810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9518811702728271, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 110, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5347900390625, "t": 754.2847900390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9189174175262451, "cells": [{"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "95"}, {"label": "text", "id": 2, "page_no": 110, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9468994140625, "t": 70.65094757080078, "r": 535.29822, "b": 104.91271209716797, "coord_origin": "TOPLEFT"}, "confidence": 0.9831045269966125, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11."}, {"label": "caption", "id": 3, "page_no": 110, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94920349121094, "t": 424.67193603515625, "r": 321.8890380859375, "b": 434.1568603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9448755383491516, "cells": [{"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-11 Outer join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 110, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.19854736328125, "t": 122.269287109375, "r": 537.63239, "b": 157.0519561767578, "coord_origin": "TOPLEFT"}, "confidence": 0.968166708946228, "cells": [{"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 110, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01914978027344, "t": 183.2970428466797, "r": 483.0831298828125, "b": 421.65618896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9844624996185303, "cells": [{"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 110, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9468994140625, "t": 70.65094757080078, "r": 535.29822, "b": 104.91271209716797, "coord_origin": "TOPLEFT"}, "confidence": 0.9831045269966125, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11."}, {"label": "caption", "id": 3, "page_no": 110, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94920349121094, "t": 424.67193603515625, "r": 321.8890380859375, "b": 434.1568603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9448755383491516, "cells": [{"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-11 Outer join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 110, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.19854736328125, "t": 122.269287109375, "r": 537.63239, "b": 157.0519561767578, "coord_origin": "TOPLEFT"}, "confidence": 0.968166708946228, "cells": [{"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 110, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01914978027344, "t": 183.2970428466797, "r": 483.0831298828125, "b": 421.65618896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9844624996185303, "cells": [{"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 110, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.03192138671875, "t": 754.89306640625, "r": 523.62878, "b": 764.0955810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9518811702728271, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 110, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5347900390625, "t": 754.2847900390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9189174175262451, "cells": [{"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "95"}]}}, {"page_no": 111, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.0777587890625, "t": 754.3192749023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9142870903015137, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31871032714844, "t": 754.6510620117188, "r": 334.42142, "b": 763.94580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9500807523727417, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.29151153564453, "t": 70.38421630859375, "r": 196.83258, "b": 83.45001983642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9660816788673401, "cells": [{"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8982696533203, "t": 96.56317138671875, "r": 547.29144, "b": 143.43101501464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9861393570899963, "cells": [{"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 135.93870544433594, "t": 397.3731689453125, "r": 351.4439392089844, "b": 406.8922424316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9481934905052185, "cells": [{"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.85084533691406, "t": 423.3223876953125, "r": 544.33844, "b": 469.4621276855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9827116131782532, "cells": [{"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.105224609375, "t": 721.96630859375, "r": 339.2431945800781, "b": 731.4581298828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9437704086303711, "cells": [{"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.2607879638672, "t": 156.67548, "r": 484.0173034667969, "b": 394.3146667480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834190607070923, "cells": [{"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.89076232910156, "t": 484.02805, "r": 485.4429931640625, "b": 719.3485717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9840064644813538, "cells": [{"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 111, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0777587890625, "t": 754.3192749023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9142870903015137, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "96"}, {"label": "page_footer", "id": 1, "page_no": 111, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31871032714844, "t": 754.6510620117188, "r": 334.42142, "b": 763.94580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9500807523727417, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 111, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.29151153564453, "t": 70.38421630859375, "r": 196.83258, "b": 83.45001983642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9660816788673401, "cells": [{"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.3 Exception joins"}, {"label": "text", "id": 3, "page_no": 111, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8982696533203, "t": 96.56317138671875, "r": 547.29144, "b": 143.43101501464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9861393570899963, "cells": [{"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default."}, {"label": "caption", "id": 4, "page_no": 111, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.93870544433594, "t": 397.3731689453125, "r": 351.4439392089844, "b": 406.8922424316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9481934905052185, "cells": [{"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-12 Exception join without RCAC permission"}, {"label": "text", "id": 5, "page_no": 111, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85084533691406, "t": 423.3223876953125, "r": 544.33844, "b": 469.4621276855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9827116131782532, "cells": [{"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "caption", "id": 6, "page_no": 111, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.105224609375, "t": 721.96630859375, "r": 339.2431945800781, "b": 731.4581298828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9437704086303711, "cells": [{"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-13 Exception join with RCAC permission"}, {"label": "picture", "id": 7, "page_no": 111, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2607879638672, "t": 156.67548, "r": 484.0173034667969, "b": 394.3146667480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834190607070923, "cells": [{"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 111, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.89076232910156, "t": 484.02805, "r": 485.4429931640625, "b": 719.3485717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9840064644813538, "cells": [{"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 111, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.29151153564453, "t": 70.38421630859375, "r": 196.83258, "b": 83.45001983642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9660816788673401, "cells": [{"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.3 Exception joins"}, {"label": "text", "id": 3, "page_no": 111, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8982696533203, "t": 96.56317138671875, "r": 547.29144, "b": 143.43101501464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9861393570899963, "cells": [{"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default."}, {"label": "caption", "id": 4, "page_no": 111, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.93870544433594, "t": 397.3731689453125, "r": 351.4439392089844, "b": 406.8922424316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9481934905052185, "cells": [{"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-12 Exception join without RCAC permission"}, {"label": "text", "id": 5, "page_no": 111, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85084533691406, "t": 423.3223876953125, "r": 544.33844, "b": 469.4621276855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9827116131782532, "cells": [{"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "caption", "id": 6, "page_no": 111, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.105224609375, "t": 721.96630859375, "r": 339.2431945800781, "b": 731.4581298828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9437704086303711, "cells": [{"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-13 Exception join with RCAC permission"}, {"label": "picture", "id": 7, "page_no": 111, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2607879638672, "t": 156.67548, "r": 484.0173034667969, "b": 394.3146667480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834190607070923, "cells": [{"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 111, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.89076232910156, "t": 484.02805, "r": 485.4429931640625, "b": 719.3485717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9840064644813538, "cells": [{"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 111, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0777587890625, "t": 754.3192749023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9142870903015137, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "96"}, {"label": "page_footer", "id": 1, "page_no": 111, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31871032714844, "t": 754.6510620117188, "r": 334.42142, "b": 763.94580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9500807523727417, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 112, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.0887756347656, "t": 754.9174194335938, "r": 523.62878, "b": 764.0950927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5423583984375, "t": 754.1775512695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9179106950759888, "cells": [{"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.39301300048828, "t": 69.98062896728516, "r": 469.47693, "b": 86.35014343261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9647093415260315, "cells": [{"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.89646911621094, "t": 102.54719543457031, "r": 547.22473, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9837515950202942, "cells": [{"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.66171264648438, "t": 148.67874145507812, "r": 547.19684, "b": 170.99827575683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9781493544578552, "cells": [{"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6549530029297, "t": 177.3022918701172, "r": 534.25262, "b": 199.70038, "coord_origin": "TOPLEFT"}, "confidence": 0.9730353951454163, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5695037841797, "t": 206.69236755371094, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9567621350288391, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.70484924316406, "t": 223.55690002441406, "r": 536.04651, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9668188095092773, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.6377410888672, "t": 252.64540100097656, "r": 547.22461, "b": 275.0115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9790591597557068, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.7350311279297, "t": 286.7269287109375, "r": 547.22968, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9875780940055847, "cells": [{"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.05958557128906, "t": 356.62713623046875, "r": 547.27863, "b": 451.1844177246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875933527946472, "cells": [{"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.9143524169922, "t": 462.9166564941406, "r": 547.32837, "b": 520.765869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875532388687134, "cells": [{"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.94204711914062, "t": 532.7372436523438, "r": 547.25159, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9887582063674927, "cells": [{"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "section_header", "bbox": {"l": 64.17730712890625, "t": 610.3857421875, "r": 325.99066, "b": 623.9208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9681240320205688, "cells": [{"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.0252227783203, "t": 636.5751953125, "r": 543.20374, "b": 682.76114, "coord_origin": "TOPLEFT"}, "confidence": 0.9866449236869812, "cells": [{"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 112, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0887756347656, "t": 754.9174194335938, "r": 523.62878, "b": 764.0950927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 112, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5423583984375, "t": 754.1775512695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9179106950759888, "cells": [{"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "97"}, {"label": "section_header", "id": 2, "page_no": 112, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39301300048828, "t": 69.98062896728516, "r": 469.47693, "b": 86.35014343261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9647093415260315, "cells": [{"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.4 Monitoring, analyzing, and debugging with RCAC"}, {"label": "text", "id": 3, "page_no": 112, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.89646911621094, "t": 102.54719543457031, "r": 547.22473, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9837515950202942, "cells": [{"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques."}, {"label": "text", "id": 4, "page_no": 112, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.66171264648438, "t": 148.67874145507812, "r": 547.19684, "b": 170.99827575683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9781493544578552, "cells": [{"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences:"}, {"label": "list_item", "id": 5, "page_no": 112, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6549530029297, "t": 177.3022918701172, "r": 534.25262, "b": 199.70038, "coord_origin": "TOPLEFT"}, "confidence": 0.9730353951454163, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The underlying data access plan can be different and more complex based on the rule text."}, {"label": "list_item", "id": 6, "page_no": 112, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5695037841797, "t": 206.69236755371094, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9567621350288391, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The database results can be reduced or modified based on the rule text and user profile."}, {"label": "list_item", "id": 7, "page_no": 112, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.70484924316406, "t": 223.55690002441406, "r": 536.04651, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9668188095092773, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The run time of the request can be affected either positively or negatively based on the rule text."}, {"label": "list_item", "id": 8, "page_no": 112, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6377410888672, "t": 252.64540100097656, "r": 547.22461, "b": 275.0115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9790591597557068, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH For high-level language record level access, query plans must be considered, and not just program code."}, {"label": "text", "id": 9, "page_no": 112, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.7350311279297, "t": 286.7269287109375, "r": 547.22968, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9875780940055847, "cells": [{"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}]}, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different."}, {"label": "text", "id": 10, "page_no": 112, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.05958557128906, "t": 356.62713623046875, "r": 547.27863, "b": 451.1844177246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875933527946472, "cells": [{"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user \u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query."}, {"label": "text", "id": 11, "page_no": 112, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9143524169922, "t": 462.9166564941406, "r": 547.32837, "b": 520.765869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875532388687134, "cells": [{"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different."}, {"label": "text", "id": 12, "page_no": 112, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.94204711914062, "t": 532.7372436523438, "r": 547.25159, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9887582063674927, "cells": [{"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}]}, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes even more important."}, {"label": "section_header", "id": 13, "page_no": 112, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.17730712890625, "t": 610.3857421875, "r": 325.99066, "b": 623.9208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9681240320205688, "cells": [{"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.1 Query monitoring and analysis tools"}, {"label": "text", "id": 14, "page_no": 112, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.0252227783203, "t": 636.5751953125, "r": 543.20374, "b": 682.76114, "coord_origin": "TOPLEFT"}, "confidence": 0.9866449236869812, "cells": [{"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor."}], "body": [{"label": "section_header", "id": 2, "page_no": 112, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39301300048828, "t": 69.98062896728516, "r": 469.47693, "b": 86.35014343261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9647093415260315, "cells": [{"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.4 Monitoring, analyzing, and debugging with RCAC"}, {"label": "text", "id": 3, "page_no": 112, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.89646911621094, "t": 102.54719543457031, "r": 547.22473, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9837515950202942, "cells": [{"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques."}, {"label": "text", "id": 4, "page_no": 112, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.66171264648438, "t": 148.67874145507812, "r": 547.19684, "b": 170.99827575683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9781493544578552, "cells": [{"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences:"}, {"label": "list_item", "id": 5, "page_no": 112, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6549530029297, "t": 177.3022918701172, "r": 534.25262, "b": 199.70038, "coord_origin": "TOPLEFT"}, "confidence": 0.9730353951454163, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The underlying data access plan can be different and more complex based on the rule text."}, {"label": "list_item", "id": 6, "page_no": 112, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5695037841797, "t": 206.69236755371094, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9567621350288391, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The database results can be reduced or modified based on the rule text and user profile."}, {"label": "list_item", "id": 7, "page_no": 112, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.70484924316406, "t": 223.55690002441406, "r": 536.04651, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9668188095092773, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The run time of the request can be affected either positively or negatively based on the rule text."}, {"label": "list_item", "id": 8, "page_no": 112, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6377410888672, "t": 252.64540100097656, "r": 547.22461, "b": 275.0115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9790591597557068, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH For high-level language record level access, query plans must be considered, and not just program code."}, {"label": "text", "id": 9, "page_no": 112, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.7350311279297, "t": 286.7269287109375, "r": 547.22968, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9875780940055847, "cells": [{"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}]}, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different."}, {"label": "text", "id": 10, "page_no": 112, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.05958557128906, "t": 356.62713623046875, "r": 547.27863, "b": 451.1844177246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875933527946472, "cells": [{"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user \u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query."}, {"label": "text", "id": 11, "page_no": 112, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9143524169922, "t": 462.9166564941406, "r": 547.32837, "b": 520.765869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875532388687134, "cells": [{"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different."}, {"label": "text", "id": 12, "page_no": 112, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.94204711914062, "t": 532.7372436523438, "r": 547.25159, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9887582063674927, "cells": [{"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}]}, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes even more important."}, {"label": "section_header", "id": 13, "page_no": 112, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.17730712890625, "t": 610.3857421875, "r": 325.99066, "b": 623.9208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9681240320205688, "cells": [{"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.1 Query monitoring and analysis tools"}, {"label": "text", "id": 14, "page_no": 112, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.0252227783203, "t": 636.5751953125, "r": 543.20374, "b": 682.76114, "coord_origin": "TOPLEFT"}, "confidence": 0.9866449236869812, "cells": [{"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 112, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0887756347656, "t": 754.9174194335938, "r": 523.62878, "b": 764.0950927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 112, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5423583984375, "t": 754.1775512695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9179106950759888, "cells": [{"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "97"}]}}, {"page_no": 113, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.10893249511719, "t": 754.4006958007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9148916006088257, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.39404296875, "t": 754.6958618164062, "r": 334.42142, "b": 763.9676513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9504665732383728, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.44447326660156, "t": 70.6107177734375, "r": 394.5509, "b": 81.15087127685547, "coord_origin": "TOPLEFT"}, "confidence": 0.6426960825920105, "cells": [{"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.1352310180664, "t": 351.9909973144531, "r": 301.8788146972656, "b": 361.4986877441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9484913349151611, "cells": [{"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.34783935546875, "t": 378.1083679199219, "r": 529.98889, "b": 388.4996337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7494233846664429, "cells": [{"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.04948425292969, "t": 544.6276245117188, "r": 222.99563598632812, "b": 554.0814208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098349213600159, "cells": [{"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.6471710205078, "t": 570.5686645507812, "r": 524.75702, "b": 593.2821655273438, "coord_origin": "TOPLEFT"}, "confidence": 0.8541293740272522, "cells": [{"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.28324127197266, "t": 688.001220703125, "r": 349.08843994140625, "b": 697.662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9500105977058411, "cells": [{"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 64.03382873535156, "t": 402.0129699707031, "r": 546.9832153320312, "b": 542.2274169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835320711135864, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 64.05506134033203, "t": 95.34317016601562, "r": 546.421142578125, "b": 349.3290100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.98197340965271, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 63.78765869140625, "t": 606.9619140625, "r": 546.1412353515625, "b": 685.5827026367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9799405932426453, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 113, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.10893249511719, "t": 754.4006958007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9148916006088257, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "98"}, {"label": "page_footer", "id": 1, "page_no": 113, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.39404296875, "t": 754.6958618164062, "r": 334.42142, "b": 763.9676513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9504665732383728, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 113, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.44447326660156, "t": 70.6107177734375, "r": 394.5509, "b": 81.15087127685547, "coord_origin": "TOPLEFT"}, "confidence": 0.6426960825920105, "cells": [{"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC."}, {"label": "caption", "id": 3, "page_no": 113, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.1352310180664, "t": 351.9909973144531, "r": 301.8788146972656, "b": 361.4986877441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9484913349151611, "cells": [{"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied"}, {"label": "text", "id": 4, "page_no": 113, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.34783935546875, "t": 378.1083679199219, "r": 529.98889, "b": 388.4996337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7494233846664429, "cells": [{"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary ."}, {"label": "caption", "id": 5, "page_no": 113, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.04948425292969, "t": 544.6276245117188, "r": 222.99563598632812, "b": 554.0814208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098349213600159, "cells": [{"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 SQL Performance Monitor"}, {"label": "text", "id": 6, "page_no": 113, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.6471710205078, "t": 570.5686645507812, "r": 524.75702, "b": 593.2821655273438, "coord_origin": "TOPLEFT"}, "confidence": 0.8541293740272522, "cells": [{"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied."}, {"label": "caption", "id": 7, "page_no": 113, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.28324127197266, "t": 688.001220703125, "r": 349.08843994140625, "b": 697.662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9500105977058411, "cells": [{"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied"}, {"label": "picture", "id": 8, "page_no": 113, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.03382873535156, "t": 402.0129699707031, "r": 546.9832153320312, "b": 542.2274169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835320711135864, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 113, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.05506134033203, "t": 95.34317016601562, "r": 546.421142578125, "b": 349.3290100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.98197340965271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 113, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.78765869140625, "t": 606.9619140625, "r": 546.1412353515625, "b": 685.5827026367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9799405932426453, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 113, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.44447326660156, "t": 70.6107177734375, "r": 394.5509, "b": 81.15087127685547, "coord_origin": "TOPLEFT"}, "confidence": 0.6426960825920105, "cells": [{"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC."}, {"label": "caption", "id": 3, "page_no": 113, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.1352310180664, "t": 351.9909973144531, "r": 301.8788146972656, "b": 361.4986877441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9484913349151611, "cells": [{"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied"}, {"label": "text", "id": 4, "page_no": 113, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.34783935546875, "t": 378.1083679199219, "r": 529.98889, "b": 388.4996337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7494233846664429, "cells": [{"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary ."}, {"label": "caption", "id": 5, "page_no": 113, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.04948425292969, "t": 544.6276245117188, "r": 222.99563598632812, "b": 554.0814208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098349213600159, "cells": [{"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 SQL Performance Monitor"}, {"label": "text", "id": 6, "page_no": 113, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.6471710205078, "t": 570.5686645507812, "r": 524.75702, "b": 593.2821655273438, "coord_origin": "TOPLEFT"}, "confidence": 0.8541293740272522, "cells": [{"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied."}, {"label": "caption", "id": 7, "page_no": 113, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.28324127197266, "t": 688.001220703125, "r": 349.08843994140625, "b": 697.662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9500105977058411, "cells": [{"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied"}, {"label": "picture", "id": 8, "page_no": 113, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.03382873535156, "t": 402.0129699707031, "r": 546.9832153320312, "b": 542.2274169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835320711135864, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 113, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.05506134033203, "t": 95.34317016601562, "r": 546.421142578125, "b": 349.3290100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.98197340965271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 113, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.78765869140625, "t": 606.9619140625, "r": 546.1412353515625, "b": 685.5827026367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9799405932426453, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 113, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.10893249511719, "t": 754.4006958007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9148916006088257, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "98"}, {"label": "page_footer", "id": 1, "page_no": 113, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.39404296875, "t": 754.6958618164062, "r": 334.42142, "b": 763.9676513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9504665732383728, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 114, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.0592956542969, "t": 754.98291015625, "r": 523.62878, "b": 764.048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9528514742851257, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5274047851562, "t": 754.2946166992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922478199005127, "cells": [{"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.21266174316406, "t": 70.70671844482422, "r": 514.50977, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9165806770324707, "cells": [{"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.27816772460938, "t": 220.06015014648438, "r": 349.6502685546875, "b": 229.44299, "coord_origin": "TOPLEFT"}, "confidence": 0.9448087215423584, "cells": [{"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8977813720703, "t": 245.93429565429688, "r": 547.19598, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9853147268295288, "cells": [{"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05642700195312, "t": 335.3828125, "r": 321.65756, "b": 346.0798034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7673708200454712, "cells": [{"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.81124877929688, "t": 357.3571472167969, "r": 520.11249, "b": 391.33963, "coord_origin": "TOPLEFT"}, "confidence": 0.9725678563117981, "cells": [{"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.4740447998047, "t": 403.30865478515625, "r": 547.2644, "b": 437.394287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9761651754379272, "cells": [{"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.00121307373047, "t": 457.377197265625, "r": 184.5458984375, "b": 469.96271, "coord_origin": "TOPLEFT"}, "confidence": 0.9545406103134155, "cells": [{"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.94943237304688, "t": 483.509033203125, "r": 544.1452, "b": 517.70703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9826521873474121, "cells": [{"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.8879852294922, "t": 529.4095458984375, "r": 543.59814, "b": 587.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9877107739448547, "cells": [{"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 63.79280090332031, "t": 107.09796142578125, "r": 547.32080078125, "b": 217.7356414794922, "coord_origin": "TOPLEFT"}, "confidence": 0.9807502627372742, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 114, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0592956542969, "t": 754.98291015625, "r": 523.62878, "b": 764.048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9528514742851257, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 114, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5274047851562, "t": 754.2946166992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922478199005127, "cells": [{"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "99"}, {"label": "text", "id": 2, "page_no": 114, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.21266174316406, "t": 70.70671844482422, "r": 514.50977, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9165806770324707, "cells": [{"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized."}, {"label": "caption", "id": 3, "page_no": 114, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27816772460938, "t": 220.06015014648438, "r": 349.6502685546875, "b": 229.44299, "coord_origin": "TOPLEFT"}, "confidence": 0.9448087215423584, "cells": [{"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC"}, {"label": "text", "id": 4, "page_no": 114, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8977813720703, "t": 245.93429565429688, "r": 547.19598, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9853147268295288, "cells": [{"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}]}, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer\u2019s policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:"}, {"label": "text", "id": 5, "page_no": 114, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05642700195312, "t": 335.3828125, "r": 321.65756, "b": 346.0798034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7673708200454712, "cells": [{"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'"}, {"label": "text", "id": 6, "page_no": 114, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81124877929688, "t": 357.3571472167969, "r": 520.11249, "b": 391.33963, "coord_origin": "TOPLEFT"}, "confidence": 0.9725678563117981, "cells": [{"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}]}, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure."}, {"label": "text", "id": 7, "page_no": 114, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.4740447998047, "t": 403.30865478515625, "r": 547.2644, "b": 437.394287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9761651754379272, "cells": [{"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}]}, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain."}, {"label": "section_header", "id": 8, "page_no": 114, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.00121307373047, "t": 457.377197265625, "r": 184.5458984375, "b": 469.96271, "coord_origin": "TOPLEFT"}, "confidence": 0.9545406103134155, "cells": [{"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.2 Index advisor"}, {"label": "text", "id": 9, "page_no": 114, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94943237304688, "t": 483.509033203125, "r": 544.1452, "b": 517.70703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9826521873474121, "cells": [{"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}]}, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point."}, {"label": "text", "id": 10, "page_no": 114, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.8879852294922, "t": 529.4095458984375, "r": 543.59814, "b": 587.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9877107739448547, "cells": [{"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}]}, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised."}, {"label": "picture", "id": 11, "page_no": 114, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 63.79280090332031, "t": 107.09796142578125, "r": 547.32080078125, "b": 217.7356414794922, "coord_origin": "TOPLEFT"}, "confidence": 0.9807502627372742, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 114, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.21266174316406, "t": 70.70671844482422, "r": 514.50977, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9165806770324707, "cells": [{"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized."}, {"label": "caption", "id": 3, "page_no": 114, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27816772460938, "t": 220.06015014648438, "r": 349.6502685546875, "b": 229.44299, "coord_origin": "TOPLEFT"}, "confidence": 0.9448087215423584, "cells": [{"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC"}, {"label": "text", "id": 4, "page_no": 114, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8977813720703, "t": 245.93429565429688, "r": 547.19598, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9853147268295288, "cells": [{"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}]}, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer\u2019s policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:"}, {"label": "text", "id": 5, "page_no": 114, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05642700195312, "t": 335.3828125, "r": 321.65756, "b": 346.0798034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7673708200454712, "cells": [{"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'"}, {"label": "text", "id": 6, "page_no": 114, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81124877929688, "t": 357.3571472167969, "r": 520.11249, "b": 391.33963, "coord_origin": "TOPLEFT"}, "confidence": 0.9725678563117981, "cells": [{"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}]}, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure."}, {"label": "text", "id": 7, "page_no": 114, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.4740447998047, "t": 403.30865478515625, "r": 547.2644, "b": 437.394287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9761651754379272, "cells": [{"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}]}, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain."}, {"label": "section_header", "id": 8, "page_no": 114, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.00121307373047, "t": 457.377197265625, "r": 184.5458984375, "b": 469.96271, "coord_origin": "TOPLEFT"}, "confidence": 0.9545406103134155, "cells": [{"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.2 Index advisor"}, {"label": "text", "id": 9, "page_no": 114, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94943237304688, "t": 483.509033203125, "r": 544.1452, "b": 517.70703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9826521873474121, "cells": [{"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}]}, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point."}, {"label": "text", "id": 10, "page_no": 114, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.8879852294922, "t": 529.4095458984375, "r": 543.59814, "b": 587.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9877107739448547, "cells": [{"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}]}, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised."}, {"label": "picture", "id": 11, "page_no": 114, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 63.79280090332031, "t": 107.09796142578125, "r": 547.32080078125, "b": 217.7356414794922, "coord_origin": "TOPLEFT"}, "confidence": 0.9807502627372742, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 114, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0592956542969, "t": 754.98291015625, "r": 523.62878, "b": 764.048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9528514742851257, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 114, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5274047851562, "t": 754.2946166992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922478199005127, "cells": [{"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "99"}]}}, {"page_no": 115, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.36641693115234, "t": 754.297607421875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9257708787918091, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.54092407226562, "t": 754.6331787109375, "r": 339.8568115234375, "b": 764.0162353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9520395398139954, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.3820037841797, "t": 70.64859008789062, "r": 529.22491, "b": 92.91596984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9596586227416992, "cells": [{"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.15460205078125, "t": 381.4628601074219, "r": 286.3040466308594, "b": 390.739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9480466842651367, "cells": [{"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.26499938964844, "t": 407.0609130859375, "r": 530.6283, "b": 429.14151, "coord_origin": "TOPLEFT"}, "confidence": 0.9521172642707825, "cells": [{"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.29851531982422, "t": 557.3598022460938, "r": 271.84735107421875, "b": 566.8680419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9459379315376282, "cells": [{"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.3258819580078, "t": 583.20947265625, "r": 545.00952, "b": 605.608154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9606812596321106, "cells": [{"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.258544921875, "t": 612.0850219726562, "r": 546.53442, "b": 634.7529907226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9552512764930725, "cells": [{"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.1768798828125, "t": 653.7276000976562, "r": 251.73373, "b": 667.0787353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9654273390769958, "cells": [{"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.8922119140625, "t": 679.9402465820312, "r": 519.3606, "b": 726.3667602539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9741504192352295, "cells": [{"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 136.10072326660156, "t": 107.46050262451172, "r": 547.119140625, "b": 378.9705810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9820297360420227, "cells": [{"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 64.22953796386719, "t": 443.35888671875, "r": 510.0937805175781, "b": 554.72021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9759700298309326, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 115, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.36641693115234, "t": 754.297607421875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9257708787918091, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "100"}, {"label": "page_footer", "id": 1, "page_no": 115, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.54092407226562, "t": 754.6331787109375, "r": 339.8568115234375, "b": 764.0162353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9520395398139954, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 115, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.3820037841797, "t": 70.64859008789062, "r": 529.22491, "b": 92.91596984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9596586227416992, "cells": [{"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s predicate and the RCAC predicate."}, {"label": "caption", "id": 3, "page_no": 115, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.15460205078125, "t": 381.4628601074219, "r": 286.3040466308594, "b": 390.739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9480466842651367, "cells": [{"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-18 Index advice and RCAC"}, {"label": "text", "id": 4, "page_no": 115, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.26499938964844, "t": 407.0609130859375, "r": 530.6283, "b": 429.14151, "coord_origin": "TOPLEFT"}, "confidence": 0.9521172642707825, "cells": [{"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}]}, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text."}, {"label": "caption", "id": 5, "page_no": 115, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.29851531982422, "t": 557.3598022460938, "r": 271.84735107421875, "b": 566.8680419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9459379315376282, "cells": [{"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-19 Index advisor based on the RCAC rule"}, {"label": "text", "id": 6, "page_no": 115, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.3258819580078, "t": 583.20947265625, "r": 545.00952, "b": 605.608154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9606812596321106, "cells": [{"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at:"}, {"label": "text", "id": 7, "page_no": 115, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.258544921875, "t": 612.0850219726562, "r": 546.53442, "b": 634.7529907226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9552512764930725, "cells": [{"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies"}, {"label": "section_header", "id": 8, "page_no": 115, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.1768798828125, "t": 653.7276000976562, "r": 251.73373, "b": 667.0787353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9654273390769958, "cells": [{"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.3 Metadata using catalogs"}, {"label": "text", "id": 9, "page_no": 115, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8922119140625, "t": 679.9402465820312, "r": 519.3606, "b": 726.3667602539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9741504192352295, "cells": [{"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}]}, "text": "To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively."}, {"label": "picture", "id": 10, "page_no": 115, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.10072326660156, "t": 107.46050262451172, "r": 547.119140625, "b": 378.9705810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9820297360420227, "cells": [{"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 115, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.22953796386719, "t": 443.35888671875, "r": 510.0937805175781, "b": 554.72021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9759700298309326, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 115, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.3820037841797, "t": 70.64859008789062, "r": 529.22491, "b": 92.91596984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9596586227416992, "cells": [{"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s predicate and the RCAC predicate."}, {"label": "caption", "id": 3, "page_no": 115, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.15460205078125, "t": 381.4628601074219, "r": 286.3040466308594, "b": 390.739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9480466842651367, "cells": [{"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-18 Index advice and RCAC"}, {"label": "text", "id": 4, "page_no": 115, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.26499938964844, "t": 407.0609130859375, "r": 530.6283, "b": 429.14151, "coord_origin": "TOPLEFT"}, "confidence": 0.9521172642707825, "cells": [{"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}]}, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text."}, {"label": "caption", "id": 5, "page_no": 115, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.29851531982422, "t": 557.3598022460938, "r": 271.84735107421875, "b": 566.8680419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9459379315376282, "cells": [{"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-19 Index advisor based on the RCAC rule"}, {"label": "text", "id": 6, "page_no": 115, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.3258819580078, "t": 583.20947265625, "r": 545.00952, "b": 605.608154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9606812596321106, "cells": [{"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at:"}, {"label": "text", "id": 7, "page_no": 115, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.258544921875, "t": 612.0850219726562, "r": 546.53442, "b": 634.7529907226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9552512764930725, "cells": [{"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies"}, {"label": "section_header", "id": 8, "page_no": 115, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.1768798828125, "t": 653.7276000976562, "r": 251.73373, "b": 667.0787353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9654273390769958, "cells": [{"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.3 Metadata using catalogs"}, {"label": "text", "id": 9, "page_no": 115, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8922119140625, "t": 679.9402465820312, "r": 519.3606, "b": 726.3667602539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9741504192352295, "cells": [{"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}]}, "text": "To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively."}, {"label": "picture", "id": 10, "page_no": 115, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.10072326660156, "t": 107.46050262451172, "r": 547.119140625, "b": 378.9705810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9820297360420227, "cells": [{"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 115, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.22953796386719, "t": 443.35888671875, "r": 510.0937805175781, "b": 554.72021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9759700298309326, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 115, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.36641693115234, "t": 754.297607421875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9257708787918091, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "100"}, {"label": "page_footer", "id": 1, "page_no": 115, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.54092407226562, "t": 754.6331787109375, "r": 339.8568115234375, "b": 764.0162353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9520395398139954, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 116, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.6695251464844, "t": 754.8765258789062, "r": 517.96918, "b": 763.8857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.947565495967865, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.2025146484375, "t": 754.233154296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9223108291625977, "cells": [{"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 136.48927307128906, "t": 70.64897155761719, "r": 409.46722, "b": 81.03340148925781, "coord_origin": "TOPLEFT"}, "confidence": 0.6312575936317444, "cells": [{"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.26973724365234, "t": 245.4910888671875, "r": 197.03440856933594, "b": 254.8696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.8850163221359253, "cells": [{"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15829467773438, "t": 271.2189636230469, "r": 430.36699999999996, "b": 281.557861328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8766745924949646, "cells": [{"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.715576171875, "t": 288.5225830078125, "r": 229.52528381347656, "b": 298.40128, "coord_origin": "TOPLEFT"}, "confidence": 0.9187909364700317, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.78355407714844, "t": 300.58892822265625, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}, "confidence": 0.9145805835723877, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8020477294922, "t": 312.4302673339844, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}, "confidence": 0.9202974438667297, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.65097045898438, "t": 324.4266052246094, "r": 190.9705047607422, "b": 334.40073, "coord_origin": "TOPLEFT"}, "confidence": 0.9024768471717834, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.5606231689453, "t": 336.0796813964844, "r": 207.5435791015625, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9086344838142395, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.4138946533203, "t": 348.0664367675781, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}, "confidence": 0.9216498136520386, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.53013610839844, "t": 360.2685852050781, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}, "confidence": 0.908420741558075, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.5832061767578, "t": 372.1552429199219, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}, "confidence": 0.8999857902526855, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.9365997314453, "t": 384.15179443359375, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9266810417175293, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.55462646484375, "t": 395.8648376464844, "r": 236.96395874023438, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9251843690872192, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.59799194335938, "t": 408.1325378417969, "r": 213.861328125, "b": 418.39944, "coord_origin": "TOPLEFT"}, "confidence": 0.9111971855163574, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.62445068359375, "t": 419.9839782714844, "r": 223.28578186035156, "b": 430.39926, "coord_origin": "TOPLEFT"}, "confidence": 0.9163252115249634, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 135.59918212890625, "t": 431.9518737792969, "r": 227.91741943359375, "b": 442.39908, "coord_origin": "TOPLEFT"}, "confidence": 0.9221100211143494, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.649658203125, "t": 444.19696044921875, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9048181772232056, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.53004455566406, "t": 456.36712646484375, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}, "confidence": 0.9331137537956238, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.6468963623047, "t": 467.97235107421875, "r": 263.12493896484375, "b": 478.39853, "coord_origin": "TOPLEFT"}, "confidence": 0.9202753305435181, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.67005920410156, "t": 480.2753601074219, "r": 276.916015625, "b": 490.39835, "coord_origin": "TOPLEFT"}, "confidence": 0.93083256483078, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.68890380859375, "t": 492.2499084472656, "r": 216.28732299804688, "b": 502.39816, "coord_origin": "TOPLEFT"}, "confidence": 0.9164599180221558, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 135.64125061035156, "t": 504.14703369140625, "r": 230.32113647460938, "b": 514.39798, "coord_origin": "TOPLEFT"}, "confidence": 0.9193540215492249, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 135.58006286621094, "t": 516.2754516601562, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}, "confidence": 0.9276848435401917, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "text", "bbox": {"l": 136.2348175048828, "t": 538.4920043945312, "r": 451.01199, "b": 548.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8883419632911682, "cells": [{"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}]}, {"id": 26, "label": "list_item", "bbox": {"l": 135.6955108642578, "t": 554.92236328125, "r": 229.20022583007812, "b": 565.39719, "coord_origin": "TOPLEFT"}, "confidence": 0.9285773634910583, "cells": [{"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}]}, {"id": 27, "label": "list_item", "bbox": {"l": 135.7337188720703, "t": 567.2264404296875, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}, "confidence": 0.9127693772315979, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}]}, {"id": 28, "label": "list_item", "bbox": {"l": 135.7036590576172, "t": 579.0064086914062, "r": 223.13241577148438, "b": 589.39679, "coord_origin": "TOPLEFT"}, "confidence": 0.9143235683441162, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}]}, {"id": 29, "label": "list_item", "bbox": {"l": 135.64175415039062, "t": 590.69970703125, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9129092693328857, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 30, "label": "list_item", "bbox": {"l": 135.65492248535156, "t": 602.8453369140625, "r": 239.2605743408203, "b": 613.39639, "coord_origin": "TOPLEFT"}, "confidence": 0.9242467880249023, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}]}, {"id": 31, "label": "list_item", "bbox": {"l": 135.42955017089844, "t": 614.6676635742188, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9121018648147583, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 32, "label": "list_item", "bbox": {"l": 135.63658142089844, "t": 626.9090576171875, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}, "confidence": 0.9265965223312378, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}]}, {"id": 33, "label": "list_item", "bbox": {"l": 135.70877075195312, "t": 639.044921875, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}, "confidence": 0.9117604494094849, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}]}, {"id": 34, "label": "list_item", "bbox": {"l": 135.70849609375, "t": 651.1845703125, "r": 227.56272888183594, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9165326356887817, "cells": [{"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 35, "label": "list_item", "bbox": {"l": 135.59637451171875, "t": 662.8261108398438, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}, "confidence": 0.9273440837860107, "cells": [{"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}]}, {"id": 36, "label": "list_item", "bbox": {"l": 135.5303497314453, "t": 675.0317993164062, "r": 276.7511291503906, "b": 685.39522, "coord_origin": "TOPLEFT"}, "confidence": 0.9355826377868652, "cells": [{"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}]}, {"id": 37, "label": "text", "bbox": {"l": 136.2892303466797, "t": 697.2129516601562, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}, "confidence": 0.8819487690925598, "cells": [{"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}]}, {"id": 38, "label": "text", "bbox": {"l": 136.3297119140625, "t": 713.9354248046875, "r": 546.53442, "b": 736.10556, "coord_origin": "TOPLEFT"}, "confidence": 0.9137188792228699, "cells": [{"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 116, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6695251464844, "t": 754.8765258789062, "r": 517.96918, "b": 763.8857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.947565495967865, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 116, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.2025146484375, "t": 754.233154296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9223108291625977, "cells": [{"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "101"}, {"label": "section_header", "id": 2, "page_no": 116, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.48927307128906, "t": 70.64897155761719, "r": 409.46722, "b": 81.03340148925781, "coord_origin": "TOPLEFT"}, "confidence": 0.6312575936317444, "cells": [{"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view."}, {"label": "caption", "id": 3, "page_no": 116, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.26973724365234, "t": 245.4910888671875, "r": 197.03440856933594, "b": 254.8696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.8850163221359253, "cells": [{"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 RCAC and catalogs"}, {"label": "text", "id": 4, "page_no": 116, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15829467773438, "t": 271.2189636230469, "r": 430.36699999999996, "b": 281.557861328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8766745924949646, "cells": [{"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLS catalog view contains the following columns:"}, {"label": "list_item", "id": 5, "page_no": 116, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.715576171875, "t": 288.5225830078125, "r": 229.52528381347656, "b": 298.40128, "coord_origin": "TOPLEFT"}, "confidence": 0.9187909364700317, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 6, "page_no": 116, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78355407714844, "t": 300.58892822265625, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}, "confidence": 0.9145805835723877, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 7, "page_no": 116, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8020477294922, "t": 312.4302673339844, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}, "confidence": 0.9202974438667297, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CREATE_TIME"}, {"label": "list_item", "id": 8, "page_no": 116, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.65097045898438, "t": 324.4266052246094, "r": 190.9705047607422, "b": 334.40073, "coord_origin": "TOPLEFT"}, "confidence": 0.9024768471717834, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENABLE"}, {"label": "list_item", "id": 9, "page_no": 116, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5606231689453, "t": 336.0796813964844, "r": 207.5435791015625, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9086344838142395, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENFORCED"}, {"label": "list_item", "id": 10, "page_no": 116, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.4138946533203, "t": 348.0664367675781, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}, "confidence": 0.9216498136520386, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ASP_NUMBER"}, {"label": "list_item", "id": 11, "page_no": 116, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53013610839844, "t": 360.2685852050781, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}, "confidence": 0.908420741558075, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IMPLICIT"}, {"label": "list_item", "id": 12, "page_no": 116, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.5832061767578, "t": 372.1552429199219, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}, "confidence": 0.8999857902526855, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LABEL"}, {"label": "list_item", "id": 13, "page_no": 116, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.9365997314453, "t": 384.15179443359375, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9266810417175293, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LAST_ALTERED"}, {"label": "list_item", "id": 14, "page_no": 116, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.55462646484375, "t": 395.8648376464844, "r": 236.96395874023438, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9251843690872192, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LONG_COMMENT"}, {"label": "list_item", "id": 15, "page_no": 116, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.59799194335938, "t": 408.1325378417969, "r": 213.861328125, "b": 418.39944, "coord_origin": "TOPLEFT"}, "confidence": 0.9111971855163574, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 16, "page_no": 116, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.62445068359375, "t": 419.9839782714844, "r": 223.28578186035156, "b": 430.39926, "coord_origin": "TOPLEFT"}, "confidence": 0.9163252115249634, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_OWNER"}, {"label": "list_item", "id": 17, "page_no": 116, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.59918212890625, "t": 431.9518737792969, "r": 227.91741943359375, "b": 442.39908, "coord_origin": "TOPLEFT"}, "confidence": 0.9221100211143494, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 18, "page_no": 116, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.649658203125, "t": 444.19696044921875, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9048181772232056, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RULETEXT"}, {"label": "list_item", "id": 19, "page_no": 116, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.53004455566406, "t": 456.36712646484375, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}, "confidence": 0.9331137537956238, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_COLUMN_NAME"}, {"label": "list_item", "id": 20, "page_no": 116, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.6468963623047, "t": 467.97235107421875, "r": 263.12493896484375, "b": 478.39853, "coord_origin": "TOPLEFT"}, "confidence": 0.9202753305435181, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 21, "page_no": 116, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.67005920410156, "t": 480.2753601074219, "r": 276.916015625, "b": 490.39835, "coord_origin": "TOPLEFT"}, "confidence": 0.93083256483078, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "list_item", "id": 22, "page_no": 116, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.68890380859375, "t": 492.2499084472656, "r": 216.28732299804688, "b": 502.39816, "coord_origin": "TOPLEFT"}, "confidence": 0.9164599180221558, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_NAME"}, {"label": "list_item", "id": 23, "page_no": 116, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.64125061035156, "t": 504.14703369140625, "r": 230.32113647460938, "b": 514.39798, "coord_origin": "TOPLEFT"}, "confidence": 0.9193540215492249, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_SCHEMA"}, {"label": "list_item", "id": 24, "page_no": 116, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.58006286621094, "t": 516.2754516601562, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}, "confidence": 0.9276848435401917, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TBCORRELATION"}, {"label": "text", "id": 25, "page_no": 116, "cluster": {"id": 25, "label": "text", "bbox": {"l": 136.2348175048828, "t": 538.4920043945312, "r": 451.01199, "b": 548.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8883419632911682, "cells": [{"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLSDEP catalog view contains the following columns:"}, {"label": "list_item", "id": 26, "page_no": 116, "cluster": {"id": 26, "label": "list_item", "bbox": {"l": 135.6955108642578, "t": 554.92236328125, "r": 229.20022583007812, "b": 565.39719, "coord_origin": "TOPLEFT"}, "confidence": 0.9285773634910583, "cells": [{"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 27, "page_no": 116, "cluster": {"id": 27, "label": "list_item", "bbox": {"l": 135.7337188720703, "t": 567.2264404296875, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}, "confidence": 0.9127693772315979, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 28, "page_no": 116, "cluster": {"id": 28, "label": "list_item", "bbox": {"l": 135.7036590576172, "t": 579.0064086914062, "r": 223.13241577148438, "b": 589.39679, "coord_origin": "TOPLEFT"}, "confidence": 0.9143235683441162, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IASP_NUMBER"}, {"label": "list_item", "id": 29, "page_no": 116, "cluster": {"id": 29, "label": "list_item", "bbox": {"l": 135.64175415039062, "t": 590.69970703125, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9129092693328857, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_NAME"}, {"label": "list_item", "id": 30, "page_no": 116, "cluster": {"id": 30, "label": "list_item", "bbox": {"l": 135.65492248535156, "t": 602.8453369140625, "r": 239.2605743408203, "b": 613.39639, "coord_origin": "TOPLEFT"}, "confidence": 0.9242467880249023, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_SCHEMA"}, {"label": "list_item", "id": 31, "page_no": 116, "cluster": {"id": 31, "label": "list_item", "bbox": {"l": 135.42955017089844, "t": 614.6676635742188, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9121018648147583, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_TYPE"}, {"label": "list_item", "id": 32, "page_no": 116, "cluster": {"id": 32, "label": "list_item", "bbox": {"l": 135.63658142089844, "t": 626.9090576171875, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}, "confidence": 0.9265965223312378, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PARM_SIGNATURE"}, {"label": "list_item", "id": 33, "page_no": 116, "cluster": {"id": 33, "label": "list_item", "bbox": {"l": 135.70877075195312, "t": 639.044921875, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}, "confidence": 0.9117604494094849, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 34, "page_no": 116, "cluster": {"id": 34, "label": "list_item", "bbox": {"l": 135.70849609375, "t": 651.1845703125, "r": 227.56272888183594, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9165326356887817, "cells": [{"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 35, "page_no": 116, "cluster": {"id": 35, "label": "list_item", "bbox": {"l": 135.59637451171875, "t": 662.8261108398438, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}, "confidence": 0.9273440837860107, "cells": [{"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 36, "page_no": 116, "cluster": {"id": 36, "label": "list_item", "bbox": {"l": 135.5303497314453, "t": 675.0317993164062, "r": 276.7511291503906, "b": 685.39522, "coord_origin": "TOPLEFT"}, "confidence": 0.9355826377868652, "cells": [{"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "text", "id": 37, "page_no": 116, "cluster": {"id": 37, "label": "text", "bbox": {"l": 136.2892303466797, "t": 697.2129516601562, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}, "confidence": 0.8819487690925598, "cells": [{"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}]}, "text": "For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at:"}, {"label": "text", "id": 38, "page_no": 116, "cluster": {"id": 38, "label": "text", "bbox": {"l": 136.3297119140625, "t": 713.9354248046875, "r": 546.53442, "b": 736.10556, "coord_origin": "TOPLEFT"}, "confidence": 0.9137188792228699, "cells": [{"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en"}], "body": [{"label": "section_header", "id": 2, "page_no": 116, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.48927307128906, "t": 70.64897155761719, "r": 409.46722, "b": 81.03340148925781, "coord_origin": "TOPLEFT"}, "confidence": 0.6312575936317444, "cells": [{"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view."}, {"label": "caption", "id": 3, "page_no": 116, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.26973724365234, "t": 245.4910888671875, "r": 197.03440856933594, "b": 254.8696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.8850163221359253, "cells": [{"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 RCAC and catalogs"}, {"label": "text", "id": 4, "page_no": 116, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15829467773438, "t": 271.2189636230469, "r": 430.36699999999996, "b": 281.557861328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8766745924949646, "cells": [{"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLS catalog view contains the following columns:"}, {"label": "list_item", "id": 5, "page_no": 116, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.715576171875, "t": 288.5225830078125, "r": 229.52528381347656, "b": 298.40128, "coord_origin": "TOPLEFT"}, "confidence": 0.9187909364700317, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 6, "page_no": 116, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78355407714844, "t": 300.58892822265625, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}, "confidence": 0.9145805835723877, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 7, "page_no": 116, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8020477294922, "t": 312.4302673339844, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}, "confidence": 0.9202974438667297, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CREATE_TIME"}, {"label": "list_item", "id": 8, "page_no": 116, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.65097045898438, "t": 324.4266052246094, "r": 190.9705047607422, "b": 334.40073, "coord_origin": "TOPLEFT"}, "confidence": 0.9024768471717834, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENABLE"}, {"label": "list_item", "id": 9, "page_no": 116, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5606231689453, "t": 336.0796813964844, "r": 207.5435791015625, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9086344838142395, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENFORCED"}, {"label": "list_item", "id": 10, "page_no": 116, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.4138946533203, "t": 348.0664367675781, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}, "confidence": 0.9216498136520386, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ASP_NUMBER"}, {"label": "list_item", "id": 11, "page_no": 116, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53013610839844, "t": 360.2685852050781, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}, "confidence": 0.908420741558075, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IMPLICIT"}, {"label": "list_item", "id": 12, "page_no": 116, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.5832061767578, "t": 372.1552429199219, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}, "confidence": 0.8999857902526855, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LABEL"}, {"label": "list_item", "id": 13, "page_no": 116, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.9365997314453, "t": 384.15179443359375, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9266810417175293, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LAST_ALTERED"}, {"label": "list_item", "id": 14, "page_no": 116, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.55462646484375, "t": 395.8648376464844, "r": 236.96395874023438, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9251843690872192, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LONG_COMMENT"}, {"label": "list_item", "id": 15, "page_no": 116, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.59799194335938, "t": 408.1325378417969, "r": 213.861328125, "b": 418.39944, "coord_origin": "TOPLEFT"}, "confidence": 0.9111971855163574, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 16, "page_no": 116, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.62445068359375, "t": 419.9839782714844, "r": 223.28578186035156, "b": 430.39926, "coord_origin": "TOPLEFT"}, "confidence": 0.9163252115249634, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_OWNER"}, {"label": "list_item", "id": 17, "page_no": 116, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.59918212890625, "t": 431.9518737792969, "r": 227.91741943359375, "b": 442.39908, "coord_origin": "TOPLEFT"}, "confidence": 0.9221100211143494, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 18, "page_no": 116, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.649658203125, "t": 444.19696044921875, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9048181772232056, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RULETEXT"}, {"label": "list_item", "id": 19, "page_no": 116, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.53004455566406, "t": 456.36712646484375, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}, "confidence": 0.9331137537956238, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_COLUMN_NAME"}, {"label": "list_item", "id": 20, "page_no": 116, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.6468963623047, "t": 467.97235107421875, "r": 263.12493896484375, "b": 478.39853, "coord_origin": "TOPLEFT"}, "confidence": 0.9202753305435181, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 21, "page_no": 116, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.67005920410156, "t": 480.2753601074219, "r": 276.916015625, "b": 490.39835, "coord_origin": "TOPLEFT"}, "confidence": 0.93083256483078, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "list_item", "id": 22, "page_no": 116, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.68890380859375, "t": 492.2499084472656, "r": 216.28732299804688, "b": 502.39816, "coord_origin": "TOPLEFT"}, "confidence": 0.9164599180221558, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_NAME"}, {"label": "list_item", "id": 23, "page_no": 116, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.64125061035156, "t": 504.14703369140625, "r": 230.32113647460938, "b": 514.39798, "coord_origin": "TOPLEFT"}, "confidence": 0.9193540215492249, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_SCHEMA"}, {"label": "list_item", "id": 24, "page_no": 116, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.58006286621094, "t": 516.2754516601562, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}, "confidence": 0.9276848435401917, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TBCORRELATION"}, {"label": "text", "id": 25, "page_no": 116, "cluster": {"id": 25, "label": "text", "bbox": {"l": 136.2348175048828, "t": 538.4920043945312, "r": 451.01199, "b": 548.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8883419632911682, "cells": [{"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLSDEP catalog view contains the following columns:"}, {"label": "list_item", "id": 26, "page_no": 116, "cluster": {"id": 26, "label": "list_item", "bbox": {"l": 135.6955108642578, "t": 554.92236328125, "r": 229.20022583007812, "b": 565.39719, "coord_origin": "TOPLEFT"}, "confidence": 0.9285773634910583, "cells": [{"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 27, "page_no": 116, "cluster": {"id": 27, "label": "list_item", "bbox": {"l": 135.7337188720703, "t": 567.2264404296875, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}, "confidence": 0.9127693772315979, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 28, "page_no": 116, "cluster": {"id": 28, "label": "list_item", "bbox": {"l": 135.7036590576172, "t": 579.0064086914062, "r": 223.13241577148438, "b": 589.39679, "coord_origin": "TOPLEFT"}, "confidence": 0.9143235683441162, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IASP_NUMBER"}, {"label": "list_item", "id": 29, "page_no": 116, "cluster": {"id": 29, "label": "list_item", "bbox": {"l": 135.64175415039062, "t": 590.69970703125, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9129092693328857, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_NAME"}, {"label": "list_item", "id": 30, "page_no": 116, "cluster": {"id": 30, "label": "list_item", "bbox": {"l": 135.65492248535156, "t": 602.8453369140625, "r": 239.2605743408203, "b": 613.39639, "coord_origin": "TOPLEFT"}, "confidence": 0.9242467880249023, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_SCHEMA"}, {"label": "list_item", "id": 31, "page_no": 116, "cluster": {"id": 31, "label": "list_item", "bbox": {"l": 135.42955017089844, "t": 614.6676635742188, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9121018648147583, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_TYPE"}, {"label": "list_item", "id": 32, "page_no": 116, "cluster": {"id": 32, "label": "list_item", "bbox": {"l": 135.63658142089844, "t": 626.9090576171875, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}, "confidence": 0.9265965223312378, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PARM_SIGNATURE"}, {"label": "list_item", "id": 33, "page_no": 116, "cluster": {"id": 33, "label": "list_item", "bbox": {"l": 135.70877075195312, "t": 639.044921875, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}, "confidence": 0.9117604494094849, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 34, "page_no": 116, "cluster": {"id": 34, "label": "list_item", "bbox": {"l": 135.70849609375, "t": 651.1845703125, "r": 227.56272888183594, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9165326356887817, "cells": [{"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 35, "page_no": 116, "cluster": {"id": 35, "label": "list_item", "bbox": {"l": 135.59637451171875, "t": 662.8261108398438, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}, "confidence": 0.9273440837860107, "cells": [{"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 36, "page_no": 116, "cluster": {"id": 36, "label": "list_item", "bbox": {"l": 135.5303497314453, "t": 675.0317993164062, "r": 276.7511291503906, "b": 685.39522, "coord_origin": "TOPLEFT"}, "confidence": 0.9355826377868652, "cells": [{"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "text", "id": 37, "page_no": 116, "cluster": {"id": 37, "label": "text", "bbox": {"l": 136.2892303466797, "t": 697.2129516601562, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}, "confidence": 0.8819487690925598, "cells": [{"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}]}, "text": "For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at:"}, {"label": "text", "id": 38, "page_no": 116, "cluster": {"id": 38, "label": "text", "bbox": {"l": 136.3297119140625, "t": 713.9354248046875, "r": 546.53442, "b": 736.10556, "coord_origin": "TOPLEFT"}, "confidence": 0.9137188792228699, "cells": [{"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 116, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6695251464844, "t": 754.8765258789062, "r": 517.96918, "b": 763.8857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.947565495967865, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 116, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.2025146484375, "t": 754.233154296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9223108291625977, "cells": [{"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "101"}]}}, {"page_no": 117, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.45819091796875, "t": 754.2963256835938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219294190406799, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.59468078613281, "t": 754.6023559570312, "r": 339.92059326171875, "b": 764.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9517812728881836, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.48343658447266, "t": 69.85620880126953, "r": 524.18311, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.951751172542572, "cells": [{"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83413696289062, "t": 121.24685668945312, "r": 538.62842, "b": 143.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9707952737808228, "cells": [{"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.00408935546875, "t": 163.15185546875, "r": 137.59872436523438, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9475746154785156, "cells": [{"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.95098876953125, "t": 189.26473999023438, "r": 547.26752, "b": 247.95785522460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9861626029014587, "cells": [{"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.1767120361328, "t": 532.8250122070312, "r": 311.7160949707031, "b": 542.2582397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9393132328987122, "cells": [{"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.61915588378906, "t": 262.3319396972656, "r": 491.90362548828125, "b": 529.945556640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9785625338554382, "cells": [{"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 117, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45819091796875, "t": 754.2963256835938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219294190406799, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "102"}, {"label": "page_footer", "id": 1, "page_no": 117, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59468078613281, "t": 754.6023559570312, "r": 339.92059326171875, "b": 764.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9517812728881836, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 117, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.48343658447266, "t": 69.85620880126953, "r": 524.18311, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.951751172542572, "cells": [{"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC"}, {"label": "text", "id": 3, "page_no": 117, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83413696289062, "t": 121.24685668945312, "r": 538.62842, "b": 143.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9707952737808228, "cells": [{"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table."}, {"label": "section_header", "id": 4, "page_no": 117, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.00408935546875, "t": 163.15185546875, "r": 137.59872436523438, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9475746154785156, "cells": [{"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.1 Views"}, {"label": "text", "id": 5, "page_no": 117, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.95098876953125, "t": 189.26473999023438, "r": 547.26752, "b": 247.95785522460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9861626029014587, "cells": [{"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query."}, {"label": "caption", "id": 6, "page_no": 117, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1767120361328, "t": 532.8250122070312, "r": 311.7160949707031, "b": 542.2582397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9393132328987122, "cells": [{"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-21 View definition and user query"}, {"label": "picture", "id": 7, "page_no": 117, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.61915588378906, "t": 262.3319396972656, "r": 491.90362548828125, "b": 529.945556640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9785625338554382, "cells": [{"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 117, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.48343658447266, "t": 69.85620880126953, "r": 524.18311, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.951751172542572, "cells": [{"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC"}, {"label": "text", "id": 3, "page_no": 117, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83413696289062, "t": 121.24685668945312, "r": 538.62842, "b": 143.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9707952737808228, "cells": [{"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table."}, {"label": "section_header", "id": 4, "page_no": 117, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.00408935546875, "t": 163.15185546875, "r": 137.59872436523438, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9475746154785156, "cells": [{"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.1 Views"}, {"label": "text", "id": 5, "page_no": 117, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.95098876953125, "t": 189.26473999023438, "r": 547.26752, "b": 247.95785522460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9861626029014587, "cells": [{"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query."}, {"label": "caption", "id": 6, "page_no": 117, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1767120361328, "t": 532.8250122070312, "r": 311.7160949707031, "b": 542.2582397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9393132328987122, "cells": [{"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-21 View definition and user query"}, {"label": "picture", "id": 7, "page_no": 117, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.61915588378906, "t": 262.3319396972656, "r": 491.90362548828125, "b": 529.945556640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9785625338554382, "cells": [{"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 117, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45819091796875, "t": 754.2963256835938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219294190406799, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "102"}, {"label": "page_footer", "id": 1, "page_no": 117, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59468078613281, "t": 754.6023559570312, "r": 339.92059326171875, "b": 764.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9517812728881836, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 118, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.6492004394531, "t": 754.8782348632812, "r": 517.96918, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9510338306427002, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1799926757812, "t": 754.2610473632812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9243813157081604, "cells": [{"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9568634033203, "t": 70.61416625976562, "r": 519.47528, "b": 93.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9543677568435669, "cells": [{"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.89744567871094, "t": 390.0194091796875, "r": 291.39215087890625, "b": 399.5681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9462981820106506, "cells": [{"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.23944091796875, "t": 418.5478515625, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}, "confidence": 0.9655659198760986, "cells": [{"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8983154296875, "t": 444.7919921875, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}, "confidence": 0.982417643070221, "cells": [{"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.05838012695312, "t": 490.664794921875, "r": 547.28455, "b": 525.02054, "coord_origin": "TOPLEFT"}, "confidence": 0.9831634163856506, "cells": [{"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.96612548828125, "t": 536.773193359375, "r": 547.27246, "b": 571.03972, "coord_origin": "TOPLEFT"}, "confidence": 0.9812561869621277, "cells": [{"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.03353881835938, "t": 582.82958984375, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}, "confidence": 0.9185956120491028, "cells": [{"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 136.65509033203125, "t": 600.0938720703125, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}, "confidence": 0.708869218826294, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 151.20018, "t": 617.95531, "r": 547.25555, "b": 674.72928, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 136.2811279296875, "t": 106.85755920410156, "r": 508.5420227050781, "b": 388.0796203613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9733899235725403, "cells": [{"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 118, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6492004394531, "t": 754.8782348632812, "r": 517.96918, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9510338306427002, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 118, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1799926757812, "t": 754.2610473632812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9243813157081604, "cells": [{"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "103"}, {"label": "text", "id": 2, "page_no": 118, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9568634033203, "t": 70.61416625976562, "r": 519.47528, "b": 93.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9543677568435669, "cells": [{"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22."}, {"label": "caption", "id": 3, "page_no": 118, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.89744567871094, "t": 390.0194091796875, "r": 291.39215087890625, "b": 399.5681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9462981820106506, "cells": [{"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-22 Query rewrite with RCAC"}, {"label": "section_header", "id": 4, "page_no": 118, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.23944091796875, "t": 418.5478515625, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}, "confidence": 0.9655659198760986, "cells": [{"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.2 Materialized query tables"}, {"label": "text", "id": 5, "page_no": 118, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8983154296875, "t": 444.7919921875, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}, "confidence": 0.982417643070221, "cells": [{"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}]}, "text": "When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data."}, {"label": "text", "id": 6, "page_no": 118, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.05838012695312, "t": 490.664794921875, "r": 547.28455, "b": 525.02054, "coord_origin": "TOPLEFT"}, "confidence": 0.9831634163856506, "cells": [{"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}]}, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried."}, {"label": "text", "id": 7, "page_no": 118, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.96612548828125, "t": 536.773193359375, "r": 547.27246, "b": 571.03972, "coord_origin": "TOPLEFT"}, "confidence": 0.9812561869621277, "cells": [{"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}]}, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks."}, {"label": "text", "id": 8, "page_no": 118, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.03353881835938, "t": 582.82958984375, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}, "confidence": 0.9185956120491028, "cells": [{"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}]}, "text": "The following example illustrates this scenario:"}, {"label": "list_item", "id": 9, "page_no": 118, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.65509033203125, "t": 600.0938720703125, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}, "confidence": 0.708869218826294, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create schema and tables:"}, {"label": "text", "id": 10, "page_no": 118, "cluster": {"id": 10, "label": "text", "bbox": {"l": 151.20018, "t": 617.95531, "r": 547.25555, "b": 674.72928, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);"}, {"label": "picture", "id": 11, "page_no": 118, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.2811279296875, "t": 106.85755920410156, "r": 508.5420227050781, "b": 388.0796203613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9733899235725403, "cells": [{"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 118, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9568634033203, "t": 70.61416625976562, "r": 519.47528, "b": 93.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9543677568435669, "cells": [{"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22."}, {"label": "caption", "id": 3, "page_no": 118, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.89744567871094, "t": 390.0194091796875, "r": 291.39215087890625, "b": 399.5681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9462981820106506, "cells": [{"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-22 Query rewrite with RCAC"}, {"label": "section_header", "id": 4, "page_no": 118, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.23944091796875, "t": 418.5478515625, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}, "confidence": 0.9655659198760986, "cells": [{"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.2 Materialized query tables"}, {"label": "text", "id": 5, "page_no": 118, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8983154296875, "t": 444.7919921875, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}, "confidence": 0.982417643070221, "cells": [{"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}]}, "text": "When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data."}, {"label": "text", "id": 6, "page_no": 118, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.05838012695312, "t": 490.664794921875, "r": 547.28455, "b": 525.02054, "coord_origin": "TOPLEFT"}, "confidence": 0.9831634163856506, "cells": [{"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}]}, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried."}, {"label": "text", "id": 7, "page_no": 118, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.96612548828125, "t": 536.773193359375, "r": 547.27246, "b": 571.03972, "coord_origin": "TOPLEFT"}, "confidence": 0.9812561869621277, "cells": [{"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}]}, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks."}, {"label": "text", "id": 8, "page_no": 118, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.03353881835938, "t": 582.82958984375, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}, "confidence": 0.9185956120491028, "cells": [{"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}]}, "text": "The following example illustrates this scenario:"}, {"label": "list_item", "id": 9, "page_no": 118, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.65509033203125, "t": 600.0938720703125, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}, "confidence": 0.708869218826294, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create schema and tables:"}, {"label": "text", "id": 10, "page_no": 118, "cluster": {"id": 10, "label": "text", "bbox": {"l": 151.20018, "t": 617.95531, "r": 547.25555, "b": 674.72928, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);"}, {"label": "picture", "id": 11, "page_no": 118, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.2811279296875, "t": 106.85755920410156, "r": 508.5420227050781, "b": 388.0796203613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9733899235725403, "cells": [{"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 118, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6492004394531, "t": 754.8782348632812, "r": 517.96918, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9510338306427002, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 118, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1799926757812, "t": 754.2610473632812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9243813157081604, "cells": [{"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "103"}]}}, {"page_no": 119, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.42345428466797, "t": 754.3500366210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9201931953430176, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.57719421386719, "t": 754.6668090820312, "r": 339.839599609375, "b": 764.0997924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948181688785553, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.87754821777344, "t": 70.59613037109375, "r": 545.86609, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8737232089042664, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 149.48439025878906, "t": 98.91398620605469, "r": 547.19574, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.7315705418586731, "cells": [{"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.09523010253906, "t": 200.49166870117188, "r": 362.02145, "b": 210.96173095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7428785562515259, "cells": [{"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 149.7567138671875, "t": 217.29092407226562, "r": 545.99457, "b": 323.42908, "coord_origin": "TOPLEFT"}, "confidence": 0.7042393684387207, "cells": [{"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.95851135253906, "t": 330.4781494140625, "r": 354.34628, "b": 341.0965881347656, "coord_origin": "TOPLEFT"}, "confidence": 0.7467354536056519, "cells": [{"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 150.7456512451172, "t": 348.16949462890625, "r": 416.03656, "b": 370.27532958984375, "coord_origin": "TOPLEFT"}, "confidence": 0.698642373085022, "cells": [{"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.36888122558594, "t": 376.5781555175781, "r": 547.19977, "b": 399.09686279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8833680748939514, "cells": [{"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 150.5345001220703, "t": 405.3749084472656, "r": 401.03677, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.7805010676383972, "cells": [{"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.50941467285156, "t": 434.431884765625, "r": 385.90356, "b": 444.9353942871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7377039194107056, "cells": [{"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 150.02435302734375, "t": 451.1933288574219, "r": 500.9953300000001, "b": 545.42557, "coord_origin": "TOPLEFT"}, "confidence": 0.8073603510856628, "cells": [{"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 136.33966064453125, "t": 552.5261840820312, "r": 452.10781999999995, "b": 563.1635131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.7632867097854614, "cells": [{"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.35263061523438, "t": 569.8162841796875, "r": 535.97479, "b": 592.6467895507812, "coord_origin": "TOPLEFT"}, "confidence": 0.8625366687774658, "cells": [{"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 150.33642578125, "t": 598.5096435546875, "r": 502.06903, "b": 620.71321, "coord_origin": "TOPLEFT"}, "confidence": 0.9041882157325745, "cells": [{"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 150.63597106933594, "t": 628.1326293945312, "r": 401.03677, "b": 649.8663940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.8543345332145691, "cells": [{"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 119, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42345428466797, "t": 754.3500366210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9201931953430176, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "104"}, {"label": "page_footer", "id": 1, "page_no": 119, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57719421386719, "t": 754.6668090820312, "r": 339.839599609375, "b": 764.0997924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948181688785553, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 119, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87754821777344, "t": 70.59613037109375, "r": 545.86609, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8737232089042664, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Create a row permission that allows the employees to see only rows from the region they work in:"}, {"label": "code", "id": 3, "page_no": 119, "cluster": {"id": 3, "label": "code", "bbox": {"l": 149.48439025878906, "t": 98.91398620605469, "r": 547.19574, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.7315705418586731, "cells": [{"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}]}, "text": "/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE;"}, {"label": "list_item", "id": 4, "page_no": 119, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.09523010253906, "t": 200.49166870117188, "r": 362.02145, "b": 210.96173095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7428785562515259, "cells": [{"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}]}, "text": "3. Create an MQT to summarize sales by location:"}, {"label": "text", "id": 5, "page_no": 119, "cluster": {"id": 5, "label": "text", "bbox": {"l": 149.7567138671875, "t": 217.29092407226562, "r": 545.99457, "b": 323.42908, "coord_origin": "TOPLEFT"}, "confidence": 0.7042393684387207, "cells": [{"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}]}, "text": "-- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 6, "page_no": 119, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.95851135253906, "t": 330.4781494140625, "r": 354.34628, "b": 341.0965881347656, "coord_origin": "TOPLEFT"}, "confidence": 0.7467354536056519, "cells": [{"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4. Populate the MQT (permission is not applied):"}, {"label": "text", "id": 7, "page_no": 119, "cluster": {"id": 7, "label": "text", "bbox": {"l": 150.7456512451172, "t": 348.16949462890625, "r": 416.03656, "b": 370.27532958984375, "coord_origin": "TOPLEFT"}, "confidence": 0.698642373085022, "cells": [{"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT"}, {"label": "text", "id": 8, "page_no": 119, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.36888122558594, "t": 376.5781555175781, "r": 547.19977, "b": 399.09686279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8833680748939514, "cells": [{"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 9, "page_no": 119, "cluster": {"id": 9, "label": "text", "bbox": {"l": 150.5345001220703, "t": 405.3749084472656, "r": 401.03677, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.7805010676383972, "cells": [{"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}, {"label": "list_item", "id": 10, "page_no": 119, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.50941467285156, "t": 434.431884765625, "r": 385.90356, "b": 444.9353942871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7377039194107056, "cells": [{"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an MQT to summarize by region and location:"}, {"label": "text", "id": 11, "page_no": 119, "cluster": {"id": 11, "label": "text", "bbox": {"l": 150.02435302734375, "t": 451.1933288574219, "r": 500.9953300000001, "b": 545.42557, "coord_origin": "TOPLEFT"}, "confidence": 0.8073603510856628, "cells": [{"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}]}, "text": "-- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 12, "page_no": 119, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 136.33966064453125, "t": 552.5261840820312, "r": 452.10781999999995, "b": 563.1635131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.7632867097854614, "cells": [{"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}]}, "text": "6. Populate the Region_location_Sales_MQT (permission not applied):"}, {"label": "text", "id": 13, "page_no": 119, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35263061523438, "t": 569.8162841796875, "r": 535.97479, "b": 592.6467895507812, "coord_origin": "TOPLEFT"}, "confidence": 0.8625366687774658, "cells": [{"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT"}, {"label": "text", "id": 14, "page_no": 119, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.33642578125, "t": 598.5096435546875, "r": 502.06903, "b": 620.71321, "coord_origin": "TOPLEFT"}, "confidence": 0.9041882157325745, "cells": [{"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}]}, "text": "The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 15, "page_no": 119, "cluster": {"id": 15, "label": "text", "bbox": {"l": 150.63597106933594, "t": 628.1326293945312, "r": 401.03677, "b": 649.8663940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.8543345332145691, "cells": [{"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}], "body": [{"label": "list_item", "id": 2, "page_no": 119, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87754821777344, "t": 70.59613037109375, "r": 545.86609, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8737232089042664, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Create a row permission that allows the employees to see only rows from the region they work in:"}, {"label": "code", "id": 3, "page_no": 119, "cluster": {"id": 3, "label": "code", "bbox": {"l": 149.48439025878906, "t": 98.91398620605469, "r": 547.19574, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.7315705418586731, "cells": [{"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}]}, "text": "/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE;"}, {"label": "list_item", "id": 4, "page_no": 119, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.09523010253906, "t": 200.49166870117188, "r": 362.02145, "b": 210.96173095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7428785562515259, "cells": [{"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}]}, "text": "3. Create an MQT to summarize sales by location:"}, {"label": "text", "id": 5, "page_no": 119, "cluster": {"id": 5, "label": "text", "bbox": {"l": 149.7567138671875, "t": 217.29092407226562, "r": 545.99457, "b": 323.42908, "coord_origin": "TOPLEFT"}, "confidence": 0.7042393684387207, "cells": [{"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}]}, "text": "-- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 6, "page_no": 119, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.95851135253906, "t": 330.4781494140625, "r": 354.34628, "b": 341.0965881347656, "coord_origin": "TOPLEFT"}, "confidence": 0.7467354536056519, "cells": [{"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4. Populate the MQT (permission is not applied):"}, {"label": "text", "id": 7, "page_no": 119, "cluster": {"id": 7, "label": "text", "bbox": {"l": 150.7456512451172, "t": 348.16949462890625, "r": 416.03656, "b": 370.27532958984375, "coord_origin": "TOPLEFT"}, "confidence": 0.698642373085022, "cells": [{"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT"}, {"label": "text", "id": 8, "page_no": 119, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.36888122558594, "t": 376.5781555175781, "r": 547.19977, "b": 399.09686279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8833680748939514, "cells": [{"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 9, "page_no": 119, "cluster": {"id": 9, "label": "text", "bbox": {"l": 150.5345001220703, "t": 405.3749084472656, "r": 401.03677, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.7805010676383972, "cells": [{"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}, {"label": "list_item", "id": 10, "page_no": 119, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.50941467285156, "t": 434.431884765625, "r": 385.90356, "b": 444.9353942871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7377039194107056, "cells": [{"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an MQT to summarize by region and location:"}, {"label": "text", "id": 11, "page_no": 119, "cluster": {"id": 11, "label": "text", "bbox": {"l": 150.02435302734375, "t": 451.1933288574219, "r": 500.9953300000001, "b": 545.42557, "coord_origin": "TOPLEFT"}, "confidence": 0.8073603510856628, "cells": [{"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}]}, "text": "-- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 12, "page_no": 119, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 136.33966064453125, "t": 552.5261840820312, "r": 452.10781999999995, "b": 563.1635131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.7632867097854614, "cells": [{"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}]}, "text": "6. Populate the Region_location_Sales_MQT (permission not applied):"}, {"label": "text", "id": 13, "page_no": 119, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35263061523438, "t": 569.8162841796875, "r": 535.97479, "b": 592.6467895507812, "coord_origin": "TOPLEFT"}, "confidence": 0.8625366687774658, "cells": [{"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT"}, {"label": "text", "id": 14, "page_no": 119, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.33642578125, "t": 598.5096435546875, "r": 502.06903, "b": 620.71321, "coord_origin": "TOPLEFT"}, "confidence": 0.9041882157325745, "cells": [{"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}]}, "text": "The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 15, "page_no": 119, "cluster": {"id": 15, "label": "text", "bbox": {"l": 150.63597106933594, "t": 628.1326293945312, "r": 401.03677, "b": 649.8663940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.8543345332145691, "cells": [{"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 119, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42345428466797, "t": 754.3500366210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9201931953430176, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "104"}, {"label": "page_footer", "id": 1, "page_no": 119, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57719421386719, "t": 754.6668090820312, "r": 339.839599609375, "b": 764.0997924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948181688785553, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 120, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.60284423828125, "t": 754.8819580078125, "r": 517.96918, "b": 763.8931884765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508994817733765, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1432495117188, "t": 754.2498779296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262385368347168, "cells": [{"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.60304260253906, "t": 70.77579498291016, "r": 376.07117, "b": 80.92020416259766, "coord_origin": "TOPLEFT"}, "confidence": 0.9324866533279419, "cells": [{"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.650634765625, "t": 87.60993957519531, "r": 547.27185, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9790242910385132, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.53536987304688, "t": 128.6663360595703, "r": 547.31061, "b": 175.40707397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9846358299255371, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.59909057617188, "t": 181.56338500976562, "r": 539.19519, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9713051319122314, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.1431655883789, "t": 223.16065979003906, "r": 184.48561, "b": 236.4196014404297, "coord_origin": "TOPLEFT"}, "confidence": 0.9630040526390076, "cells": [{"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.05111694335938, "t": 249.4633331298828, "r": 527.12238, "b": 271.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9792811870574951, "cells": [{"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.7935791015625, "t": 283.475830078125, "r": 547.15894, "b": 341.72037, "coord_origin": "TOPLEFT"}, "confidence": 0.9867231249809265, "cells": [{"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.94505310058594, "t": 354.0857238769531, "r": 547.38397, "b": 388.08538818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863255620002747, "cells": [{"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.35859680175781, "t": 415.6083068847656, "r": 436.9425, "b": 431.4162902832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9681130051612854, "cells": [{"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.86106872558594, "t": 447.5397033691406, "r": 547.32916, "b": 542.3749389648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9881693124771118, "cells": [{"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.9717254638672, "t": 553.3796997070312, "r": 547.25256, "b": 611.71921, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.7317657470703, "t": 624.3082885742188, "r": 547.28448, "b": 717.9722900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9876141548156738, "cells": [{"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 120, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.60284423828125, "t": 754.8819580078125, "r": 517.96918, "b": 763.8931884765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508994817733765, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 120, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1432495117188, "t": 754.2498779296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262385368347168, "cells": [{"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "105"}, {"label": "text", "id": 2, "page_no": 120, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.60304260253906, "t": 70.77579498291016, "r": 376.07117, "b": 80.92020416259766, "coord_origin": "TOPLEFT"}, "confidence": 0.9324866533279419, "cells": [{"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "This example has the following additional implications:"}, {"label": "list_item", "id": 3, "page_no": 120, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.650634765625, "t": 87.60993957519531, "r": 547.27185, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9790242910385132, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables."}, {"label": "list_item", "id": 4, "page_no": 120, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.53536987304688, "t": 128.6663360595703, "r": 547.31061, "b": 175.40707397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9846358299255371, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results."}, {"label": "list_item", "id": 5, "page_no": 120, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.59909057617188, "t": 181.56338500976562, "r": 539.19519, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9713051319122314, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT."}, {"label": "section_header", "id": 6, "page_no": 120, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.1431655883789, "t": 223.16065979003906, "r": 184.48561, "b": 236.4196014404297, "coord_origin": "TOPLEFT"}, "confidence": 0.9630040526390076, "cells": [{"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.3 Query rewrite"}, {"label": "text", "id": 7, "page_no": 120, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.05111694335938, "t": 249.4633331298828, "r": 527.12238, "b": 271.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9792811870574951, "cells": [{"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}]}, "text": "Query rewrite is a technique that the optimizer can use to change the original request to improve performance."}, {"label": "text", "id": 8, "page_no": 120, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.7935791015625, "t": 283.475830078125, "r": 547.15894, "b": 341.72037, "coord_origin": "TOPLEFT"}, "confidence": 0.9867231249809265, "cells": [{"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1."}, {"label": "text", "id": 9, "page_no": 120, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94505310058594, "t": 354.0857238769531, "r": 547.38397, "b": 388.08538818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863255620002747, "cells": [{"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}]}, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC."}, {"label": "section_header", "id": 10, "page_no": 120, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.35859680175781, "t": 415.6083068847656, "r": 436.9425, "b": 431.4162902832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9681130051612854, "cells": [{"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.6 RCAC effects on performance and scalability"}, {"label": "text", "id": 11, "page_no": 120, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.86106872558594, "t": 447.5397033691406, "r": 547.32916, "b": 542.3749389648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9881693124771118, "cells": [{"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}]}, "text": "As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user\u2019s query, much like a query referencing a view."}, {"label": "text", "id": 12, "page_no": 120, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.9717254638672, "t": 553.3796997070312, "r": 547.25256, "b": 611.71921, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}]}, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user\u2019s permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned."}, {"label": "text", "id": 13, "page_no": 120, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7317657470703, "t": 624.3082885742188, "r": 547.28448, "b": 717.9722900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9876141548156738, "cells": [{"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}]}, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original \u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot found\u201d if the user is not entitled to any of the records."}], "body": [{"label": "text", "id": 2, "page_no": 120, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.60304260253906, "t": 70.77579498291016, "r": 376.07117, "b": 80.92020416259766, "coord_origin": "TOPLEFT"}, "confidence": 0.9324866533279419, "cells": [{"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "This example has the following additional implications:"}, {"label": "list_item", "id": 3, "page_no": 120, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.650634765625, "t": 87.60993957519531, "r": 547.27185, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9790242910385132, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables."}, {"label": "list_item", "id": 4, "page_no": 120, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.53536987304688, "t": 128.6663360595703, "r": 547.31061, "b": 175.40707397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9846358299255371, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results."}, {"label": "list_item", "id": 5, "page_no": 120, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.59909057617188, "t": 181.56338500976562, "r": 539.19519, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9713051319122314, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT."}, {"label": "section_header", "id": 6, "page_no": 120, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.1431655883789, "t": 223.16065979003906, "r": 184.48561, "b": 236.4196014404297, "coord_origin": "TOPLEFT"}, "confidence": 0.9630040526390076, "cells": [{"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.3 Query rewrite"}, {"label": "text", "id": 7, "page_no": 120, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.05111694335938, "t": 249.4633331298828, "r": 527.12238, "b": 271.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9792811870574951, "cells": [{"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}]}, "text": "Query rewrite is a technique that the optimizer can use to change the original request to improve performance."}, {"label": "text", "id": 8, "page_no": 120, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.7935791015625, "t": 283.475830078125, "r": 547.15894, "b": 341.72037, "coord_origin": "TOPLEFT"}, "confidence": 0.9867231249809265, "cells": [{"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1."}, {"label": "text", "id": 9, "page_no": 120, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94505310058594, "t": 354.0857238769531, "r": 547.38397, "b": 388.08538818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863255620002747, "cells": [{"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}]}, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC."}, {"label": "section_header", "id": 10, "page_no": 120, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.35859680175781, "t": 415.6083068847656, "r": 436.9425, "b": 431.4162902832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9681130051612854, "cells": [{"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.6 RCAC effects on performance and scalability"}, {"label": "text", "id": 11, "page_no": 120, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.86106872558594, "t": 447.5397033691406, "r": 547.32916, "b": 542.3749389648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9881693124771118, "cells": [{"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}]}, "text": "As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user\u2019s query, much like a query referencing a view."}, {"label": "text", "id": 12, "page_no": 120, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.9717254638672, "t": 553.3796997070312, "r": 547.25256, "b": 611.71921, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}]}, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user\u2019s permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned."}, {"label": "text", "id": 13, "page_no": 120, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7317657470703, "t": 624.3082885742188, "r": 547.28448, "b": 717.9722900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9876141548156738, "cells": [{"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}]}, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original \u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot found\u201d if the user is not entitled to any of the records."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 120, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.60284423828125, "t": 754.8819580078125, "r": 517.96918, "b": 763.8931884765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508994817733765, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 120, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1432495117188, "t": 754.2498779296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262385368347168, "cells": [{"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "105"}]}}, {"page_no": 121, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.41461944580078, "t": 754.2803344726562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9247628450393677, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.62214660644531, "t": 754.58251953125, "r": 339.8680725097656, "b": 764.0300903320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9530835747718811, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.8849639892578, "t": 70.34988403320312, "r": 543.5155, "b": 116.99058532714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9810242652893066, "cells": [{"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.106201171875, "t": 403.9275817871094, "r": 333.33013916015625, "b": 413.6200256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.9444288611412048, "cells": [{"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 136.19158935546875, "t": 131.57861328125, "r": 506.083740234375, "b": 400.9339294433594, "coord_origin": "TOPLEFT"}, "confidence": 0.9722803235054016, "cells": [{"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 121, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41461944580078, "t": 754.2803344726562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9247628450393677, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "106"}, {"label": "page_footer", "id": 1, "page_no": 121, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.62214660644531, "t": 754.58251953125, "r": 339.8680725097656, "b": 764.0300903320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9530835747718811, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 121, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.8849639892578, "t": 70.34988403320312, "r": 543.5155, "b": 116.99058532714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9810242652893066, "cells": [{"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23."}, {"label": "caption", "id": 3, "page_no": 121, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.106201171875, "t": 403.9275817871094, "r": 333.33013916015625, "b": 413.6200256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.9444288611412048, "cells": [{"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-23 Native record access with no RCAC"}, {"label": "picture", "id": 4, "page_no": 121, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.19158935546875, "t": 131.57861328125, "r": 506.083740234375, "b": 400.9339294433594, "coord_origin": "TOPLEFT"}, "confidence": 0.9722803235054016, "cells": [{"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 121, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.8849639892578, "t": 70.34988403320312, "r": 543.5155, "b": 116.99058532714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9810242652893066, "cells": [{"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23."}, {"label": "caption", "id": 3, "page_no": 121, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.106201171875, "t": 403.9275817871094, "r": 333.33013916015625, "b": 413.6200256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.9444288611412048, "cells": [{"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-23 Native record access with no RCAC"}, {"label": "picture", "id": 4, "page_no": 121, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.19158935546875, "t": 131.57861328125, "r": 506.083740234375, "b": 400.9339294433594, "coord_origin": "TOPLEFT"}, "confidence": 0.9722803235054016, "cells": [{"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 121, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41461944580078, "t": 754.2803344726562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9247628450393677, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "106"}, {"label": "page_footer", "id": 1, "page_no": 121, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.62214660644531, "t": 754.58251953125, "r": 339.8680725097656, "b": 764.0300903320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9530835747718811, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 122, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.56109619140625, "t": 754.820068359375, "r": 517.96918, "b": 763.9142456054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9531034231185913, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.158935546875, "t": 754.1790161132812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219108819961548, "cells": [{"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.06326293945312, "t": 70.65892791748047, "r": 547.29565, "b": 116.73127746582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9824259281158447, "cells": [{"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.92271423339844, "t": 407.9793701171875, "r": 341.2294616699219, "b": 417.6308898925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9458103775978088, "cells": [{"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.81785583496094, "t": 433.958251953125, "r": 525.86151, "b": 456.21856689453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9756483435630798, "cells": [{"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.4524917602539, "t": 483.275146484375, "r": 510.04889, "b": 500.006103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9643033742904663, "cells": [{"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.74249267578125, "t": 516.0097045898438, "r": 547.24969, "b": 549.92133, "coord_origin": "TOPLEFT"}, "confidence": 0.9808005094528198, "cells": [{"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.18580627441406, "t": 561.9881591796875, "r": 283.20502, "b": 572.285888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.8252715468406677, "cells": [{"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5818634033203, "t": 578.6119995117188, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}, "confidence": 0.9519445896148682, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.1683349609375, "t": 595.9595336914062, "r": 547.40094, "b": 617.96007, "coord_origin": "TOPLEFT"}, "confidence": 0.9689837098121643, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.33261108398438, "t": 624.4862670898438, "r": 546.01855, "b": 646.93968, "coord_origin": "TOPLEFT"}, "confidence": 0.972244918346405, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.21334838867188, "t": 653.9972534179688, "r": 546.81927, "b": 664.3414916992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9548404812812805, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 151.15476989746094, "t": 670.9539794921875, "r": 547.16492, "b": 704.958679, "coord_origin": "TOPLEFT"}, "confidence": 0.9793244004249573, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.30223083496094, "t": 711.9512939453125, "r": 545.11029, "b": 734.1187133789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9760500192642212, "cells": [{"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "picture", "bbox": {"l": 135.89947509765625, "t": 131.36407470703125, "r": 513.2355346679688, "b": 404.8336486816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9828073978424072, "cells": [{"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 122, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.56109619140625, "t": 754.820068359375, "r": 517.96918, "b": 763.9142456054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9531034231185913, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 122, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.158935546875, "t": 754.1790161132812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219108819961548, "cells": [{"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "107"}, {"label": "text", "id": 2, "page_no": 122, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.06326293945312, "t": 70.65892791748047, "r": 547.29565, "b": 116.73127746582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9824259281158447, "cells": [{"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24."}, {"label": "caption", "id": 3, "page_no": 122, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.92271423339844, "t": 407.9793701171875, "r": 341.2294616699219, "b": 417.6308898925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9458103775978088, "cells": [{"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-24 Native record level access with RCAC"}, {"label": "text", "id": 4, "page_no": 122, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.81785583496094, "t": 433.958251953125, "r": 525.86151, "b": 456.21856689453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9756483435630798, "cells": [{"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}]}, "text": "After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended."}, {"label": "section_header", "id": 5, "page_no": 122, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.4524917602539, "t": 483.275146484375, "r": 510.04889, "b": 500.006103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9643033742904663, "cells": [{"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}]}, "text": "6.7 Exclusive lock to implement RCAC (availability issues)"}, {"label": "text", "id": 6, "page_no": 122, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.74249267578125, "t": 516.0097045898438, "r": 547.24969, "b": 549.92133, "coord_origin": "TOPLEFT"}, "confidence": 0.9808005094528198, "cells": [{"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}]}, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC."}, {"label": "text", "id": 7, "page_no": 122, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.18580627441406, "t": 561.9881591796875, "r": 283.20502, "b": 572.285888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.8252715468406677, "cells": [{"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following scenarios:"}, {"label": "list_item", "id": 8, "page_no": 122, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5818634033203, "t": 578.6119995117188, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}, "confidence": 0.9519445896148682, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table:"}, {"label": "list_item", "id": 9, "page_no": 122, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.1683349609375, "t": 595.9595336914062, "r": 547.40094, "b": 617.96007, "coord_origin": "TOPLEFT"}, "confidence": 0.9689837098121643, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data."}, {"label": "list_item", "id": 10, "page_no": 122, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.33261108398438, "t": 624.4862670898438, "r": 546.01855, "b": 646.93968, "coord_origin": "TOPLEFT"}, "confidence": 0.972244918346405, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data."}, {"label": "list_item", "id": 11, "page_no": 122, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.21334838867188, "t": 653.9972534179688, "r": 546.81927, "b": 664.3414916992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9548404812812805, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data."}, {"label": "list_item", "id": 12, "page_no": 122, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.15476989746094, "t": 670.9539794921875, "r": 547.16492, "b": 704.958679, "coord_origin": "TOPLEFT"}, "confidence": 0.9793244004249573, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data."}, {"label": "text", "id": 13, "page_no": 122, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.30223083496094, "t": 711.9512939453125, "r": 545.11029, "b": 734.1187133789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9760500192642212, "cells": [{"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}]}, "text": "The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table."}, {"label": "picture", "id": 14, "page_no": 122, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 135.89947509765625, "t": 131.36407470703125, "r": 513.2355346679688, "b": 404.8336486816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9828073978424072, "cells": [{"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 122, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.06326293945312, "t": 70.65892791748047, "r": 547.29565, "b": 116.73127746582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9824259281158447, "cells": [{"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24."}, {"label": "caption", "id": 3, "page_no": 122, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.92271423339844, "t": 407.9793701171875, "r": 341.2294616699219, "b": 417.6308898925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9458103775978088, "cells": [{"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-24 Native record level access with RCAC"}, {"label": "text", "id": 4, "page_no": 122, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.81785583496094, "t": 433.958251953125, "r": 525.86151, "b": 456.21856689453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9756483435630798, "cells": [{"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}]}, "text": "After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended."}, {"label": "section_header", "id": 5, "page_no": 122, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.4524917602539, "t": 483.275146484375, "r": 510.04889, "b": 500.006103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9643033742904663, "cells": [{"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}]}, "text": "6.7 Exclusive lock to implement RCAC (availability issues)"}, {"label": "text", "id": 6, "page_no": 122, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.74249267578125, "t": 516.0097045898438, "r": 547.24969, "b": 549.92133, "coord_origin": "TOPLEFT"}, "confidence": 0.9808005094528198, "cells": [{"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}]}, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC."}, {"label": "text", "id": 7, "page_no": 122, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.18580627441406, "t": 561.9881591796875, "r": 283.20502, "b": 572.285888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.8252715468406677, "cells": [{"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following scenarios:"}, {"label": "list_item", "id": 8, "page_no": 122, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5818634033203, "t": 578.6119995117188, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}, "confidence": 0.9519445896148682, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table:"}, {"label": "list_item", "id": 9, "page_no": 122, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.1683349609375, "t": 595.9595336914062, "r": 547.40094, "b": 617.96007, "coord_origin": "TOPLEFT"}, "confidence": 0.9689837098121643, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data."}, {"label": "list_item", "id": 10, "page_no": 122, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.33261108398438, "t": 624.4862670898438, "r": 546.01855, "b": 646.93968, "coord_origin": "TOPLEFT"}, "confidence": 0.972244918346405, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data."}, {"label": "list_item", "id": 11, "page_no": 122, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.21334838867188, "t": 653.9972534179688, "r": 546.81927, "b": 664.3414916992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9548404812812805, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data."}, {"label": "list_item", "id": 12, "page_no": 122, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.15476989746094, "t": 670.9539794921875, "r": 547.16492, "b": 704.958679, "coord_origin": "TOPLEFT"}, "confidence": 0.9793244004249573, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data."}, {"label": "text", "id": 13, "page_no": 122, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.30223083496094, "t": 711.9512939453125, "r": 545.11029, "b": 734.1187133789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9760500192642212, "cells": [{"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}]}, "text": "The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table."}, {"label": "picture", "id": 14, "page_no": 122, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 135.89947509765625, "t": 131.36407470703125, "r": 513.2355346679688, "b": 404.8336486816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9828073978424072, "cells": [{"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 122, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.56109619140625, "t": 754.820068359375, "r": 517.96918, "b": 763.9142456054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9531034231185913, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 122, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.158935546875, "t": 754.1790161132812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219108819961548, "cells": [{"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "107"}]}}, {"page_no": 123, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.37716674804688, "t": 754.4281616210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9158027768135071, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.70913696289062, "t": 754.5992431640625, "r": 339.81958, "b": 764.000732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9243242740631104, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.47494506835938, "t": 70.6369857788086, "r": 547.22571, "b": 92.73275756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9781896471977234, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.47486877441406, "t": 99.36483764648438, "r": 547.35034, "b": 145.75274658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9809828400611877, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 150.78724670410156, "t": 152.71084594726562, "r": 451.01605, "b": 162.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7630197405815125, "cells": [{"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 150.4237060546875, "t": 169.4068603515625, "r": 532.72491, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9614198207855225, "cells": [{"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.3337173461914, "t": 230.51942443847656, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9671851992607117, "cells": [{"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.83189392089844, "t": 264.0419616699219, "r": 547.30225, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9809823036193848, "cells": [{"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.41940307617188, "t": 309.37554931640625, "r": 547.19684, "b": 331.70084, "coord_origin": "TOPLEFT"}, "confidence": 0.9635169506072998, "cells": [{"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.9666290283203, "t": 360.73516845703125, "r": 533.77673, "b": 382.9076232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.973406195640564, "cells": [{"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.8269805908203, "t": 394.7623291015625, "r": 532.65228, "b": 417.0003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9747862815856934, "cells": [{"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.09215545654297, "t": 436.41485595703125, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9572468996047974, "cells": [{"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.16067504882812, "t": 462.88629150390625, "r": 416.49878, "b": 472.83758544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9524036049842834, "cells": [{"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.7001190185547, "t": 484.599365234375, "r": 547.25665, "b": 542.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9841123223304749, "cells": [{"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 136.0422821044922, "t": 554.6649780273438, "r": 547.2804, "b": 588.73972, "coord_origin": "TOPLEFT"}, "confidence": 0.9792662262916565, "cells": [{"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "caption", "bbox": {"l": 64.23851013183594, "t": 600.50146484375, "r": 277.07000732421875, "b": 610.2802124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.8750464916229248, "cells": [{"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "code", "bbox": {"l": 64.16464233398438, "t": 618.1095581054688, "r": 414.59515, "b": 736.5281982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.8303214311599731, "cells": [{"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 123, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37716674804688, "t": 754.4281616210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9158027768135071, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "108"}, {"label": "page_footer", "id": 1, "page_no": 123, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.70913696289062, "t": 754.5992431640625, "r": 339.81958, "b": 764.000732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9243242740631104, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 123, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.47494506835938, "t": 70.6369857788086, "r": 547.22571, "b": 92.73275756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9781896471977234, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table."}, {"label": "list_item", "id": 3, "page_no": 123, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.47486877441406, "t": 99.36483764648438, "r": 547.35034, "b": 145.75274658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9809828400611877, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message:"}, {"label": "text", "id": 4, "page_no": 123, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.78724670410156, "t": 152.71084594726562, "r": 451.01605, "b": 162.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7630197405815125, "cells": [{"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions."}, {"label": "text", "id": 5, "page_no": 123, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4237060546875, "t": 169.4068603515625, "r": 532.72491, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9614198207855225, "cells": [{"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission."}, {"label": "section_header", "id": 6, "page_no": 123, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.3337173461914, "t": 230.51942443847656, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9671851992607117, "cells": [{"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "6.8 Avoiding propagation of masked data"}, {"label": "text", "id": 7, "page_no": 123, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83189392089844, "t": 264.0419616699219, "r": 547.30225, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9809823036193848, "cells": [{"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control."}, {"label": "text", "id": 8, "page_no": 123, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.41940307617188, "t": 309.37554931640625, "r": 547.19684, "b": 331.70084, "coord_origin": "TOPLEFT"}, "confidence": 0.9635169506072998, "cells": [{"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error:"}, {"label": "text", "id": 9, "page_no": 123, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2"}, {"label": "text", "id": 10, "page_no": 123, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.9666290283203, "t": 360.73516845703125, "r": 533.77673, "b": 382.9076232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.973406195640564, "cells": [{"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}]}, "text": "The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint."}, {"label": "text", "id": 11, "page_no": 123, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.8269805908203, "t": 394.7623291015625, "r": 532.65228, "b": 417.0003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9747862815856934, "cells": [{"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}]}, "text": "There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger."}, {"label": "section_header", "id": 12, "page_no": 123, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.09215545654297, "t": 436.41485595703125, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9572468996047974, "cells": [{"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.1 Check constraint solution"}, {"label": "text", "id": 13, "page_no": 123, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.16067504882812, "t": 462.88629150390625, "r": 416.49878, "b": 472.83758544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9524036049842834, "cells": [{"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}]}, "text": "One way to prevent this problem is to define a check constraint."}, {"label": "text", "id": 14, "page_no": 123, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.7001190185547, "t": 484.599365234375, "r": 547.25665, "b": 542.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9841123223304749, "cells": [{"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}]}, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements."}, {"label": "text", "id": 15, "page_no": 123, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.0422821044922, "t": 554.6649780273438, "r": 547.2804, "b": 588.73972, "coord_origin": "TOPLEFT"}, "confidence": 0.9792662262916565, "cells": [{"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}]}, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value."}, {"label": "caption", "id": 16, "page_no": 123, "cluster": {"id": 16, "label": "caption", "bbox": {"l": 64.23851013183594, "t": 600.50146484375, "r": 277.07000732421875, "b": 610.2802124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.8750464916229248, "cells": [{"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-4 Check constraint to avoid masked data"}, {"label": "code", "id": 17, "page_no": 123, "cluster": {"id": 17, "label": "code", "bbox": {"l": 64.16464233398438, "t": 618.1095581054688, "r": 414.59515, "b": 736.5281982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.8303214311599731, "cells": [{"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn"}], "body": [{"label": "list_item", "id": 2, "page_no": 123, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.47494506835938, "t": 70.6369857788086, "r": 547.22571, "b": 92.73275756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9781896471977234, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table."}, {"label": "list_item", "id": 3, "page_no": 123, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.47486877441406, "t": 99.36483764648438, "r": 547.35034, "b": 145.75274658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9809828400611877, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message:"}, {"label": "text", "id": 4, "page_no": 123, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.78724670410156, "t": 152.71084594726562, "r": 451.01605, "b": 162.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7630197405815125, "cells": [{"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions."}, {"label": "text", "id": 5, "page_no": 123, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4237060546875, "t": 169.4068603515625, "r": 532.72491, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9614198207855225, "cells": [{"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission."}, {"label": "section_header", "id": 6, "page_no": 123, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.3337173461914, "t": 230.51942443847656, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9671851992607117, "cells": [{"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "6.8 Avoiding propagation of masked data"}, {"label": "text", "id": 7, "page_no": 123, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83189392089844, "t": 264.0419616699219, "r": 547.30225, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9809823036193848, "cells": [{"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control."}, {"label": "text", "id": 8, "page_no": 123, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.41940307617188, "t": 309.37554931640625, "r": 547.19684, "b": 331.70084, "coord_origin": "TOPLEFT"}, "confidence": 0.9635169506072998, "cells": [{"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error:"}, {"label": "text", "id": 9, "page_no": 123, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2"}, {"label": "text", "id": 10, "page_no": 123, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.9666290283203, "t": 360.73516845703125, "r": 533.77673, "b": 382.9076232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.973406195640564, "cells": [{"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}]}, "text": "The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint."}, {"label": "text", "id": 11, "page_no": 123, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.8269805908203, "t": 394.7623291015625, "r": 532.65228, "b": 417.0003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9747862815856934, "cells": [{"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}]}, "text": "There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger."}, {"label": "section_header", "id": 12, "page_no": 123, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.09215545654297, "t": 436.41485595703125, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9572468996047974, "cells": [{"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.1 Check constraint solution"}, {"label": "text", "id": 13, "page_no": 123, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.16067504882812, "t": 462.88629150390625, "r": 416.49878, "b": 472.83758544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9524036049842834, "cells": [{"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}]}, "text": "One way to prevent this problem is to define a check constraint."}, {"label": "text", "id": 14, "page_no": 123, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.7001190185547, "t": 484.599365234375, "r": 547.25665, "b": 542.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9841123223304749, "cells": [{"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}]}, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements."}, {"label": "text", "id": 15, "page_no": 123, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.0422821044922, "t": 554.6649780273438, "r": 547.2804, "b": 588.73972, "coord_origin": "TOPLEFT"}, "confidence": 0.9792662262916565, "cells": [{"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}]}, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value."}, {"label": "caption", "id": 16, "page_no": 123, "cluster": {"id": 16, "label": "caption", "bbox": {"l": 64.23851013183594, "t": 600.50146484375, "r": 277.07000732421875, "b": 610.2802124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.8750464916229248, "cells": [{"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-4 Check constraint to avoid masked data"}, {"label": "code", "id": 17, "page_no": 123, "cluster": {"id": 17, "label": "code", "bbox": {"l": 64.16464233398438, "t": 618.1095581054688, "r": 414.59515, "b": 736.5281982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.8303214311599731, "cells": [{"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 123, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37716674804688, "t": 754.4281616210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9158027768135071, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "108"}, {"label": "page_footer", "id": 1, "page_no": 123, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.70913696289062, "t": 754.5992431640625, "r": 339.81958, "b": 764.000732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9243242740631104, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 124, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.6949157714844, "t": 754.8876342773438, "r": 517.96918, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9537138938903809, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.17626953125, "t": 754.1600341796875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9287368059158325, "cells": [{"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 63.44700622558594, "t": 70.49668884277344, "r": 546.8219604492188, "b": 191.2418975830078, "coord_origin": "TOPLEFT"}, "confidence": 0.8540793061256409, "cells": [{"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.23657989501953, "t": 215.09384155273438, "r": 240.54407, "b": 228.5045623779297, "coord_origin": "TOPLEFT"}, "confidence": 0.9668058753013611, "cells": [{"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.24661254882812, "t": 241.2919464111328, "r": 547.31934, "b": 263.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9730713963508606, "cells": [{"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.40687561035156, "t": 276.0124816894531, "r": 336.7406311035156, "b": 285.537841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.6352336406707764, "cells": [{"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "code", "bbox": {"l": 135.9194793701172, "t": 291.04913330078125, "r": 506.87237548828125, "b": 412.2622375488281, "coord_origin": "TOPLEFT"}, "confidence": 0.7042911648750305, "cells": [{"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.4358139038086, "t": 445.3469543457031, "r": 360.91705, "b": 462.0101318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.968204915523529, "cells": [{"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90432739257812, "t": 477.2076721191406, "r": 547.24677, "b": 536.2446899414062, "coord_origin": "TOPLEFT"}, "confidence": 0.984616219997406, "cells": [{"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.1463851928711, "t": 555.9064331054688, "r": 151.61127, "b": 569.22412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9636334180831909, "cells": [{"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.57107543945312, "t": 582.0809936523438, "r": 547.28851, "b": 627.99658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859280586242676, "cells": [{"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 124, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6949157714844, "t": 754.8876342773438, "r": 517.96918, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9537138938903809, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 124, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.17626953125, "t": 754.1600341796875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9287368059158325, "cells": [{"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "109"}, {"label": "code", "id": 2, "page_no": 124, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.44700622558594, "t": 70.49668884277344, "r": 546.8219604492188, "b": 191.2418975830078, "coord_origin": "TOPLEFT"}, "confidence": 0.8540793061256409, "cells": [{"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value."}, {"label": "section_header", "id": 3, "page_no": 124, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.23657989501953, "t": 215.09384155273438, "r": 240.54407, "b": 228.5045623779297, "coord_origin": "TOPLEFT"}, "confidence": 0.9668058753013611, "cells": [{"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.2 Before trigger solution"}, {"label": "text", "id": 4, "page_no": 124, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.24661254882812, "t": 241.2919464111328, "r": 547.31934, "b": 263.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9730713963508606, "cells": [{"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5."}, {"label": "caption", "id": 5, "page_no": 124, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.40687561035156, "t": 276.0124816894531, "r": 336.7406311035156, "b": 285.537841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.6352336406707764, "cells": [{"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-5 Before trigger to avoid masked data"}, {"label": "code", "id": 6, "page_no": 124, "cluster": {"id": 6, "label": "code", "bbox": {"l": 135.9194793701172, "t": 291.04913330078125, "r": 506.87237548828125, "b": 412.2622375488281, "coord_origin": "TOPLEFT"}, "confidence": 0.7042911648750305, "cells": [{"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 7, "page_no": 124, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.4358139038086, "t": 445.3469543457031, "r": 360.91705, "b": 462.0101318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.968204915523529, "cells": [{"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.9 Triggers and functions (SECURED)"}, {"label": "text", "id": 8, "page_no": 124, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90432739257812, "t": 477.2076721191406, "r": 547.24677, "b": 536.2446899414062, "coord_origin": "TOPLEFT"}, "confidence": 0.984616219997406, "cells": [{"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}]}, "text": "There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see."}, {"label": "section_header", "id": 9, "page_no": 124, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.1463851928711, "t": 555.9064331054688, "r": 151.61127, "b": 569.22412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9636334180831909, "cells": [{"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.1 Triggers"}, {"label": "text", "id": 10, "page_no": 124, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.57107543945312, "t": 582.0809936523438, "r": 547.28851, "b": 627.99658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859280586242676, "cells": [{"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}]}, "text": "Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission."}], "body": [{"label": "code", "id": 2, "page_no": 124, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.44700622558594, "t": 70.49668884277344, "r": 546.8219604492188, "b": 191.2418975830078, "coord_origin": "TOPLEFT"}, "confidence": 0.8540793061256409, "cells": [{"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value."}, {"label": "section_header", "id": 3, "page_no": 124, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.23657989501953, "t": 215.09384155273438, "r": 240.54407, "b": 228.5045623779297, "coord_origin": "TOPLEFT"}, "confidence": 0.9668058753013611, "cells": [{"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.2 Before trigger solution"}, {"label": "text", "id": 4, "page_no": 124, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.24661254882812, "t": 241.2919464111328, "r": 547.31934, "b": 263.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9730713963508606, "cells": [{"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5."}, {"label": "caption", "id": 5, "page_no": 124, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.40687561035156, "t": 276.0124816894531, "r": 336.7406311035156, "b": 285.537841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.6352336406707764, "cells": [{"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-5 Before trigger to avoid masked data"}, {"label": "code", "id": 6, "page_no": 124, "cluster": {"id": 6, "label": "code", "bbox": {"l": 135.9194793701172, "t": 291.04913330078125, "r": 506.87237548828125, "b": 412.2622375488281, "coord_origin": "TOPLEFT"}, "confidence": 0.7042911648750305, "cells": [{"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 7, "page_no": 124, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.4358139038086, "t": 445.3469543457031, "r": 360.91705, "b": 462.0101318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.968204915523529, "cells": [{"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.9 Triggers and functions (SECURED)"}, {"label": "text", "id": 8, "page_no": 124, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90432739257812, "t": 477.2076721191406, "r": 547.24677, "b": 536.2446899414062, "coord_origin": "TOPLEFT"}, "confidence": 0.984616219997406, "cells": [{"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}]}, "text": "There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see."}, {"label": "section_header", "id": 9, "page_no": 124, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.1463851928711, "t": 555.9064331054688, "r": 151.61127, "b": 569.22412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9636334180831909, "cells": [{"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.1 Triggers"}, {"label": "text", "id": 10, "page_no": 124, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.57107543945312, "t": 582.0809936523438, "r": 547.28851, "b": 627.99658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859280586242676, "cells": [{"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}]}, "text": "Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 124, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6949157714844, "t": 754.8876342773438, "r": 517.96918, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9537138938903809, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 124, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.17626953125, "t": 754.1600341796875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9287368059158325, "cells": [{"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "109"}]}}, {"page_no": 125, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.38241577148438, "t": 754.223876953125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262574315071106, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.55854797363281, "t": 754.67041015625, "r": 339.81958, "b": 764.0196533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9510535597801208, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9443817138672, "t": 70.57403564453125, "r": 547.19171, "b": 116.93487548828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9825777411460876, "cells": [{"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.2041778564453, "t": 128.47238159179688, "r": 269.5399475097656, "b": 138.4495086669922, "coord_origin": "TOPLEFT"}, "confidence": 0.6751627326011658, "cells": [{"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "code", "bbox": {"l": 135.4769287109375, "t": 144.5382080078125, "r": 506.97552490234375, "b": 277.2768249511719, "coord_origin": "TOPLEFT"}, "confidence": 0.8320841193199158, "cells": [{"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.11894226074219, "t": 302.4302978515625, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9550953507423401, "cells": [{"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.63002014160156, "t": 328.42071533203125, "r": 547.26648, "b": 362.8425598144531, "coord_origin": "TOPLEFT"}, "confidence": 0.9755208492279053, "cells": [{"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "code", "bbox": {"l": 134.9473114013672, "t": 375.2805480957031, "r": 547.4903564453125, "b": 525.2118530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7434961199760437, "cells": [{"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.8338165283203, "t": 540.63720703125, "r": 547.25848, "b": 586.96923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799280166625977, "cells": [{"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.09840393066406, "t": 598.6279296875, "r": 282.67517, "b": 608.9580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7475109100341797, "cells": [{"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.61990356445312, "t": 615.7908935546875, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}, "confidence": 0.8809047937393188, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.3736572265625, "t": 632.4197387695312, "r": 547.14795, "b": 654.8876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.6744217872619629, "cells": [{"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 150.47885131835938, "t": 661.2188720703125, "r": 517.91437, "b": 683.71825, "coord_origin": "TOPLEFT"}, "confidence": 0.704971969127655, "cells": [{"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.35072326660156, "t": 690.4181518554688, "r": 523.39453, "b": 713.2664794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.856052815914154, "cells": [{"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 125, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.38241577148438, "t": 754.223876953125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262574315071106, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "110"}, {"label": "page_footer", "id": 1, "page_no": 125, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55854797363281, "t": 754.67041015625, "r": 339.81958, "b": 764.0196533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9510535597801208, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 125, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9443817138672, "t": 70.57403564453125, "r": 547.19171, "b": 116.93487548828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9825777411460876, "cells": [{"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over."}, {"label": "caption", "id": 3, "page_no": 125, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2041778564453, "t": 128.47238159179688, "r": 269.5399475097656, "b": 138.4495086669922, "coord_origin": "TOPLEFT"}, "confidence": 0.6751627326011658, "cells": [{"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-6 Trigger SECURED"}, {"label": "code", "id": 4, "page_no": 125, "cluster": {"id": 4, "label": "code", "bbox": {"l": 135.4769287109375, "t": 144.5382080078125, "r": 506.97552490234375, "b": 277.2768249511719, "coord_origin": "TOPLEFT"}, "confidence": 0.8320841193199158, "cells": [{"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 5, "page_no": 125, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.11894226074219, "t": 302.4302978515625, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9550953507423401, "cells": [{"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.2 Functions"}, {"label": "text", "id": 6, "page_no": 125, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.63002014160156, "t": 328.42071533203125, "r": 547.26648, "b": 362.8425598144531, "coord_origin": "TOPLEFT"}, "confidence": 0.9755208492279053, "cells": [{"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}]}, "text": "Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7."}, {"label": "code", "id": 7, "page_no": 125, "cluster": {"id": 7, "label": "code", "bbox": {"l": 134.9473114013672, "t": 375.2805480957031, "r": 547.4903564453125, "b": 525.2118530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7434961199760437, "cells": [{"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED"}, {"label": "text", "id": 8, "page_no": 125, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8338165283203, "t": 540.63720703125, "r": 547.25848, "b": 586.96923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799280166625977, "cells": [{"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}]}, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure."}, {"label": "text", "id": 9, "page_no": 125, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09840393066406, "t": 598.6279296875, "r": 282.67517, "b": 608.9580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7475109100341797, "cells": [{"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following examples:"}, {"label": "list_item", "id": 10, "page_no": 125, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.61990356445312, "t": 615.7908935546875, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}, "confidence": 0.8809047937393188, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1."}, {"label": "list_item", "id": 11, "page_no": 125, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3736572265625, "t": 632.4197387695312, "r": 547.14795, "b": 654.8876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.6744217872619629, "cells": [{"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}]}, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED."}, {"label": "list_item", "id": 12, "page_no": 125, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.47885131835938, "t": 661.2188720703125, "r": 517.91437, "b": 683.71825, "coord_origin": "TOPLEFT"}, "confidence": 0.704971969127655, "cells": [{"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}]}, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly selected."}, {"label": "text", "id": 13, "page_no": 125, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35072326660156, "t": 690.4181518554688, "r": 523.39453, "b": 713.2664794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.856052815914154, "cells": [{"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}]}, "text": "This same rule applies for any function that might be invoked with a masked column specified as an argument."}], "body": [{"label": "text", "id": 2, "page_no": 125, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9443817138672, "t": 70.57403564453125, "r": 547.19171, "b": 116.93487548828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9825777411460876, "cells": [{"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over."}, {"label": "caption", "id": 3, "page_no": 125, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2041778564453, "t": 128.47238159179688, "r": 269.5399475097656, "b": 138.4495086669922, "coord_origin": "TOPLEFT"}, "confidence": 0.6751627326011658, "cells": [{"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-6 Trigger SECURED"}, {"label": "code", "id": 4, "page_no": 125, "cluster": {"id": 4, "label": "code", "bbox": {"l": 135.4769287109375, "t": 144.5382080078125, "r": 506.97552490234375, "b": 277.2768249511719, "coord_origin": "TOPLEFT"}, "confidence": 0.8320841193199158, "cells": [{"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 5, "page_no": 125, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.11894226074219, "t": 302.4302978515625, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9550953507423401, "cells": [{"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.2 Functions"}, {"label": "text", "id": 6, "page_no": 125, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.63002014160156, "t": 328.42071533203125, "r": 547.26648, "b": 362.8425598144531, "coord_origin": "TOPLEFT"}, "confidence": 0.9755208492279053, "cells": [{"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}]}, "text": "Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7."}, {"label": "code", "id": 7, "page_no": 125, "cluster": {"id": 7, "label": "code", "bbox": {"l": 134.9473114013672, "t": 375.2805480957031, "r": 547.4903564453125, "b": 525.2118530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7434961199760437, "cells": [{"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED"}, {"label": "text", "id": 8, "page_no": 125, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8338165283203, "t": 540.63720703125, "r": 547.25848, "b": 586.96923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799280166625977, "cells": [{"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}]}, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure."}, {"label": "text", "id": 9, "page_no": 125, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09840393066406, "t": 598.6279296875, "r": 282.67517, "b": 608.9580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7475109100341797, "cells": [{"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following examples:"}, {"label": "list_item", "id": 10, "page_no": 125, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.61990356445312, "t": 615.7908935546875, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}, "confidence": 0.8809047937393188, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1."}, {"label": "list_item", "id": 11, "page_no": 125, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3736572265625, "t": 632.4197387695312, "r": 547.14795, "b": 654.8876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.6744217872619629, "cells": [{"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}]}, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED."}, {"label": "list_item", "id": 12, "page_no": 125, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.47885131835938, "t": 661.2188720703125, "r": 517.91437, "b": 683.71825, "coord_origin": "TOPLEFT"}, "confidence": 0.704971969127655, "cells": [{"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}]}, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly selected."}, {"label": "text", "id": 13, "page_no": 125, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35072326660156, "t": 690.4181518554688, "r": 523.39453, "b": 713.2664794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.856052815914154, "cells": [{"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}]}, "text": "This same rule applies for any function that might be invoked with a masked column specified as an argument."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 125, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.38241577148438, "t": 754.223876953125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262574315071106, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "110"}, {"label": "page_footer", "id": 1, "page_no": 125, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55854797363281, "t": 754.67041015625, "r": 339.81958, "b": 764.0196533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9510535597801208, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 126, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.63580322265625, "t": 754.8801879882812, "r": 517.96918, "b": 763.9136352539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9545277953147888, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 529.969970703125, "t": 754.25830078125, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215238094329834, "cells": [{"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.3511199951172, "t": 70.59781646728516, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "confidence": 0.9019970893859863, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 150.33642578125, "t": 87.26454162597656, "r": 537.51099, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6998697519302368, "cells": [{"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.35963439941406, "t": 136.777099609375, "r": 387.57983, "b": 153.22242736816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9685361981391907, "cells": [{"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8172607421875, "t": 169.369384765625, "r": 547.25458, "b": 227.78855895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9881147146224976, "cells": [{"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.24098205566406, "t": 239.97531127929688, "r": 544.86804, "b": 262.68121337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742384552955627, "cells": [{"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.0601806640625, "t": 564.0174560546875, "r": 366.7088317871094, "b": 573.477783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9522354602813721, "cells": [{"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.88059997558594, "t": 590.0465087890625, "r": 547.21686, "b": 612.02142, "coord_origin": "TOPLEFT"}, "confidence": 0.9771828055381775, "cells": [{"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.60548400878906, "t": 624.0549926757812, "r": 547.21771, "b": 658.4563598632812, "coord_origin": "TOPLEFT"}, "confidence": 0.9841781258583069, "cells": [{"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.01368713378906, "t": 669.8409423828125, "r": 547.24268, "b": 704.1990966796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835835099220276, "cells": [{"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 136.06109619140625, "t": 276.0924377441406, "r": 509.6692199707031, "b": 561.36865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848344326019287, "cells": [{"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 126, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.63580322265625, "t": 754.8801879882812, "r": 517.96918, "b": 763.9136352539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9545277953147888, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 126, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 529.969970703125, "t": 754.25830078125, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215238094329834, "cells": [{"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "111"}, {"label": "list_item", "id": 2, "page_no": 126, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.3511199951172, "t": 70.59781646728516, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "confidence": 0.9019970893859863, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table2 column SSN has a column mask that is defined on it."}, {"label": "list_item", "id": 3, "page_no": 126, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.33642578125, "t": 87.26454162597656, "r": 537.51099, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6998697519302368, "cells": [{"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute."}, {"label": "section_header", "id": 4, "page_no": 126, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.35963439941406, "t": 136.777099609375, "r": 387.57983, "b": 153.22242736816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9685361981391907, "cells": [{"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "6.10 RCAC is only one part of the solution"}, {"label": "text", "id": 5, "page_no": 126, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8172607421875, "t": 169.369384765625, "r": 547.25458, "b": 227.78855895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9881147146224976, "cells": [{"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges."}, {"label": "text", "id": 6, "page_no": 126, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.24098205566406, "t": 239.97531127929688, "r": 544.86804, "b": 262.68121337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742384552955627, "cells": [{"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files."}, {"label": "caption", "id": 7, "page_no": 126, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.0601806640625, "t": 564.0174560546875, "r": 366.7088317871094, "b": 573.477783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9522354602813721, "cells": [{"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 Object-level security and RCAC permissions"}, {"label": "text", "id": 8, "page_no": 126, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.88059997558594, "t": 590.0465087890625, "r": 547.21686, "b": 612.02142, "coord_origin": "TOPLEFT"}, "confidence": 0.9771828055381775, "cells": [{"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}]}, "text": "To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test."}, {"label": "text", "id": 9, "page_no": 126, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.60548400878906, "t": 624.0549926757812, "r": 547.21771, "b": 658.4563598632812, "coord_origin": "TOPLEFT"}, "confidence": 0.9841781258583069, "cells": [{"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver."}, {"label": "text", "id": 10, "page_no": 126, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.01368713378906, "t": 669.8409423828125, "r": 547.24268, "b": 704.1990966796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835835099220276, "cells": [{"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}]}, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements."}, {"label": "picture", "id": 11, "page_no": 126, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.06109619140625, "t": 276.0924377441406, "r": 509.6692199707031, "b": 561.36865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848344326019287, "cells": [{"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 126, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.3511199951172, "t": 70.59781646728516, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "confidence": 0.9019970893859863, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table2 column SSN has a column mask that is defined on it."}, {"label": "list_item", "id": 3, "page_no": 126, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.33642578125, "t": 87.26454162597656, "r": 537.51099, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6998697519302368, "cells": [{"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute."}, {"label": "section_header", "id": 4, "page_no": 126, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.35963439941406, "t": 136.777099609375, "r": 387.57983, "b": 153.22242736816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9685361981391907, "cells": [{"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "6.10 RCAC is only one part of the solution"}, {"label": "text", "id": 5, "page_no": 126, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8172607421875, "t": 169.369384765625, "r": 547.25458, "b": 227.78855895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9881147146224976, "cells": [{"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges."}, {"label": "text", "id": 6, "page_no": 126, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.24098205566406, "t": 239.97531127929688, "r": 544.86804, "b": 262.68121337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742384552955627, "cells": [{"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files."}, {"label": "caption", "id": 7, "page_no": 126, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.0601806640625, "t": 564.0174560546875, "r": 366.7088317871094, "b": 573.477783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9522354602813721, "cells": [{"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 Object-level security and RCAC permissions"}, {"label": "text", "id": 8, "page_no": 126, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.88059997558594, "t": 590.0465087890625, "r": 547.21686, "b": 612.02142, "coord_origin": "TOPLEFT"}, "confidence": 0.9771828055381775, "cells": [{"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}]}, "text": "To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test."}, {"label": "text", "id": 9, "page_no": 126, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.60548400878906, "t": 624.0549926757812, "r": 547.21771, "b": 658.4563598632812, "coord_origin": "TOPLEFT"}, "confidence": 0.9841781258583069, "cells": [{"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver."}, {"label": "text", "id": 10, "page_no": 126, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.01368713378906, "t": 669.8409423828125, "r": 547.24268, "b": 704.1990966796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835835099220276, "cells": [{"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}]}, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements."}, {"label": "picture", "id": 11, "page_no": 126, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.06109619140625, "t": 276.0924377441406, "r": 509.6692199707031, "b": 561.36865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848344326019287, "cells": [{"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 126, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.63580322265625, "t": 754.8801879882812, "r": 517.96918, "b": 763.9136352539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9545277953147888, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 126, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 529.969970703125, "t": 754.25830078125, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215238094329834, "cells": [{"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "111"}]}}, {"page_no": 127, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.37667846679688, "t": 754.1668090820312, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.924152672290802, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.55838012695312, "t": 754.5621337890625, "r": 339.87249755859375, "b": 764.0390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473952651023865, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.75006103515625, "t": 70.58626556396484, "r": 547.29626, "b": 116.85999298095703, "coord_origin": "TOPLEFT"}, "confidence": 0.9814152121543884, "cells": [{"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 127, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37667846679688, "t": 754.1668090820312, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.924152672290802, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "112"}, {"label": "page_footer", "id": 1, "page_no": 127, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55838012695312, "t": 754.5621337890625, "r": 339.87249755859375, "b": 764.0390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473952651023865, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 127, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.75006103515625, "t": 70.58626556396484, "r": 547.29626, "b": 116.85999298095703, "coord_origin": "TOPLEFT"}, "confidence": 0.9814152121543884, "cells": [{"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting access to data\u201d, and \u201cneeding access to data\u201d."}], "body": [{"label": "text", "id": 2, "page_no": 127, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.75006103515625, "t": 70.58626556396484, "r": 547.29626, "b": 116.85999298095703, "coord_origin": "TOPLEFT"}, "confidence": 0.9814152121543884, "cells": [{"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting access to data\u201d, and \u201cneeding access to data\u201d."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 127, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37667846679688, "t": 754.1668090820312, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.924152672290802, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "112"}, {"label": "page_footer", "id": 1, "page_no": 127, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55838012695312, "t": 754.5621337890625, "r": 339.87249755859375, "b": 764.0390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473952651023865, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 128, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.72496032714844, "t": 754.732177734375, "r": 257.24335, "b": 764.0621948242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9485868811607361, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0635986328125, "t": 754.3052368164062, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9265602827072144, "cells": [{"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.06494140625, "r": 547.26062, "b": 310.1415100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9408386945724487, "cells": [{"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.95159912109375, "t": 348.0643310546875, "r": 530.336181640625, "b": 382.1923522949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9827558994293213, "cells": [{"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9311981201172, "t": 394.0325622558594, "r": 347.41214, "b": 404.31439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9188783764839172, "cells": [{"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7118682861328, "t": 410.8296203613281, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9452411532402039, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.60548400878906, "t": 422.74298095703125, "r": 406.06464, "b": 432.9902648925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9472385048866272, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.78424072265625, "t": 434.835693359375, "r": 323.05093, "b": 445.13641357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.953090488910675, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 32.251461029052734, "t": 70.665283203125, "r": 239.58355712890625, "b": 238.41876220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7878549695014954, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 128, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.72496032714844, "t": 754.732177734375, "r": 257.24335, "b": 764.0621948242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9485868811607361, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 128, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0635986328125, "t": 754.3052368164062, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9265602827072144, "cells": [{"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "113"}, {"label": "text", "id": 2, "page_no": 128, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7."}, {"label": "section_header", "id": 3, "page_no": 128, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.06494140625, "r": 547.26062, "b": 310.1415100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9408386945724487, "cells": [{"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control management"}, {"label": "text", "id": 4, "page_no": 128, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95159912109375, "t": 348.0643310546875, "r": 530.336181640625, "b": 382.1923522949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9827558994293213, "cells": [{"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}]}, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered."}, {"label": "text", "id": 5, "page_no": 128, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9311981201172, "t": 394.0325622558594, "r": 347.41214, "b": 404.31439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9188783764839172, "cells": [{"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 128, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7118682861328, "t": 410.8296203613281, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9452411532402039, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing row permissions and column masks"}, {"label": "list_item", "id": 7, "page_no": 128, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.60548400878906, "t": 422.74298095703125, "r": 406.06464, "b": 432.9902648925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9472385048866272, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing tables with row permissions and column masks"}, {"label": "list_item", "id": 8, "page_no": 128, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.78424072265625, "t": 434.835693359375, "r": 323.05093, "b": 445.13641357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.953090488910675, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring and auditing function usage"}, {"label": "text", "id": 9, "page_no": 128, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "picture", "id": 10, "page_no": 128, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.251461029052734, "t": 70.665283203125, "r": 239.58355712890625, "b": 238.41876220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7878549695014954, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 128, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7."}, {"label": "section_header", "id": 3, "page_no": 128, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.06494140625, "r": 547.26062, "b": 310.1415100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9408386945724487, "cells": [{"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control management"}, {"label": "text", "id": 4, "page_no": 128, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95159912109375, "t": 348.0643310546875, "r": 530.336181640625, "b": 382.1923522949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9827558994293213, "cells": [{"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}]}, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered."}, {"label": "text", "id": 5, "page_no": 128, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9311981201172, "t": 394.0325622558594, "r": 347.41214, "b": 404.31439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9188783764839172, "cells": [{"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 128, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7118682861328, "t": 410.8296203613281, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9452411532402039, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing row permissions and column masks"}, {"label": "list_item", "id": 7, "page_no": 128, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.60548400878906, "t": 422.74298095703125, "r": 406.06464, "b": 432.9902648925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9472385048866272, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing tables with row permissions and column masks"}, {"label": "list_item", "id": 8, "page_no": 128, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.78424072265625, "t": 434.835693359375, "r": 323.05093, "b": 445.13641357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.953090488910675, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring and auditing function usage"}, {"label": "text", "id": 9, "page_no": 128, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "picture", "id": 10, "page_no": 128, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.251461029052734, "t": 70.665283203125, "r": 239.58355712890625, "b": 238.41876220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7878549695014954, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 128, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.72496032714844, "t": 754.732177734375, "r": 257.24335, "b": 764.0621948242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9485868811607361, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 128, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0635986328125, "t": 754.3052368164062, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9265602827072144, "cells": [{"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "113"}]}}, {"page_no": 129, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.35222625732422, "t": 754.2322998046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9273734092712402, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.60916137695312, "t": 754.7075805664062, "r": 339.81958, "b": 763.9705200195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9511194229125977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.16378021240234, "t": 73.54357147216797, "r": 449.79186999999996, "b": 89.48138427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9686716198921204, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75418090820312, "t": 106.12907409667969, "r": 541.12109, "b": 116.29986572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9501754641532898, "cells": [{"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 63.90059280395508, "t": 135.95755004882812, "r": 228.30336000000003, "b": 148.8716583251953, "coord_origin": "TOPLEFT"}, "confidence": 0.9683852195739746, "cells": [{"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.94558715820312, "t": 161.98435974121094, "r": 546.4278, "b": 208.3597412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878652691841125, "cells": [{"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.89431762695312, "t": 220.08180236816406, "r": 547.2934, "b": 301.81982, "coord_origin": "TOPLEFT"}, "confidence": 0.9883837699890137, "cells": [{"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 63.8327522277832, "t": 321.6274108886719, "r": 231.46431000000004, "b": 334.95697021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.964327871799469, "cells": [{"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.9163360595703, "t": 348.02764892578125, "r": 547.19885, "b": 394.3303527832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9876542687416077, "cells": [{"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.8429718017578, "t": 406.0337829589844, "r": 547.2923, "b": 452.2233581542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9873954057693481, "cells": [{"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.0130844116211, "t": 471.7661437988281, "r": 214.6126708984375, "b": 484.9178771972656, "coord_origin": "TOPLEFT"}, "confidence": 0.9660051465034485, "cells": [{"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.03684997558594, "t": 498.14910888671875, "r": 547.18286, "b": 556.083740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9864468574523926, "cells": [{"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.14586639404297, "t": 644.4866333007812, "r": 183.93999, "b": 657.650634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9669332504272461, "cells": [{"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.13162231445312, "t": 670.6488647460938, "r": 547.32727, "b": 692.8422241210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9813348054885864, "cells": [{"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 142.16134643554688, "t": 573.9788818359375, "r": 541.13116, "b": 620.4790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9856665730476379, "cells": [{"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 129, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35222625732422, "t": 754.2322998046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9273734092712402, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "114"}, {"label": "page_footer", "id": 1, "page_no": 129, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.60916137695312, "t": 754.7075805664062, "r": 339.81958, "b": 763.9705200195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9511194229125977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 129, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.16378021240234, "t": 73.54357147216797, "r": 449.79186999999996, "b": 89.48138427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9686716198921204, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "7.1 Managing row permissions and column masks"}, {"label": "text", "id": 3, "page_no": 129, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75418090820312, "t": 106.12907409667969, "r": 541.12109, "b": 116.29986572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9501754641532898, "cells": [{"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "This section focuses on the management of the RCAC row permissions and column masks."}, {"label": "section_header", "id": 4, "page_no": 129, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.90059280395508, "t": 135.95755004882812, "r": 228.30336000000003, "b": 148.8716583251953, "coord_origin": "TOPLEFT"}, "confidence": 0.9683852195739746, "cells": [{"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.1 Source management"}, {"label": "text", "id": 5, "page_no": 129, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.94558715820312, "t": 161.98435974121094, "r": 546.4278, "b": 208.3597412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878652691841125, "cells": [{"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions."}, {"label": "text", "id": 6, "page_no": 129, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.89431762695312, "t": 220.08180236816406, "r": 547.2934, "b": 301.81982, "coord_origin": "TOPLEFT"}, "confidence": 0.9883837699890137, "cells": [{"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}]}, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table."}, {"label": "section_header", "id": 7, "page_no": 129, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 63.8327522277832, "t": 321.6274108886719, "r": 231.46431000000004, "b": 334.95697021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.964327871799469, "cells": [{"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.2 Modifying definitions"}, {"label": "text", "id": 8, "page_no": 129, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9163360595703, "t": 348.02764892578125, "r": 547.19885, "b": 394.3303527832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9876542687416077, "cells": [{"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}]}, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition."}, {"label": "text", "id": 9, "page_no": 129, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8429718017578, "t": 406.0337829589844, "r": 547.2923, "b": 452.2233581542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9873954057693481, "cells": [{"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}]}, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process."}, {"label": "section_header", "id": 10, "page_no": 129, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.0130844116211, "t": 471.7661437988281, "r": 214.6126708984375, "b": 484.9178771972656, "coord_origin": "TOPLEFT"}, "confidence": 0.9660051465034485, "cells": [{"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.3 Turning on and off"}, {"label": "text", "id": 11, "page_no": 129, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.03684997558594, "t": 498.14910888671875, "r": 547.18286, "b": 556.083740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9864468574523926, "cells": [{"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table."}, {"label": "section_header", "id": 12, "page_no": 129, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.14586639404297, "t": 644.4866333007812, "r": 183.93999, "b": 657.650634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9669332504272461, "cells": [{"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.4 Regenerating"}, {"label": "text", "id": 13, "page_no": 129, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.13162231445312, "t": 670.6488647460938, "r": 547.32727, "b": 692.8422241210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9813348054885864, "cells": [{"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects."}, {"label": "text", "id": 14, "page_no": 129, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.16134643554688, "t": 573.9788818359375, "r": 541.13116, "b": 620.4790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9856665730476379, "cells": [{"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages."}], "body": [{"label": "section_header", "id": 2, "page_no": 129, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.16378021240234, "t": 73.54357147216797, "r": 449.79186999999996, "b": 89.48138427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9686716198921204, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "7.1 Managing row permissions and column masks"}, {"label": "text", "id": 3, "page_no": 129, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75418090820312, "t": 106.12907409667969, "r": 541.12109, "b": 116.29986572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9501754641532898, "cells": [{"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "This section focuses on the management of the RCAC row permissions and column masks."}, {"label": "section_header", "id": 4, "page_no": 129, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.90059280395508, "t": 135.95755004882812, "r": 228.30336000000003, "b": 148.8716583251953, "coord_origin": "TOPLEFT"}, "confidence": 0.9683852195739746, "cells": [{"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.1 Source management"}, {"label": "text", "id": 5, "page_no": 129, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.94558715820312, "t": 161.98435974121094, "r": 546.4278, "b": 208.3597412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878652691841125, "cells": [{"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions."}, {"label": "text", "id": 6, "page_no": 129, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.89431762695312, "t": 220.08180236816406, "r": 547.2934, "b": 301.81982, "coord_origin": "TOPLEFT"}, "confidence": 0.9883837699890137, "cells": [{"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}]}, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table."}, {"label": "section_header", "id": 7, "page_no": 129, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 63.8327522277832, "t": 321.6274108886719, "r": 231.46431000000004, "b": 334.95697021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.964327871799469, "cells": [{"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.2 Modifying definitions"}, {"label": "text", "id": 8, "page_no": 129, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9163360595703, "t": 348.02764892578125, "r": 547.19885, "b": 394.3303527832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9876542687416077, "cells": [{"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}]}, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition."}, {"label": "text", "id": 9, "page_no": 129, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8429718017578, "t": 406.0337829589844, "r": 547.2923, "b": 452.2233581542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9873954057693481, "cells": [{"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}]}, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process."}, {"label": "section_header", "id": 10, "page_no": 129, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.0130844116211, "t": 471.7661437988281, "r": 214.6126708984375, "b": 484.9178771972656, "coord_origin": "TOPLEFT"}, "confidence": 0.9660051465034485, "cells": [{"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.3 Turning on and off"}, {"label": "text", "id": 11, "page_no": 129, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.03684997558594, "t": 498.14910888671875, "r": 547.18286, "b": 556.083740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9864468574523926, "cells": [{"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table."}, {"label": "section_header", "id": 12, "page_no": 129, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.14586639404297, "t": 644.4866333007812, "r": 183.93999, "b": 657.650634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9669332504272461, "cells": [{"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.4 Regenerating"}, {"label": "text", "id": 13, "page_no": 129, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.13162231445312, "t": 670.6488647460938, "r": 547.32727, "b": 692.8422241210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9813348054885864, "cells": [{"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects."}, {"label": "text", "id": 14, "page_no": 129, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.16134643554688, "t": 573.9788818359375, "r": 541.13116, "b": 620.4790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9856665730476379, "cells": [{"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 129, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35222625732422, "t": 754.2322998046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9273734092712402, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "114"}, {"label": "page_footer", "id": 1, "page_no": 129, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.60916137695312, "t": 754.7075805664062, "r": 339.81958, "b": 763.9705200195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9511194229125977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 130, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 283.8012390136719, "t": 754.84130859375, "r": 518.01208, "b": 764.0040283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9527303576469421, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0354614257812, "t": 754.32568359375, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183745980262756, "cells": [{"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9884796142578, "t": 70.43203735351562, "r": 547.20105, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9827796220779419, "cells": [{"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.99624633789062, "t": 164.5958709716797, "r": 547.16022, "b": 211.07290649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9867848753929138, "cells": [{"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 63.91755676269531, "t": 238.19967651367188, "r": 536.6239, "b": 254.27833557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9644711017608643, "cells": [{"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8260498046875, "t": 270.5757751464844, "r": 547.26471, "b": 292.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9742122888565063, "cells": [{"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 63.97272872924805, "t": 312.4022216796875, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.955165684223175, "cells": [{"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.9362335205078, "t": 338.6729431152344, "r": 547.16217, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9810709357261658, "cells": [{"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.97621154785156, "t": 396.52679443359375, "r": 547.22571, "b": 430.947021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9845772385597229, "cells": [{"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 130, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.8012390136719, "t": 754.84130859375, "r": 518.01208, "b": 764.0040283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9527303576469421, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 130, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0354614257812, "t": 754.32568359375, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183745980262756, "cells": [{"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "115"}, {"label": "text", "id": 2, "page_no": 130, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9884796142578, "t": 70.43203735351562, "r": 547.20105, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9827796220779419, "cells": [{"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table."}, {"label": "text", "id": 3, "page_no": 130, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99624633789062, "t": 164.5958709716797, "r": 547.16022, "b": 211.07290649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9867848753929138, "cells": [{"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error."}, {"label": "section_header", "id": 4, "page_no": 130, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.91755676269531, "t": 238.19967651367188, "r": 536.6239, "b": 254.27833557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9644711017608643, "cells": [{"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2 Managing tables with row permissions and column masks"}, {"label": "text", "id": 5, "page_no": 130, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8260498046875, "t": 270.5757751464844, "r": 547.26471, "b": 292.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9742122888565063, "cells": [{"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section examines the object management considerations after RCAC is added to a DB2 table."}, {"label": "section_header", "id": 6, "page_no": 130, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 63.97272872924805, "t": 312.4022216796875, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.955165684223175, "cells": [{"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.1 Save and restore"}, {"label": "text", "id": 7, "page_no": 130, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9362335205078, "t": 338.6729431152344, "r": 547.16217, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9810709357261658, "cells": [{"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC."}, {"label": "text", "id": 8, "page_no": 130, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.97621154785156, "t": 396.52679443359375, "r": 547.22571, "b": 430.947021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9845772385597229, "cells": [{"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging."}], "body": [{"label": "text", "id": 2, "page_no": 130, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9884796142578, "t": 70.43203735351562, "r": 547.20105, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9827796220779419, "cells": [{"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table."}, {"label": "text", "id": 3, "page_no": 130, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99624633789062, "t": 164.5958709716797, "r": 547.16022, "b": 211.07290649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9867848753929138, "cells": [{"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error."}, {"label": "section_header", "id": 4, "page_no": 130, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.91755676269531, "t": 238.19967651367188, "r": 536.6239, "b": 254.27833557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9644711017608643, "cells": [{"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2 Managing tables with row permissions and column masks"}, {"label": "text", "id": 5, "page_no": 130, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8260498046875, "t": 270.5757751464844, "r": 547.26471, "b": 292.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9742122888565063, "cells": [{"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section examines the object management considerations after RCAC is added to a DB2 table."}, {"label": "section_header", "id": 6, "page_no": 130, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 63.97272872924805, "t": 312.4022216796875, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.955165684223175, "cells": [{"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.1 Save and restore"}, {"label": "text", "id": 7, "page_no": 130, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9362335205078, "t": 338.6729431152344, "r": 547.16217, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9810709357261658, "cells": [{"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC."}, {"label": "text", "id": 8, "page_no": 130, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.97621154785156, "t": 396.52679443359375, "r": 547.22571, "b": 430.947021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9845772385597229, "cells": [{"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 130, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.8012390136719, "t": 754.84130859375, "r": 518.01208, "b": 764.0040283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9527303576469421, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 130, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0354614257812, "t": 754.32568359375, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183745980262756, "cells": [{"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "115"}]}}, {"page_no": 131, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.29827880859375, "t": 754.2285766601562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9285372495651245, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.44544219970703, "t": 754.6015625, "r": 339.8977355957031, "b": 763.9843139648438, "coord_origin": "TOPLEFT"}, "confidence": 0.954731285572052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.94534301757812, "t": 70.57475280761719, "r": 546.44183, "b": 200.73284912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9859393835067749, "cells": [{"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.7970428466797, "t": 456.8849182128906, "r": 333.88006591796875, "b": 466.27325439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9470012187957764, "cells": [{"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.7681427001953, "t": 482.7886657714844, "r": 547.26556, "b": 553.0422973632812, "coord_origin": "TOPLEFT"}, "confidence": 0.986469030380249, "cells": [{"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 63.921077728271484, "t": 572.3475952148438, "r": 196.4101, "b": 585.6023559570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9667927026748657, "cells": [{"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.8064727783203, "t": 598.497802734375, "r": 538.52258, "b": 645.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.9099884033203, "t": 656.6238403320312, "r": 542.69781, "b": 691.0518188476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9842554926872253, "cells": [{"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.79965209960938, "t": 702.5816040039062, "r": 524.25989, "b": 724.7844848632812, "coord_origin": "TOPLEFT"}, "confidence": 0.97635817527771, "cells": [{"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 136.1027374267578, "t": 215.22740173339844, "r": 522.8739013671875, "b": 453.6589050292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9824627637863159, "cells": [{"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 131, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29827880859375, "t": 754.2285766601562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9285372495651245, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "116"}, {"label": "page_footer", "id": 1, "page_no": 131, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.44544219970703, "t": 754.6015625, "r": 339.8977355957031, "b": 763.9843139648438, "coord_origin": "TOPLEFT"}, "confidence": 0.954731285572052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 131, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.94534301757812, "t": 70.57475280761719, "r": 546.44183, "b": 200.73284912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9859393835067749, "cells": [{"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026 SELECT C.CUSTOMER_ID FROM CUSTOMERS C \u2026). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1."}, {"label": "caption", "id": 3, "page_no": 131, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.7970428466797, "t": 456.8849182128906, "r": 333.88006591796875, "b": 466.27325439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9470012187957764, "cells": [{"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7-1 Restoring tables to different schemas"}, {"label": "text", "id": 4, "page_no": 131, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7681427001953, "t": 482.7886657714844, "r": 547.26556, "b": 553.0422973632812, "coord_origin": "TOPLEFT"}, "confidence": 0.986469030380249, "cells": [{"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}]}, "text": "The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then run the generated script."}, {"label": "section_header", "id": 5, "page_no": 131, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 63.921077728271484, "t": 572.3475952148438, "r": 196.4101, "b": 585.6023559570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9667927026748657, "cells": [{"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.2 Table migration"}, {"label": "text", "id": 6, "page_no": 131, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8064727783203, "t": 598.497802734375, "r": 538.52258, "b": 645.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}]}, "text": "There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes."}, {"label": "text", "id": 7, "page_no": 131, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9099884033203, "t": 656.6238403320312, "r": 542.69781, "b": 691.0518188476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9842554926872253, "cells": [{"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}]}, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing."}, {"label": "text", "id": 8, "page_no": 131, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.79965209960938, "t": 702.5816040039062, "r": 524.25989, "b": 724.7844848632812, "coord_origin": "TOPLEFT"}, "confidence": 0.97635817527771, "cells": [{"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}]}, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas."}, {"label": "picture", "id": 9, "page_no": 131, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.1027374267578, "t": 215.22740173339844, "r": 522.8739013671875, "b": 453.6589050292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9824627637863159, "cells": [{"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 131, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.94534301757812, "t": 70.57475280761719, "r": 546.44183, "b": 200.73284912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9859393835067749, "cells": [{"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026 SELECT C.CUSTOMER_ID FROM CUSTOMERS C \u2026). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1."}, {"label": "caption", "id": 3, "page_no": 131, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.7970428466797, "t": 456.8849182128906, "r": 333.88006591796875, "b": 466.27325439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9470012187957764, "cells": [{"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7-1 Restoring tables to different schemas"}, {"label": "text", "id": 4, "page_no": 131, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7681427001953, "t": 482.7886657714844, "r": 547.26556, "b": 553.0422973632812, "coord_origin": "TOPLEFT"}, "confidence": 0.986469030380249, "cells": [{"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}]}, "text": "The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then run the generated script."}, {"label": "section_header", "id": 5, "page_no": 131, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 63.921077728271484, "t": 572.3475952148438, "r": 196.4101, "b": 585.6023559570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9667927026748657, "cells": [{"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.2 Table migration"}, {"label": "text", "id": 6, "page_no": 131, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8064727783203, "t": 598.497802734375, "r": 538.52258, "b": 645.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}]}, "text": "There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes."}, {"label": "text", "id": 7, "page_no": 131, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9099884033203, "t": 656.6238403320312, "r": 542.69781, "b": 691.0518188476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9842554926872253, "cells": [{"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}]}, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing."}, {"label": "text", "id": 8, "page_no": 131, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.79965209960938, "t": 702.5816040039062, "r": 524.25989, "b": 724.7844848632812, "coord_origin": "TOPLEFT"}, "confidence": 0.97635817527771, "cells": [{"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}]}, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas."}, {"label": "picture", "id": 9, "page_no": 131, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.1027374267578, "t": 215.22740173339844, "r": 522.8739013671875, "b": 453.6589050292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9824627637863159, "cells": [{"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 131, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29827880859375, "t": 754.2285766601562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9285372495651245, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "116"}, {"label": "page_footer", "id": 1, "page_no": 131, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.44544219970703, "t": 754.6015625, "r": 339.8977355957031, "b": 763.9843139648438, "coord_origin": "TOPLEFT"}, "confidence": 0.954731285572052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 132, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 283.7824401855469, "t": 754.8123779296875, "r": 518.01208, "b": 764.00732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9508650898933411, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0186157226562, "t": 754.230224609375, "r": 547.265380859375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163357019424438, "cells": [{"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.03428649902344, "t": 70.103271484375, "r": 396.18387, "b": 86.66415405273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9635764956474304, "cells": [{"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9032745361328, "t": 102.72404479980469, "r": 546.32922, "b": 172.8615264892578, "coord_origin": "TOPLEFT"}, "confidence": 0.9850849509239197, "cells": [{"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.86427307128906, "t": 184.6098175048828, "r": 547.29333, "b": 255.25311279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875213503837585, "cells": [{"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.72532653808594, "t": 266.5744934082031, "r": 546.21472, "b": 300.73944, "coord_origin": "TOPLEFT"}, "confidence": 0.9673486948013306, "cells": [{"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6563262939453, "t": 307.4368591308594, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}, "confidence": 0.910222053527832, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 150.67897033691406, "t": 324.8032531738281, "r": 545.99457, "b": 346.948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.8444021940231323, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.60202026367188, "t": 353.90203857421875, "r": 387.59177, "b": 364.74249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9257392883300781, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.6260986328125, "t": 370.6153259277344, "r": 546.2595825195312, "b": 392.73980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7952681183815002, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 132, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.7824401855469, "t": 754.8123779296875, "r": 518.01208, "b": 764.00732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9508650898933411, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 132, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0186157226562, "t": 754.230224609375, "r": 547.265380859375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163357019424438, "cells": [{"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "117"}, {"label": "section_header", "id": 2, "page_no": 132, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03428649902344, "t": 70.103271484375, "r": 396.18387, "b": 86.66415405273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9635764956474304, "cells": [{"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "7.3 Monitoring and auditing function usage"}, {"label": "text", "id": 3, "page_no": 132, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9032745361328, "t": 102.72404479980469, "r": 546.32922, "b": 172.8615264892578, "coord_origin": "TOPLEFT"}, "confidence": 0.9850849509239197, "cells": [{"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events."}, {"label": "text", "id": 4, "page_no": 132, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.86427307128906, "t": 184.6098175048828, "r": 547.29333, "b": 255.25311279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875213503837585, "cells": [{"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization\u2019s data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed."}, {"label": "text", "id": 5, "page_no": 132, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.72532653808594, "t": 266.5744934082031, "r": 546.21472, "b": 300.73944, "coord_origin": "TOPLEFT"}, "confidence": 0.9673486948013306, "cells": [{"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}]}, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents:"}, {"label": "list_item", "id": 6, "page_no": 132, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6563262939453, "t": 307.4368591308594, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}, "confidence": 0.910222053527832, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide , found at:"}, {"label": "list_item", "id": 7, "page_no": 132, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.67897033691406, "t": 324.8032531738281, "r": 545.99457, "b": 346.948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.8444021940231323, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 8, "page_no": 132, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60202026367188, "t": 353.90203857421875, "r": 387.59177, "b": 364.74249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9257392883300781, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide , found at:"}, {"label": "list_item", "id": 9, "page_no": 132, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.6260986328125, "t": 370.6153259277344, "r": 546.2595825195312, "b": 392.73980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7952681183815002, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}], "body": [{"label": "section_header", "id": 2, "page_no": 132, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03428649902344, "t": 70.103271484375, "r": 396.18387, "b": 86.66415405273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9635764956474304, "cells": [{"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "7.3 Monitoring and auditing function usage"}, {"label": "text", "id": 3, "page_no": 132, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9032745361328, "t": 102.72404479980469, "r": 546.32922, "b": 172.8615264892578, "coord_origin": "TOPLEFT"}, "confidence": 0.9850849509239197, "cells": [{"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events."}, {"label": "text", "id": 4, "page_no": 132, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.86427307128906, "t": 184.6098175048828, "r": 547.29333, "b": 255.25311279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875213503837585, "cells": [{"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization\u2019s data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed."}, {"label": "text", "id": 5, "page_no": 132, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.72532653808594, "t": 266.5744934082031, "r": 546.21472, "b": 300.73944, "coord_origin": "TOPLEFT"}, "confidence": 0.9673486948013306, "cells": [{"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}]}, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents:"}, {"label": "list_item", "id": 6, "page_no": 132, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6563262939453, "t": 307.4368591308594, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}, "confidence": 0.910222053527832, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide , found at:"}, {"label": "list_item", "id": 7, "page_no": 132, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.67897033691406, "t": 324.8032531738281, "r": 545.99457, "b": 346.948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.8444021940231323, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 8, "page_no": 132, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60202026367188, "t": 353.90203857421875, "r": 387.59177, "b": 364.74249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9257392883300781, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide , found at:"}, {"label": "list_item", "id": 9, "page_no": 132, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.6260986328125, "t": 370.6153259277344, "r": 546.2595825195312, "b": 392.73980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7952681183815002, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 132, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.7824401855469, "t": 754.8123779296875, "r": 518.01208, "b": 764.00732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9508650898933411, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 132, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0186157226562, "t": 754.230224609375, "r": 547.265380859375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163357019424438, "cells": [{"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "117"}]}}, {"page_no": 133, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.53031158447266, "t": 754.076416015625, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9196769595146179, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.5851821899414, "t": 754.4262084960938, "r": 340.1449890136719, "b": 764.1357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9428929090499878, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 133, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53031158447266, "t": 754.076416015625, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9196769595146179, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "118"}, {"label": "page_footer", "id": 1, "page_no": 133, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.5851821899414, "t": 754.4262084960938, "r": 340.1449890136719, "b": 764.1357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9428929090499878, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 133, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53031158447266, "t": 754.076416015625, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9196769595146179, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "118"}, {"label": "page_footer", "id": 1, "page_no": 133, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.5851821899414, "t": 754.4262084960938, "r": 340.1449890136719, "b": 764.1357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9428929090499878, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 134, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.695404052734375, "t": 754.7307739257812, "r": 257.24335, "b": 764.0828247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9506158828735352, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0399169921875, "t": 754.2144165039062, "r": 547.2623901367188, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.925187349319458, "cells": [{"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.7628173828125, "t": 253.29893493652344, "r": 479.93341, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9399341940879822, "cells": [{"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.9272003173828, "t": 347.94287109375, "r": 538.46985, "b": 394.585205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859251379966736, "cells": [{"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9006805419922, "t": 406.127197265625, "r": 347.41208, "b": 416.26715087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.945638120174408, "cells": [{"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.63284301757812, "t": 422.662109375, "r": 411.53955, "b": 432.9858703613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9510299563407898, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8564910888672, "t": 434.4798278808594, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}, "confidence": 0.9291093945503235, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 500.39999, "t": 93.13899230957031, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7733241319656372, "cells": [{"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 32.17782974243164, "t": 70.58657836914062, "r": 238.9773712158203, "b": 238.30882263183594, "coord_origin": "TOPLEFT"}, "confidence": 0.722669243812561, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 134, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.695404052734375, "t": 754.7307739257812, "r": 257.24335, "b": 764.0828247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9506158828735352, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 134, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0399169921875, "t": 754.2144165039062, "r": 547.2623901367188, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.925187349319458, "cells": [{"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "119"}, {"label": "text", "id": 2, "page_no": 134, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 8."}, {"label": "section_header", "id": 3, "page_no": 134, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.7628173828125, "t": 253.29893493652344, "r": 479.93341, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9399341940879822, "cells": [{"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Designing and planning for success"}, {"label": "text", "id": 4, "page_no": 134, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9272003173828, "t": 347.94287109375, "r": 538.46985, "b": 394.585205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859251379966736, "cells": [{"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing."}, {"label": "text", "id": 5, "page_no": 134, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9006805419922, "t": 406.127197265625, "r": 347.41208, "b": 416.26715087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.945638120174408, "cells": [{"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 134, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.63284301757812, "t": 422.662109375, "r": 411.53955, "b": 432.9858703613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9510299563407898, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementing RCAC with good design and proper planning"}, {"label": "list_item", "id": 7, "page_no": 134, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8564910888672, "t": 434.4798278808594, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}, "confidence": 0.9291093945503235, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i Center of Excellence"}, {"label": "text", "id": 8, "page_no": 134, "cluster": {"id": 8, "label": "text", "bbox": {"l": 500.39999, "t": 93.13899230957031, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7733241319656372, "cells": [{"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "picture", "id": 9, "page_no": 134, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 32.17782974243164, "t": 70.58657836914062, "r": 238.9773712158203, "b": 238.30882263183594, "coord_origin": "TOPLEFT"}, "confidence": 0.722669243812561, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 134, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 8."}, {"label": "section_header", "id": 3, "page_no": 134, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.7628173828125, "t": 253.29893493652344, "r": 479.93341, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9399341940879822, "cells": [{"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Designing and planning for success"}, {"label": "text", "id": 4, "page_no": 134, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9272003173828, "t": 347.94287109375, "r": 538.46985, "b": 394.585205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859251379966736, "cells": [{"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing."}, {"label": "text", "id": 5, "page_no": 134, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9006805419922, "t": 406.127197265625, "r": 347.41208, "b": 416.26715087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.945638120174408, "cells": [{"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 134, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.63284301757812, "t": 422.662109375, "r": 411.53955, "b": 432.9858703613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9510299563407898, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementing RCAC with good design and proper planning"}, {"label": "list_item", "id": 7, "page_no": 134, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8564910888672, "t": 434.4798278808594, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}, "confidence": 0.9291093945503235, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i Center of Excellence"}, {"label": "text", "id": 8, "page_no": 134, "cluster": {"id": 8, "label": "text", "bbox": {"l": 500.39999, "t": 93.13899230957031, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7733241319656372, "cells": [{"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "picture", "id": 9, "page_no": 134, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 32.17782974243164, "t": 70.58657836914062, "r": 238.9773712158203, "b": 238.30882263183594, "coord_origin": "TOPLEFT"}, "confidence": 0.722669243812561, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 134, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.695404052734375, "t": 754.7307739257812, "r": 257.24335, "b": 764.0828247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9506158828735352, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 134, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0399169921875, "t": 754.2144165039062, "r": 547.2623901367188, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.925187349319458, "cells": [{"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "119"}]}}, {"page_no": 135, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.42459869384766, "t": 754.2553100585938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.930542528629303, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.57987976074219, "t": 754.646240234375, "r": 339.84716796875, "b": 764.02783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9501276612281799, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.5673599243164, "t": 73.4725112915039, "r": 544.55121, "b": 90.01676940917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9646757245063782, "cells": [{"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9280242919922, "t": 105.88225555419922, "r": 544.7099, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9831311702728271, "cells": [{"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.055419921875, "t": 151.780517578125, "r": 545.35938, "b": 198.01513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9863764643669128, "cells": [{"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8184356689453, "t": 209.97195434570312, "r": 547.25061, "b": 267.85925, "coord_origin": "TOPLEFT"}, "confidence": 0.988143265247345, "cells": [{"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.80397033691406, "t": 280.05120849609375, "r": 500.55725, "b": 290.4837951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9292261004447937, "cells": [{"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.56689453125, "t": 296.6219787597656, "r": 429.45065, "b": 307.35797119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9498389363288879, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.60137939453125, "t": 308.7406311035156, "r": 351.64917, "b": 319.1260070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.942351758480072, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.644775390625, "t": 320.5731201171875, "r": 491.77822999999995, "b": 331.0446472167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9509508013725281, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.75515747070312, "t": 332.263427734375, "r": 426.24567, "b": 343.17962646484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9367370009422302, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.80447387695312, "t": 344.1607666015625, "r": 433.24645999999996, "b": 355.1954040527344, "coord_origin": "TOPLEFT"}, "confidence": 0.9496915936470032, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.60531616210938, "t": 356.711669921875, "r": 383.57187, "b": 367.0285339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9547297358512878, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.60353088378906, "t": 378.73797607421875, "r": 547.24536, "b": 461.1492614746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9838752746582031, "cells": [{"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.79904174804688, "t": 472.91790771484375, "r": 547.1958, "b": 531.1986694335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882535934448242, "cells": [{"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.42830657958984, "t": 558.0595703125, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}, "confidence": 0.9633642435073853, "cells": [{"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 135.96109008789062, "t": 590.4443359375, "r": 533.23181, "b": 649.4010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875909090042114, "cells": [{"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 136.06277465820312, "t": 660.7098999023438, "r": 547.2406, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9721947908401489, "cells": [{"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 135, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42459869384766, "t": 754.2553100585938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.930542528629303, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "120"}, {"label": "page_footer", "id": 1, "page_no": 135, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57987976074219, "t": 754.646240234375, "r": 339.84716796875, "b": 764.02783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9501276612281799, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 135, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.5673599243164, "t": 73.4725112915039, "r": 544.55121, "b": 90.01676940917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9646757245063782, "cells": [{"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "8.1 Implementing RCAC with good design and proper planning"}, {"label": "text", "id": 3, "page_no": 135, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9280242919922, "t": 105.88225555419922, "r": 544.7099, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9831311702728271, "cells": [{"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i."}, {"label": "text", "id": 4, "page_no": 135, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.055419921875, "t": 151.780517578125, "r": 545.35938, "b": 198.01513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9863764643669128, "cells": [{"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility."}, {"label": "text", "id": 5, "page_no": 135, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8184356689453, "t": 209.97195434570312, "r": 547.25061, "b": 267.85925, "coord_origin": "TOPLEFT"}, "confidence": 0.988143265247345, "cells": [{"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}]}, "text": "This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read."}, {"label": "text", "id": 6, "page_no": 135, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.80397033691406, "t": 280.05120849609375, "r": 500.55725, "b": 290.4837951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9292261004447937, "cells": [{"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This paper has described the following pervasive power and advantages of RCAC:"}, {"label": "list_item", "id": 7, "page_no": 135, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56689453125, "t": 296.6219787597656, "r": 429.45065, "b": 307.35797119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9498389363288879, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Access can be controlled through simple or sophisticated logic."}, {"label": "list_item", "id": 8, "page_no": 135, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60137939453125, "t": 308.7406311035156, "r": 351.64917, "b": 319.1260070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.942351758480072, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Virtually no application changes are required."}, {"label": "list_item", "id": 9, "page_no": 135, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.644775390625, "t": 320.5731201171875, "r": 491.77822999999995, "b": 331.0446472167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9509508013725281, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The implementation of the access policy is part of the DB2 data access layer."}, {"label": "list_item", "id": 10, "page_no": 135, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.75515747070312, "t": 332.263427734375, "r": 426.24567, "b": 343.17962646484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9367370009422302, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table data is protected regardless of the interface that is used."}, {"label": "list_item", "id": 11, "page_no": 135, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.80447387695312, "t": 344.1607666015625, "r": 433.24645999999996, "b": 355.1954040527344, "coord_origin": "TOPLEFT"}, "confidence": 0.9496915936470032, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No user is inherently exempted from the access control policies."}, {"label": "list_item", "id": 12, "page_no": 135, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.60531616210938, "t": 356.711669921875, "r": 383.57187, "b": 367.0285339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9547297358512878, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Groups of users can share policies and permissions."}, {"label": "text", "id": 13, "page_no": 135, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.60353088378906, "t": 378.73797607421875, "r": 547.24536, "b": 461.1492614746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9838752746582031, "cells": [{"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}]}, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance."}, {"label": "text", "id": 14, "page_no": 135, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.79904174804688, "t": 472.91790771484375, "r": 547.1958, "b": 531.1986694335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882535934448242, "cells": [{"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}]}, "text": "With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown."}, {"label": "section_header", "id": 15, "page_no": 135, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.42830657958984, "t": 558.0595703125, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}, "confidence": 0.9633642435073853, "cells": [{"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}]}, "text": "8.2 DB2 for i Center of Excellence"}, {"label": "text", "id": 16, "page_no": 135, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.96109008789062, "t": 590.4443359375, "r": 533.23181, "b": 649.4010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875909090042114, "cells": [{"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}]}, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design."}, {"label": "text", "id": 17, "page_no": 135, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.06277465820312, "t": 660.7098999023438, "r": 547.2406, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9721947908401489, "cells": [{"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}]}, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com ."}], "body": [{"label": "section_header", "id": 2, "page_no": 135, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.5673599243164, "t": 73.4725112915039, "r": 544.55121, "b": 90.01676940917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9646757245063782, "cells": [{"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "8.1 Implementing RCAC with good design and proper planning"}, {"label": "text", "id": 3, "page_no": 135, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9280242919922, "t": 105.88225555419922, "r": 544.7099, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9831311702728271, "cells": [{"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i."}, {"label": "text", "id": 4, "page_no": 135, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.055419921875, "t": 151.780517578125, "r": 545.35938, "b": 198.01513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9863764643669128, "cells": [{"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility."}, {"label": "text", "id": 5, "page_no": 135, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8184356689453, "t": 209.97195434570312, "r": 547.25061, "b": 267.85925, "coord_origin": "TOPLEFT"}, "confidence": 0.988143265247345, "cells": [{"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}]}, "text": "This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read."}, {"label": "text", "id": 6, "page_no": 135, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.80397033691406, "t": 280.05120849609375, "r": 500.55725, "b": 290.4837951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9292261004447937, "cells": [{"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This paper has described the following pervasive power and advantages of RCAC:"}, {"label": "list_item", "id": 7, "page_no": 135, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56689453125, "t": 296.6219787597656, "r": 429.45065, "b": 307.35797119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9498389363288879, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Access can be controlled through simple or sophisticated logic."}, {"label": "list_item", "id": 8, "page_no": 135, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60137939453125, "t": 308.7406311035156, "r": 351.64917, "b": 319.1260070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.942351758480072, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Virtually no application changes are required."}, {"label": "list_item", "id": 9, "page_no": 135, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.644775390625, "t": 320.5731201171875, "r": 491.77822999999995, "b": 331.0446472167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9509508013725281, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The implementation of the access policy is part of the DB2 data access layer."}, {"label": "list_item", "id": 10, "page_no": 135, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.75515747070312, "t": 332.263427734375, "r": 426.24567, "b": 343.17962646484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9367370009422302, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table data is protected regardless of the interface that is used."}, {"label": "list_item", "id": 11, "page_no": 135, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.80447387695312, "t": 344.1607666015625, "r": 433.24645999999996, "b": 355.1954040527344, "coord_origin": "TOPLEFT"}, "confidence": 0.9496915936470032, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No user is inherently exempted from the access control policies."}, {"label": "list_item", "id": 12, "page_no": 135, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.60531616210938, "t": 356.711669921875, "r": 383.57187, "b": 367.0285339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9547297358512878, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Groups of users can share policies and permissions."}, {"label": "text", "id": 13, "page_no": 135, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.60353088378906, "t": 378.73797607421875, "r": 547.24536, "b": 461.1492614746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9838752746582031, "cells": [{"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}]}, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance."}, {"label": "text", "id": 14, "page_no": 135, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.79904174804688, "t": 472.91790771484375, "r": 547.1958, "b": 531.1986694335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882535934448242, "cells": [{"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}]}, "text": "With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown."}, {"label": "section_header", "id": 15, "page_no": 135, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.42830657958984, "t": 558.0595703125, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}, "confidence": 0.9633642435073853, "cells": [{"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}]}, "text": "8.2 DB2 for i Center of Excellence"}, {"label": "text", "id": 16, "page_no": 135, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.96109008789062, "t": 590.4443359375, "r": 533.23181, "b": 649.4010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875909090042114, "cells": [{"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}]}, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design."}, {"label": "text", "id": 17, "page_no": 135, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.06277465820312, "t": 660.7098999023438, "r": 547.2406, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9721947908401489, "cells": [{"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}]}, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com ."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 135, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42459869384766, "t": 754.2553100585938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.930542528629303, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "120"}, {"label": "page_footer", "id": 1, "page_no": 135, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57987976074219, "t": 754.646240234375, "r": 339.84716796875, "b": 764.02783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9501276612281799, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 136, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.67854309082031, "t": 754.6529541015625, "r": 257.24335, "b": 764.1146850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9381327033042908, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0882568359375, "t": 754.2919311523438, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215134382247925, "cells": [{"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.2744140625, "r": 485.79715000000004, "b": 310.868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.931329607963562, "cells": [{"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.599853515625, "t": 347.8815612792969, "r": 539.84735, "b": 394.2618408203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9735324382781982, "cells": [{"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.52754211425781, "t": 405.9345397949219, "r": 332.9858703613281, "b": 415.5800476074219, "coord_origin": "TOPLEFT"}, "confidence": 0.7840588688850403, "cells": [{"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "code", "bbox": {"l": 62.520992279052734, "t": 420.8819580078125, "r": 541.13666, "b": 730.4379272460938, "coord_origin": "TOPLEFT"}, "confidence": 0.8016359806060791, "cells": [{"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 496.9212951660156, "t": 92.56521606445312, "r": 526.1300659179688, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6984182596206665, "cells": [{"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 31.834123611450195, "t": 70.96026611328125, "r": 238.2196044921875, "b": 238.40943908691406, "coord_origin": "TOPLEFT"}, "confidence": 0.6705455780029297, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 136, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.67854309082031, "t": 754.6529541015625, "r": 257.24335, "b": 764.1146850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9381327033042908, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 136, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0882568359375, "t": 754.2919311523438, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215134382247925, "cells": [{"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "121"}, {"label": "text", "id": 2, "page_no": 136, "cluster": {"id": 2, "label": "text", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A."}, {"label": "section_header", "id": 3, "page_no": 136, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.2744140625, "r": 485.79715000000004, "b": 310.868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.931329607963562, "cells": [{"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Database definitions for the RCAC banking example"}, {"label": "text", "id": 4, "page_no": 136, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.599853515625, "t": 347.8815612792969, "r": 539.84735, "b": 394.2618408203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9735324382781982, "cells": [{"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and Column Access Control: Banking example\u201d on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example."}, {"label": "caption", "id": 5, "page_no": 136, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.52754211425781, "t": 405.9345397949219, "r": 332.9858703613281, "b": 415.5800476074219, "coord_origin": "TOPLEFT"}, "confidence": 0.7840588688850403, "cells": [{"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}]}, "text": "Example A-1 DDL script to implement the RCAC banking example"}, {"label": "code", "id": 6, "page_no": 136, "cluster": {"id": 6, "label": "code", "bbox": {"l": 62.520992279052734, "t": 420.8819580078125, "r": 541.13666, "b": 730.4379272460938, "coord_origin": "TOPLEFT"}, "confidence": 0.8016359806060791, "cells": [{"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}]}, "text": "/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL ,"}, {"label": "text", "id": 7, "page_no": 136, "cluster": {"id": 7, "label": "text", "bbox": {"l": 496.9212951660156, "t": 92.56521606445312, "r": 526.1300659179688, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6984182596206665, "cells": [{"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "A"}, {"label": "picture", "id": 8, "page_no": 136, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 31.834123611450195, "t": 70.96026611328125, "r": 238.2196044921875, "b": 238.40943908691406, "coord_origin": "TOPLEFT"}, "confidence": 0.6705455780029297, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 136, "cluster": {"id": 2, "label": "text", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A."}, {"label": "section_header", "id": 3, "page_no": 136, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.2744140625, "r": 485.79715000000004, "b": 310.868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.931329607963562, "cells": [{"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Database definitions for the RCAC banking example"}, {"label": "text", "id": 4, "page_no": 136, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.599853515625, "t": 347.8815612792969, "r": 539.84735, "b": 394.2618408203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9735324382781982, "cells": [{"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and Column Access Control: Banking example\u201d on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example."}, {"label": "caption", "id": 5, "page_no": 136, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.52754211425781, "t": 405.9345397949219, "r": 332.9858703613281, "b": 415.5800476074219, "coord_origin": "TOPLEFT"}, "confidence": 0.7840588688850403, "cells": [{"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}]}, "text": "Example A-1 DDL script to implement the RCAC banking example"}, {"label": "code", "id": 6, "page_no": 136, "cluster": {"id": 6, "label": "code", "bbox": {"l": 62.520992279052734, "t": 420.8819580078125, "r": 541.13666, "b": 730.4379272460938, "coord_origin": "TOPLEFT"}, "confidence": 0.8016359806060791, "cells": [{"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}]}, "text": "/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL ,"}, {"label": "text", "id": 7, "page_no": 136, "cluster": {"id": 7, "label": "text", "bbox": {"l": 496.9212951660156, "t": 92.56521606445312, "r": 526.1300659179688, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6984182596206665, "cells": [{"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "A"}, {"label": "picture", "id": 8, "page_no": 136, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 31.834123611450195, "t": 70.96026611328125, "r": 238.2196044921875, "b": 238.40943908691406, "coord_origin": "TOPLEFT"}, "confidence": 0.6705455780029297, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 136, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.67854309082031, "t": 754.6529541015625, "r": 257.24335, "b": 764.1146850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9381327033042908, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 136, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0882568359375, "t": 754.2919311523438, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215134382247925, "cells": [{"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "121"}]}}, {"page_no": 137, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.49662017822266, "t": 754.4017944335938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092414379119873, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.57022857666016, "t": 754.6959228515625, "r": 339.9194030761719, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9339437484741211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 63.45902633666992, "t": 70.63676452636719, "r": 546.53699, "b": 721.98095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7888815402984619, "cells": [{"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 137, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.49662017822266, "t": 754.4017944335938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092414379119873, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "122"}, {"label": "page_footer", "id": 1, "page_no": 137, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57022857666016, "t": 754.6959228515625, "r": 339.9194030761719, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9339437484741211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 137, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.45902633666992, "t": 70.63676452636719, "r": 546.53699, "b": 721.98095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7888815402984619, "cells": [{"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}]}, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) );"}], "body": [{"label": "code", "id": 2, "page_no": 137, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.45902633666992, "t": 70.63676452636719, "r": 546.53699, "b": 721.98095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7888815402984619, "cells": [{"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}]}, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) );"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 137, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.49662017822266, "t": 754.4017944335938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092414379119873, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "122"}, {"label": "page_footer", "id": 1, "page_no": 137, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57022857666016, "t": 754.6959228515625, "r": 339.9194030761719, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9339437484741211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 138, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 256.79608154296875, "t": 754.73193359375, "r": 517.90582, "b": 763.9072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521042704582214, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0982055664062, "t": 754.3765869140625, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163233041763306, "cells": [{"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.7338981628418, "t": 71.67296999999996, "r": 546.53668, "b": 730.2366943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7971411347389221, "cells": [{"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 138, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.79608154296875, "t": 754.73193359375, "r": 517.90582, "b": 763.9072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521042704582214, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 138, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0982055664062, "t": 754.3765869140625, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163233041763306, "cells": [{"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "123"}, {"label": "code", "id": 2, "page_no": 138, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.7338981628418, "t": 71.67296999999996, "r": 546.53668, "b": 730.2366943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7971411347389221, "cells": [{"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}]}, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1"}], "body": [{"label": "code", "id": 2, "page_no": 138, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.7338981628418, "t": 71.67296999999996, "r": 546.53668, "b": 730.2366943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7971411347389221, "cells": [{"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}]}, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 138, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.79608154296875, "t": 754.73193359375, "r": 517.90582, "b": 763.9072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521042704582214, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 138, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0982055664062, "t": 754.3765869140625, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163233041763306, "cells": [{"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "123"}]}}, {"page_no": 139, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 139, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 139, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 139, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 139, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 139, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 139, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 140, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 256.8621520996094, "t": 754.7630004882812, "r": 517.90582, "b": 763.9440307617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9532458186149597, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1473999023438, "t": 754.3292846679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204425811767578, "cells": [{"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 63.12764358520508, "t": 70.03921508789062, "r": 528.59698, "b": 600.8012084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.867974579334259, "cells": [{"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 140, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.8621520996094, "t": 754.7630004882812, "r": 517.90582, "b": 763.9440307617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9532458186149597, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 140, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1473999023438, "t": 754.3292846679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204425811767578, "cells": [{"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "125"}, {"label": "code", "id": 2, "page_no": 140, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.12764358520508, "t": 70.03921508789062, "r": 528.59698, "b": 600.8012084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.867974579334259, "cells": [{"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */"}], "body": [{"label": "code", "id": 2, "page_no": 140, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.12764358520508, "t": 70.03921508789062, "r": 528.59698, "b": 600.8012084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.867974579334259, "cells": [{"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 140, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.8621520996094, "t": 754.7630004882812, "r": 517.90582, "b": 763.9440307617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9532458186149597, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 140, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1473999023438, "t": 754.3292846679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204425811767578, "cells": [{"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "125"}]}}, {"page_no": 141, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.55541229248047, "t": 754.0760498046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922152578830719, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.59571838378906, "t": 754.413818359375, "r": 340.1140441894531, "b": 764.1231079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9446555376052856, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 141, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.55541229248047, "t": 754.0760498046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922152578830719, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "126"}, {"label": "page_footer", "id": 1, "page_no": 141, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59571838378906, "t": 754.413818359375, "r": 340.1140441894531, "b": 764.1231079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9446555376052856, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 141, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.55541229248047, "t": 754.0760498046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922152578830719, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "126"}, {"label": "page_footer", "id": 1, "page_no": 141, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59571838378906, "t": 754.413818359375, "r": 340.1140441894531, "b": 764.1231079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9446555376052856, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 142, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.680240631103516, "t": 754.7608032226562, "r": 257.24335, "b": 764.109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9499529600143433, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1651000976562, "t": 754.2824096679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230133295059204, "cells": [{"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.91483306884766, "r": 299.20081, "b": 96.60542297363281, "coord_origin": "TOPLEFT"}, "confidence": 0.9644432663917542, "cells": [{"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75408935546875, "t": 132.06002807617188, "r": 530.0675, "b": 154.35791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9717119932174683, "cells": [{"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.5552978515625, "t": 181.37648010253906, "r": 205.97418, "b": 197.83837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9622768759727478, "cells": [{"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.73150634765625, "t": 213.93795776367188, "r": 413.18115, "b": 224.1931915283203, "coord_origin": "TOPLEFT"}, "confidence": 0.9328869581222534, "cells": [{"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.81341552734375, "t": 230.74234008789062, "r": 414.05658, "b": 240.96536254882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9425700902938843, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 150.4676513671875, "t": 248.0777587890625, "r": 545.99457, "b": 270.6806945800781, "coord_origin": "TOPLEFT"}, "confidence": 0.7933239340782166, "cells": [{"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.8154296875, "t": 276.60491943359375, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9148671627044678, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.4538116455078, "t": 294.1251525878906, "r": 536.3565673828125, "b": 304.4701232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.7976768016815186, "cells": [{"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.64071655273438, "t": 310.49432373046875, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}, "confidence": 0.9118204712867737, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.3872833251953, "t": 328.0414123535156, "r": 545.99457, "b": 349.66357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.7908105850219727, "cells": [{"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.63323974609375, "t": 356.6874694824219, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9359384179115295, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 150.4163360595703, "t": 374.12347412109375, "r": 545.99457, "b": 396.02581787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.7968815565109253, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.4580078125, "t": 402.4890441894531, "r": 346.3946838378906, "b": 413.17169189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9383506178855896, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 150.8020477294922, "t": 419.9049377441406, "r": 546.1087036132812, "b": 442.11077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7104644179344177, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 64.61199188232422, "t": 469.3950500488281, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9526883959770203, "cells": [{"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 135.812255859375, "t": 501.83233642578125, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}, "confidence": 0.9205816388130188, "cells": [{"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.69252014160156, "t": 518.7003784179688, "r": 457.80386, "b": 528.908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.928091824054718, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 150.2280731201172, "t": 536.205322265625, "r": 545.99457, "b": 557.8463745117188, "coord_origin": "TOPLEFT"}, "confidence": 0.7536969184875488, "cells": [{"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.60523986816406, "t": 564.5147705078125, "r": 287.6324768066406, "b": 575.3772583007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9084469079971313, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 150.68099975585938, "t": 582.1913452148438, "r": 291.11823, "b": 592.1077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6532412171363831, "cells": [{"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.6503448486328, "t": 598.7340698242188, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}, "confidence": 0.9109565615653992, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 150.75747680664062, "t": 615.7659912109375, "r": 266.09869, "b": 625.9202880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6917186975479126, "cells": [{"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 142, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.680240631103516, "t": 754.7608032226562, "r": 257.24335, "b": 764.109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9499529600143433, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 142, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1651000976562, "t": 754.2824096679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230133295059204, "cells": [{"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "127"}, {"label": "section_header", "id": 2, "page_no": 142, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.91483306884766, "r": 299.20081, "b": 96.60542297363281, "coord_origin": "TOPLEFT"}, "confidence": 0.9644432663917542, "cells": [{"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Related publications"}, {"label": "text", "id": 3, "page_no": 142, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75408935546875, "t": 132.06002807617188, "r": 530.0675, "b": 154.35791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9717119932174683, "cells": [{"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}]}, "text": "The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper."}, {"label": "section_header", "id": 4, "page_no": 142, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.5552978515625, "t": 181.37648010253906, "r": 205.97418, "b": 197.83837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9622768759727478, "cells": [{"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Other publications"}, {"label": "text", "id": 5, "page_no": 142, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.73150634765625, "t": 213.93795776367188, "r": 413.18115, "b": 224.1931915283203, "coord_origin": "TOPLEFT"}, "confidence": 0.9328869581222534, "cells": [{"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "These publications are relevant as further information sources:"}, {"label": "list_item", "id": 6, "page_no": 142, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.81341552734375, "t": 230.74234008789062, "r": 414.05658, "b": 240.96536254882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9425700902938843, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM DB2 for i indexing methods and strategies white paper:"}, {"label": "list_item", "id": 7, "page_no": 142, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.4676513671875, "t": 248.0777587890625, "r": 545.99457, "b": 270.6806945800781, "coord_origin": "TOPLEFT"}, "confidence": 0.7933239340782166, "cells": [{"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies"}, {"label": "list_item", "id": 8, "page_no": 142, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.8154296875, "t": 276.60491943359375, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9148671627044678, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Memo to Users Version 7.2 :"}, {"label": "list_item", "id": 9, "page_no": 142, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.4538116455078, "t": 294.1251525878906, "r": 536.3565673828125, "b": 304.4701232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.7976768016815186, "cells": [{"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "list_item", "id": 10, "page_no": 142, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.64071655273438, "t": 310.49432373046875, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}, "confidence": 0.9118204712867737, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide :"}, {"label": "list_item", "id": 11, "page_no": 142, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3872833251953, "t": 328.0414123535156, "r": 545.99457, "b": 349.66357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.7908105850219727, "cells": [{"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en"}, {"label": "list_item", "id": 12, "page_no": 142, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.63323974609375, "t": 356.6874694824219, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9359384179115295, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide :"}, {"label": "list_item", "id": 13, "page_no": 142, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.4163360595703, "t": 374.12347412109375, "r": 545.99457, "b": 396.02581787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.7968815565109253, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 14, "page_no": 142, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.4580078125, "t": 402.4890441894531, "r": 346.3946838378906, "b": 413.17169189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9383506178855896, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide :"}, {"label": "list_item", "id": 15, "page_no": 142, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 150.8020477294922, "t": 419.9049377441406, "r": 546.1087036132812, "b": 442.11077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7104644179344177, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}, {"label": "section_header", "id": 16, "page_no": 142, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 64.61199188232422, "t": 469.3950500488281, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9526883959770203, "cells": [{"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Online resources"}, {"label": "text", "id": 17, "page_no": 142, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.812255859375, "t": 501.83233642578125, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}, "confidence": 0.9205816388130188, "cells": [{"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}]}, "text": "These websites are relevant as further information sources:"}, {"label": "list_item", "id": 18, "page_no": 142, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.69252014160156, "t": 518.7003784179688, "r": 457.80386, "b": 528.908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.928091824054718, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center:"}, {"label": "list_item", "id": 19, "page_no": 142, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 150.2280731201172, "t": 536.205322265625, "r": 545.99457, "b": 557.8463745117188, "coord_origin": "TOPLEFT"}, "confidence": 0.7536969184875488, "cells": [{"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en"}, {"label": "list_item", "id": 20, "page_no": 142, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.60523986816406, "t": 564.5147705078125, "r": 287.6324768066406, "b": 575.3772583007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9084469079971313, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Identity Theft Resource Center"}, {"label": "list_item", "id": 21, "page_no": 142, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 150.68099975585938, "t": 582.1913452148438, "r": 291.11823, "b": 592.1077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6532412171363831, "cells": [{"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.idtheftcenter.org"}, {"label": "list_item", "id": 22, "page_no": 142, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.6503448486328, "t": 598.7340698242188, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}, "confidence": 0.9109565615653992, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ponemon Institute"}, {"label": "list_item", "id": 23, "page_no": 142, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 150.75747680664062, "t": 615.7659912109375, "r": 266.09869, "b": 625.9202880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6917186975479126, "cells": [{"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ponemon.org/"}], "body": [{"label": "section_header", "id": 2, "page_no": 142, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.91483306884766, "r": 299.20081, "b": 96.60542297363281, "coord_origin": "TOPLEFT"}, "confidence": 0.9644432663917542, "cells": [{"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Related publications"}, {"label": "text", "id": 3, "page_no": 142, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75408935546875, "t": 132.06002807617188, "r": 530.0675, "b": 154.35791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9717119932174683, "cells": [{"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}]}, "text": "The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper."}, {"label": "section_header", "id": 4, "page_no": 142, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.5552978515625, "t": 181.37648010253906, "r": 205.97418, "b": 197.83837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9622768759727478, "cells": [{"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Other publications"}, {"label": "text", "id": 5, "page_no": 142, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.73150634765625, "t": 213.93795776367188, "r": 413.18115, "b": 224.1931915283203, "coord_origin": "TOPLEFT"}, "confidence": 0.9328869581222534, "cells": [{"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "These publications are relevant as further information sources:"}, {"label": "list_item", "id": 6, "page_no": 142, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.81341552734375, "t": 230.74234008789062, "r": 414.05658, "b": 240.96536254882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9425700902938843, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM DB2 for i indexing methods and strategies white paper:"}, {"label": "list_item", "id": 7, "page_no": 142, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.4676513671875, "t": 248.0777587890625, "r": 545.99457, "b": 270.6806945800781, "coord_origin": "TOPLEFT"}, "confidence": 0.7933239340782166, "cells": [{"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies"}, {"label": "list_item", "id": 8, "page_no": 142, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.8154296875, "t": 276.60491943359375, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9148671627044678, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Memo to Users Version 7.2 :"}, {"label": "list_item", "id": 9, "page_no": 142, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.4538116455078, "t": 294.1251525878906, "r": 536.3565673828125, "b": 304.4701232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.7976768016815186, "cells": [{"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "list_item", "id": 10, "page_no": 142, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.64071655273438, "t": 310.49432373046875, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}, "confidence": 0.9118204712867737, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide :"}, {"label": "list_item", "id": 11, "page_no": 142, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3872833251953, "t": 328.0414123535156, "r": 545.99457, "b": 349.66357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.7908105850219727, "cells": [{"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en"}, {"label": "list_item", "id": 12, "page_no": 142, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.63323974609375, "t": 356.6874694824219, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9359384179115295, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide :"}, {"label": "list_item", "id": 13, "page_no": 142, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.4163360595703, "t": 374.12347412109375, "r": 545.99457, "b": 396.02581787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.7968815565109253, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 14, "page_no": 142, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.4580078125, "t": 402.4890441894531, "r": 346.3946838378906, "b": 413.17169189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9383506178855896, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide :"}, {"label": "list_item", "id": 15, "page_no": 142, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 150.8020477294922, "t": 419.9049377441406, "r": 546.1087036132812, "b": 442.11077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7104644179344177, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}, {"label": "section_header", "id": 16, "page_no": 142, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 64.61199188232422, "t": 469.3950500488281, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9526883959770203, "cells": [{"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Online resources"}, {"label": "text", "id": 17, "page_no": 142, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.812255859375, "t": 501.83233642578125, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}, "confidence": 0.9205816388130188, "cells": [{"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}]}, "text": "These websites are relevant as further information sources:"}, {"label": "list_item", "id": 18, "page_no": 142, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.69252014160156, "t": 518.7003784179688, "r": 457.80386, "b": 528.908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.928091824054718, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center:"}, {"label": "list_item", "id": 19, "page_no": 142, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 150.2280731201172, "t": 536.205322265625, "r": 545.99457, "b": 557.8463745117188, "coord_origin": "TOPLEFT"}, "confidence": 0.7536969184875488, "cells": [{"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en"}, {"label": "list_item", "id": 20, "page_no": 142, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.60523986816406, "t": 564.5147705078125, "r": 287.6324768066406, "b": 575.3772583007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9084469079971313, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Identity Theft Resource Center"}, {"label": "list_item", "id": 21, "page_no": 142, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 150.68099975585938, "t": 582.1913452148438, "r": 291.11823, "b": 592.1077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6532412171363831, "cells": [{"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.idtheftcenter.org"}, {"label": "list_item", "id": 22, "page_no": 142, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.6503448486328, "t": 598.7340698242188, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}, "confidence": 0.9109565615653992, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ponemon Institute"}, {"label": "list_item", "id": 23, "page_no": 142, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 150.75747680664062, "t": 615.7659912109375, "r": 266.09869, "b": 625.9202880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6917186975479126, "cells": [{"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ponemon.org/"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 142, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.680240631103516, "t": 754.7608032226562, "r": 257.24335, "b": 764.109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9499529600143433, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 142, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1651000976562, "t": 754.2824096679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230133295059204, "cells": [{"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "127"}]}}, {"page_no": 143, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.5219497680664, "t": 754.391845703125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169230461120605, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.66630554199219, "t": 754.5946655273438, "r": 339.9003601074219, "b": 764.0750732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9336705803871155, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.73175811767578, "t": 70.09744262695312, "r": 172.86197, "b": 86.14898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.51719665527344, "t": 102.7090072631836, "r": 262.60373, "b": 113.38191986083984, "coord_origin": "TOPLEFT"}, "confidence": 0.8567046523094177, "cells": [{"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 120.41547393798828, "r": 211.73904, "b": 130.2474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8032501339912415, "cells": [{"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.5938720703125, "t": 141.32887268066406, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}, "confidence": 0.7982341051101685, "cells": [{"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 159.01025390625, "r": 216.71904000000004, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8333450555801392, "cells": [{"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 143, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.5219497680664, "t": 754.391845703125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169230461120605, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "128"}, {"label": "page_footer", "id": 1, "page_no": 143, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.66630554199219, "t": 754.5946655273438, "r": 339.9003601074219, "b": 764.0750732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9336705803871155, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 143, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.73175811767578, "t": 70.09744262695312, "r": 172.86197, "b": 86.14898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Help from IBM"}, {"label": "text", "id": 3, "page_no": 143, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.51719665527344, "t": 102.7090072631836, "r": 262.60373, "b": 113.38191986083984, "coord_origin": "TOPLEFT"}, "confidence": 0.8567046523094177, "cells": [{"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Support and downloads"}, {"label": "text", "id": 4, "page_no": 143, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 120.41547393798828, "r": 211.73904, "b": 130.2474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8032501339912415, "cells": [{"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /support"}, {"label": "text", "id": 5, "page_no": 143, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.5938720703125, "t": 141.32887268066406, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}, "confidence": 0.7982341051101685, "cells": [{"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Global Services"}, {"label": "text", "id": 6, "page_no": 143, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 159.01025390625, "r": 216.71904000000004, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8333450555801392, "cells": [{"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /services"}], "body": [{"label": "section_header", "id": 2, "page_no": 143, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.73175811767578, "t": 70.09744262695312, "r": 172.86197, "b": 86.14898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Help from IBM"}, {"label": "text", "id": 3, "page_no": 143, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.51719665527344, "t": 102.7090072631836, "r": 262.60373, "b": 113.38191986083984, "coord_origin": "TOPLEFT"}, "confidence": 0.8567046523094177, "cells": [{"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Support and downloads"}, {"label": "text", "id": 4, "page_no": 143, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 120.41547393798828, "r": 211.73904, "b": 130.2474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8032501339912415, "cells": [{"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /support"}, {"label": "text", "id": 5, "page_no": 143, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.5938720703125, "t": 141.32887268066406, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}, "confidence": 0.7982341051101685, "cells": [{"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Global Services"}, {"label": "text", "id": 6, "page_no": 143, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 159.01025390625, "r": 216.71904000000004, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8333450555801392, "cells": [{"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /services"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 143, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.5219497680664, "t": 754.391845703125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169230461120605, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "128"}, {"label": "page_footer", "id": 1, "page_no": 143, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.66630554199219, "t": 754.5946655273438, "r": 339.9003601074219, "b": 764.0750732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9336705803871155, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 144, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 145, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 145, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 145, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 145, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 145, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 145, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 145, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 145, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 145, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 145, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 145, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 145, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 145, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 145, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 145, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 145, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 145, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 145, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 145, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 145, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 145, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 145, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 145, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 145, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 145, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 145, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 145, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 145, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 145, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5110_sampled.doctags.txt b/tests/data/groundtruth/docling_v1/redp5110_sampled.doctags.txt new file mode 100644 index 00000000..01aa36cb --- /dev/null +++ b/tests/data/groundtruth/docling_v1/redp5110_sampled.doctags.txt @@ -0,0 +1,299 @@ + +Front cover +
+ +
+Row and Column Access Control Support in IBM DB2 for i +Implement roles and separation of duties +Leverage row permissions on the database +Protect columns by defining column masks +Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan +Redpaper +Contents + + +Notices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii +Trademarks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii +DB2 for i Center of Excellence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix +Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi +Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi +Now you can become a published author, too!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii +Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii +Stay connected to IBM Redbooks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv +Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 +1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 +1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 +1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 +1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 +1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .5 +Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 +2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 +2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .8 +2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .8 +2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .9 +2.1.4 Database Information function: QIBM_DB_SYSMON. . . . . . . . . . . . . . . . . . . . . . 9 +2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .9 +2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 +2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .10 +2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 +Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 +3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .14 +3.1.1 Row permission and column mask definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . 14 +3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 +3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 +3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 +3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 +3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 +3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .21 +. . . . . . . . . . . . . . . . . . . . . . . . 22 +3.5 SELECT, INSERT, and UPDATE behavior with RCAC +3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .23 +3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .23 +3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 +3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 +3.6.5 Defining and creating column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 +3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 +3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 +3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .32 +
+DB2 for i Center of Excellence +Solution Brief IBM Systems Lab Services and Training +
+ +
+Highlights +- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +
+ +
+Power Services +DB2 for i Center of Excellence +Expert help to achieve your business requirements +We build confident, satisfied clients +No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. +Because no one else is IBM. +With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. +Who we are, some of what we do +Global CoE engagements cover topics including: +- r Database performance and scalability +- r Advanced SQL knowledge and skills transfer +- r Business intelligence and analytics +- r DB2 Web Query +- r Query/400 modernization for better reporting and analysis capabilities +- r Database modernization and re-engineering +- r Data-centric architecture and design +- r Extremely large database and overcoming limits to growth +- r ISV education and enablement +Preface +This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. +This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. +
+ +
+
+ +
+Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. +Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . +Authors +
+ +
+Chapter 1. +1 +Securing and protecting IBM DB2 data +Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. +Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. +This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: +- GLYPH Security fundamentals +- GLYPH Current state of IBM i security +- GLYPH DB2 for i security controls +1.1 Security fundamentals +Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: +- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. +- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. +A security policy is what defines whether the system and its settings are secure (or not). +- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. +With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. +1.2 Current state of IBM i security +Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. +Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. +Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. +Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. +1.3.1 Existing row and column control +Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. +Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. +Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. +Figure 1-2 Existing row and column controls +
+ +Figure 1-2 Existing row and column controls +
+2.1.6 Change Function Usage CL command +The following CL commands can be used to work with, display, or change function usage IDs: +- GLYPH Work Function Usage ( WRKFCNUSG ) +- GLYPH Change Function Usage ( CHGFCNUSG ) +- GLYPH Display Function Usage ( DSPFCNUSG ) +For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: +CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) +2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view +The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view. +Table 2-1 FUNCTION_USAGE view + + + +Column nameData typeDescription +FUNCTION_IDVARCHAR(30)ID of the function. +USER_NAMEVARCHAR(10)Name of the user profile that has a usage setting for this function. +USAGEVARCHAR(7)Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. +USER_TYPEVARCHAR(5)Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. +
Table 2-1 FUNCTION_USAGE view
+To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. +Example 2-1 Query to determine who has authority to define and manage RCAC +SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name; +2.2 Separation of duties +Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. +For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. +In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. +QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. +QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. +A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. +Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. +Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority + + + +User action*JOBCTLQIBM_DB_SECADMQIBM_DB_SQLADMQIBM_DB_SYSMONNo Authority +SET CURRENT DEGREE (SQL statement)XX +CHGQRYA command targeting a different user's jobXX +STRDBMON or ENDDBMON commands targeting a different user's jobXX +STRDBMON or ENDDBMON commands targeting a job that matches the current userXXXX +QUSRJOBI() API format 900 or System i Navigator's SQL Details for JobXXX +Visual Explain within Run SQL scriptsXXXX +Visual Explain outside of Run SQL scriptsXX +ANALYZE PLAN CACHE procedureXX +DUMP PLAN CACHE procedureXX +MODIFY PLAN CACHE procedureXX +MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)XX +CHANGE PLAN CACHE SIZE procedure (currently does not check authority)XX +
Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority
+The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules. +Figure 3-1 CREATE PERMISSION SQL statement +
+ +The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement +
+Column mask +A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. +Table 3-1 summarizes these special registers and their values. +Table 3-1 Special registers and their corresponding values + + + +Special registerCorresponding value +USER or SESSION_USERThe effective user of the thread excluding adopted authority. +CURRENT_USERThe effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. +SYSTEM_USERThe authorization ID that initiated the connection. +
Table 3-1 Special registers and their corresponding values
+Figure 3-5 shows the difference in the special register values when an adopted authority is used: +- GLYPH A user connects to the server using the user profile ALICE. +- GLYPH USER and CURRENT USER initially have the same value of ALICE. +- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. +- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. +- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. +Figure 3-5 Special registers and adopted authority +
+ +Figure 3-5 Special registers and adopted authority +
+3.2.2 Built-in global variables +Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. +IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. +Table 3-2 lists the nine built-in global variables. +Table 3-2 Built-in global variables + + + +Global variableTypeDescription +CLIENT_HOSTVARCHAR(255)Host name of the current client as returned by the system +CLIENT_IPADDRVARCHAR(128)IP address of the current client as returned by the system +CLIENT_PORTINTEGERPort used by the current client to communicate with the server +PACKAGE_NAMEVARCHAR(128)Name of the currently running package +PACKAGE_SCHEMAVARCHAR(128)Schema name of the currently running package +PACKAGE_VERSIONVARCHAR(64)Version identifier of the currently running package +ROUTINE_SCHEMAVARCHAR(128)Schema name of the currently running routine +ROUTINE_SPECIFIC_NAMEVARCHAR(128)Name of the currently running routine +ROUTINE_TYPECHAR(1)Type of the currently running routine +
Table 3-2 Built-in global variables
+3.3 VERIFY_GROUP_FOR_USER function +The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. +If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. +Here is an example of using the VERIFY_GROUP_FOR_USER function: +- 1. There are user profiles for MGR, JANE, JUDY, and TONY. +- 2. The user profile JANE specifies a group profile of MGR. +- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: +VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY') +RETURN CASE +WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ; +- 2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones: +- -Human Resources can see the unmasked TAX_ID of the employees. +- -Employees can see only their own unmasked TAX_ID. +- -Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). +- -Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX. +- To implement this column mask, run the SQL statement that is shown in Example 3-9. +Example 3-9 Creating a mask on the TAX_ID column +CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; +- 3. Figure 3-10 shows the masks that are created in the HR_SCHEMA. +Figure 3-10 Column masks shown in System i Navigator +
+ +Figure 3-10 Column masks shown in System i Navigator +
+3.6.6 Activating RCAC +Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: +- 1. Run the SQL statements that are shown in Example 3-10. +Example 3-10 Activating RCAC on the EMPLOYEES table +- /* Active Row Access Control (permissions) */ +/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; +*/ +- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . +Figure 3-11 Selecting the EMPLOYEES table from System i Navigator +
+ +Figure 3-11 Selecting the EMPLOYEES table from System i Navigator +
+- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. +Figure 4-68 Visual Explain with RCAC enabled +
+ +Figure 4-68 Visual Explain with RCAC enabled +
+- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. +Figure 4-69 Index advice with no RCAC +
+ +Figure 4-69 Index advice with no RCAC +
+THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; +Back cover +Row and Column Access Control Support in IBM DB2 for i +Implement roles and separation of duties +Leverage row permissions on the database +Protect columns by defining column masks +This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. +
+ +
+
+ +
+INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION +BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE +IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. +For more information: ibm.com /redbooks +
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5110_sampled.json b/tests/data/groundtruth/docling_v1/redp5110_sampled.json new file mode 100644 index 00000000..88ca21fa --- /dev/null +++ b/tests/data/groundtruth/docling_v1/redp5110_sampled.json @@ -0,0 +1 @@ +{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "redp5110_sampled.pdf", "filename-prov": null, "document-hash": "2f6bc92861997d1434c069040dc63447c3e415e8e9eadbd1a8129ba2327ddba5", "#-pages": 18, "collection-name": null, "description": null, "page-hashes": [{"hash": "87bfb77a4cff4ea497ce5cb77e341706a21c70ce31418b976f04908220b7bc1e", "model": "default", "page": 1}, {"hash": "0c2f740de34230eddd3a1b82042820cf10cdb531c33b3652c221269b166dda18", "model": "default", "page": 2}, {"hash": "29ed89c83dd6a7a480da597d56fa5b4f143185929165d96c10f9507692f26422", "model": "default", "page": 3}, {"hash": "6a4c21e7bd1a152501214f7b97fba0a7957892e8a27fb0c9a0b234e6711d0bf4", "model": "default", "page": 4}, {"hash": "98d99d46a4299177161f858ea18bb4e4616dc8090935ed643e4698abde7dc2f7", "model": "default", "page": 5}, {"hash": "4dc8738c880ac38f2f5db63734cc40037c2eca11fd9a7ed8772f8c39b2d9392d", "model": "default", "page": 6}, {"hash": "96975908473aa87150613f7983bad4c6b4f3964d102667d9c041ee1fb11a5a70", "model": "default", "page": 7}, {"hash": "eb34465d03a7271be9fb7f12da6a8f00ceb4c29619583205ec0bd4dd52339dbd", "model": "default", "page": 8}, {"hash": "2cd521c0ff1e9fddb17a0c9866f1fc5939e7e487023de0e5437c427e8d94b75f", "model": "default", "page": 9}, {"hash": "6c91461cd03b5b5c1da4159bb1b249414285cb850cd470094c35688cb173d5c0", "model": "default", "page": 10}, {"hash": "539c4a50ee2387942d228c663b8e1effa439736a2d281bd943bf5a44ebe211ea", "model": "default", "page": 11}, {"hash": "2f540152e2b5d81120b795f81891ec81e34a3d01e179690eb4ffa24ad8c99980", "model": "default", "page": 12}, {"hash": "22a94907fc652c858ddf04a9bcf252c8dbe136e26c6ba58374a58e38f224f2a5", "model": "default", "page": 13}, {"hash": "fd69abc57759fd5ce42ea513a500214fde4ec9a5b96a4526228aef53a4928d19", "model": "default", "page": 14}, {"hash": "712a230347f0b94199888825e9b7a192b9bbca8600088d2b3bcce4a2adf3648e", "model": "default", "page": 15}, {"hash": "ceb256886852658b9ea5263c6c6a0c9bef26128b123a4885cf24385cb1edc6e6", "model": "default", "page": 16}, {"hash": "373513373f60d79806f33aaaa001b81ba2c88db50c9a509afcd36af3c2c60fd0", "model": "default", "page": 17}, {"hash": "ada87644543d153b0bf07dd260e893614224b0825d99f1740b0bafde6e3c996f", "model": "default", "page": 18}]}, "main-text": [{"prov": [{"bbox": [287.82000732421875, 741.251953125, 418.83355712890625, 763.4519653320312], "page": 1, "span": [0, 11], "__ref_s3_data": null}], "text": "Front cover", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/0"}, {"prov": [{"bbox": [35.68840408325195, 625.594482421875, 584.6428833007812, 709.605712890625], "page": 1, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [35.0073127746582, 466.4394226074219, 216.00064086914062, 497.2061767578125], "page": 1, "span": [0, 40], "__ref_s3_data": null}], "text": "Implement roles and separation of duties", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [34.56448745727539, 412.4388732910156, 202.45404052734375, 443.0459289550781], "page": 1, "span": [0, 40], "__ref_s3_data": null}], "text": "Leverage row permissions on the database", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [35.171409606933594, 358.4383239746094, 195.27529907226562, 389.3459167480469], "page": 1, "span": [0, 40], "__ref_s3_data": null}], "text": "Protect columns by defining column masks", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [36.894657135009766, 26.895000457763672, 164.45849609375, 42.1337890625], "page": 1, "span": [0, 17], "__ref_s3_data": null}], "text": "ibm.com /redbooks", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [497.0279846191406, 92.828369140625, 581.8246459960938, 218.1163330078125], "page": 1, "span": [0, 115], "__ref_s3_data": null}], "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [314.70001220703125, 18.227041244506836, 580.52001953125, 80.49143981933594], "page": 1, "span": [0, 8], "__ref_s3_data": null}], "text": "Redpaper", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.6857681274414, 695.9519653320312, 168.73440551757812, 718.98193359375], "page": 2, "span": [0, 8], "__ref_s3_data": null}], "text": "Contents", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/0"}, {"prov": [{"bbox": [63.751060485839844, 27.8984375, 257.24334716796875, 37.30303955078125], "page": 2, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [538.3257446289062, 27.93828010559082, 547.25927734375, 37.91693115234375], "page": 2, "span": [0, 3], "__ref_s3_data": null}], "text": "iii", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.80000305175781, 706.416015625, 235.86239624023438, 717.5160522460938], "page": 3, "span": [0, 30], "__ref_s3_data": null}], "text": "DB2 for i Center of Excellence", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [93.67039489746094, 636.66357421875, 233.99972534179688, 654.3631591796875], "page": 3, "span": [0, 52], "__ref_s3_data": null}], "text": "Solution Brief IBM Systems Lab Services and Training", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/1"}, {"prov": [{"bbox": [144.19781494140625, 454.64495849609375, 188.74681091308594, 464.93798828125], "page": 3, "span": [0, 10], "__ref_s3_data": null}], "text": "Highlights", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [144.4553985595703, 433.3105773925781, 242.87388610839844, 447.962890625], "page": 3, "span": [0, 532], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [144.40879821777344, 402.7626953125, 259.22869873046875, 425.3538513183594], "page": 3, "span": [0, 876], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [144.23313903808594, 379.6138916015625, 249.8356170654297, 394.8355407714844], "page": 3, "span": [0, 672], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [144.35208129882812, 357.3323669433594, 234.2516326904297, 371.82550048828125], "page": 3, "span": [0, 613], "__ref_s3_data": null}], "text": "- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "type": "paragraph", "name": "List-item", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/2"}, {"prov": [{"bbox": [460.8193359375, 646.5781860351562, 506.26177978515625, 653.661376953125], "page": 3, "span": [0, 14], "__ref_s3_data": null}], "text": "Power Services", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [280.07391357421875, 515.3794555664062, 463.8094177246094, 554.2871704101562], "page": 3, "span": [0, 30], "__ref_s3_data": null}], "text": "DB2 for i Center of Excellence", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [279.51953125, 503.36505126953125, 483.7276916503906, 514.842529296875], "page": 3, "span": [0, 49], "__ref_s3_data": null}], "text": "Expert help to achieve your business requirements", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.468994140625, 467.1043395996094, 443.375732421875, 476.9213562011719], "page": 3, "span": [0, 37], "__ref_s3_data": null}], "text": "We build confident, satisfied clients", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [279.530517578125, 446.4922790527344, 488.1546630859375, 464.73529052734375], "page": 3, "span": [0, 122], "__ref_s3_data": null}], "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [280.0453186035156, 427.2699890136719, 367.8602294921875, 435.4290466308594], "page": 3, "span": [0, 27], "__ref_s3_data": null}], "text": "Because no one else is IBM.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.70794677734375, 366.6907958984375, 500.321044921875, 415.73895263671875], "page": 3, "span": [0, 318], "__ref_s3_data": null}], "text": "With combined experiences and direct access to development groups, we're the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.6336669921875, 345.1319274902344, 435.1236572265625, 354.8772277832031], "page": 3, "span": [0, 30], "__ref_s3_data": null}], "text": "Who we are, some of what we do", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [279.4736328125, 334.5338134765625, 434.56317138671875, 342.7397766113281], "page": 3, "span": [0, 46], "__ref_s3_data": null}], "text": "Global CoE engagements cover topics including:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [279.74200439453125, 315.4241027832031, 402.1675109863281, 323.6339416503906], "page": 3, "span": [0, 38], "__ref_s3_data": null}], "text": "- r Database performance and scalability", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.7657165527344, 305.21771240234375, 424.9964599609375, 313.35101318359375], "page": 3, "span": [0, 44], "__ref_s3_data": null}], "text": "- r Advanced SQL knowledge and skills transfer", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.9660339355469, 294.8087158203125, 392.2996520996094, 302.5164489746094], "page": 3, "span": [0, 37], "__ref_s3_data": null}], "text": "- r Business intelligence and analytics", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.9432067871094, 284.7392272949219, 339.94354248046875, 292.4297180175781], "page": 3, "span": [0, 15], "__ref_s3_data": null}], "text": "- r DB2 Web Query", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.68328857421875, 274.50201416015625, 504.21795654296875, 282.5703125], "page": 3, "span": [0, 72], "__ref_s3_data": null}], "text": "- r Query/400 modernization for better reporting and analysis capabilities", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.66998291015625, 263.96942138671875, 423.002197265625, 271.96844482421875], "page": 3, "span": [0, 43], "__ref_s3_data": null}], "text": "- r Database modernization and re-engineering", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.7203674316406, 254.12164306640625, 400.07391357421875, 262.03643798828125], "page": 3, "span": [0, 38], "__ref_s3_data": null}], "text": "- r Data-centric architecture and design", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.7815856933594, 244.1992645263672, 467.2125549316406, 252.1336669921875], "page": 3, "span": [0, 58], "__ref_s3_data": null}], "text": "- r Extremely large database and overcoming limits to growth", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [279.89080810546875, 234.0165557861328, 382.3631591796875, 241.97698974609375], "page": 3, "span": [0, 30], "__ref_s3_data": null}], "text": "- r ISV education and enablement", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.80000305175781, 695.9519653320312, 151.46160888671875, 718.8968505859375], "page": 4, "span": [0, 7], "__ref_s3_data": null}], "text": "Preface", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.75503540039062, 590.1392822265625, 547.3082275390625, 660.085693359375], "page": 4, "span": [0, 469], "__ref_s3_data": null}], "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.94647216796875, 531.8143310546875, 546.4656982421875, 577.9362182617188], "page": 4, "span": [0, 309], "__ref_s3_data": null}], "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.71319580078125, 449.8482971191406, 547.2366943359375, 472.1881408691406], "page": 4, "span": [0, 172], "__ref_s3_data": null}], "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/3"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/4"}, {"prov": [{"bbox": [63.724002838134766, 27.89178466796875, 257.24334716796875, 37.29620361328125], "page": 4, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [538.058349609375, 27.93828010559082, 547.2503051757812, 37.60198974609375], "page": 4, "span": [0, 2], "__ref_s3_data": null}], "text": "xi", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [262.6522521972656, 275.06854248046875, 541.2507934570312, 417.312744140625], "page": 4, "span": [0, 684], "__ref_s3_data": null}], "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [262.4736328125, 111.162841796875, 541.2737426757812, 265.49169921875], "page": 4, "span": [0, 726], "__ref_s3_data": null}], "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com .", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.22550201416016, 488.9364013671875, 125.36660766601562, 504.8105773925781], "page": 4, "span": [0, 7], "__ref_s3_data": null}], "text": "Authors", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/5"}, {"prov": [{"bbox": [81.0, 517.019287109375, 115.13253021240234, 523.457275390625], "page": 5, "span": [0, 10], "__ref_s3_data": null}], "text": "Chapter 1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [500.3999938964844, 661.8682861328125, 522.6177368164062, 699.3392333984375], "page": 5, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.68006896972656, 482.1217956542969, 547.3047485351562, 538.7101440429688], "page": 5, "span": [0, 36], "__ref_s3_data": null}], "text": "Securing and protecting IBM DB2 data", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.15219116210938, 361.62640380859375, 547.2540283203125, 444.024658203125], "page": 5, "span": [0, 648], "__ref_s3_data": null}], "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.05917358398438, 303.55853271484375, 527.206298828125, 349.8846435546875], "page": 5, "span": [0, 304], "__ref_s3_data": null}], "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.5961456298828, 270.1002197265625, 547.1551513671875, 291.9596862792969], "page": 5, "span": [0, 122], "__ref_s3_data": null}], "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.86915588378906, 252.9566650390625, 250.23167419433594, 263.29638671875], "page": 5, "span": [0, 37], "__ref_s3_data": null}], "text": "- GLYPH Security fundamentals", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.742431640625, 240.626708984375, 282.98114013671875, 251.2857666015625], "page": 5, "span": [0, 47], "__ref_s3_data": null}], "text": "- GLYPH Current state of IBM i security", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.86570739746094, 229.06103515625, 264.8818664550781, 239.55108642578125], "page": 5, "span": [0, 43], "__ref_s3_data": null}], "text": "- GLYPH DB2 for i security controls", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7418975830078, 66.45916748046875, 258.362548828125, 75.71832275390625], "page": 5, "span": [0, 35], "__ref_s3_data": null}], "text": "$^{1 }$http://www.idtheftcenter.org", "type": "footnote", "name": "Footnote", "font": null}, {"prov": [{"bbox": [136.19522094726562, 56.73187255859375, 234.42526245117188, 66.703857421875], "page": 5, "span": [0, 31], "__ref_s3_data": null}], "text": "$^{2 }$http://www.ponemon.org /", "type": "footnote", "name": "Footnote", "font": null}, {"prov": [{"bbox": [63.68400573730469, 27.85699462890625, 257.24334716796875, 37.3408203125], "page": 5, "span": [0, 48], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2014. All rights reserved.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [541.2396240234375, 27.93828010559082, 547.2176513671875, 37.7130126953125], "page": 5, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.33735656738281, 702.3842163085938, 267.40582275390625, 718.60302734375], "page": 6, "span": [0, 25], "__ref_s3_data": null}], "text": "1.1 Security fundamentals", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.23556518554688, 664.178466796875, 545.0048217773438, 685.97265625], "page": 6, "span": [0, 133], "__ref_s3_data": null}], "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.66490173339844, 610.8453369140625, 547.1642456054688, 657.3309326171875], "page": 6, "span": [0, 361], "__ref_s3_data": null}], "text": "- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.2132110595703, 521.4625244140625, 547.2608642578125, 604.0206298828125], "page": 6, "span": [0, 587], "__ref_s3_data": null}], "text": "- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.1995086669922, 504.9290466308594, 541.9920043945312, 515.2373657226562], "page": 6, "span": [0, 90], "__ref_s3_data": null}], "text": "A security policy is what defines whether the system and its settings are secure (or not).", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.4777374267578, 415.4546203613281, 547.1582641601562, 498.18560791015625], "page": 6, "span": [0, 573], "__ref_s3_data": null}], "text": "- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.90879821777344, 381.6918640136719, 535.3616943359375, 403.87713623046875], "page": 6, "span": [0, 179], "__ref_s3_data": null}], "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.44733428955078, 338.3087158203125, 323.3839111328125, 354.5881042480469], "page": 6, "span": [0, 35], "__ref_s3_data": null}], "text": "1.2 Current state of IBM i security", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1368408203125, 275.52197265625, 547.3182373046875, 322.23028564453125], "page": 6, "span": [0, 306], "__ref_s3_data": null}], "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.79974365234375, 206.1400604248047, 547.284423828125, 264.12274169921875], "page": 6, "span": [0, 405], "__ref_s3_data": null}], "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8997802734375, 111.57879638671875, 547.2832641601562, 193.8753662109375], "page": 6, "span": [0, 640], "__ref_s3_data": null}], "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.92394256591797, 27.93828010559082, 72.8219985961914, 37.713134765625], "page": 6, "span": [0, 1], "__ref_s3_data": null}], "text": "2", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.81553649902344, 28.03179931640625, 328.7253723144531, 37.31463623046875], "page": 6, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.09014129638672, 27.93828010559082, 72.8219985961914, 37.92034912109375], "page": 7, "span": [0, 1], "__ref_s3_data": null}], "text": "4", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.84030151367188, 28.01824951171875, 328.7253723144531, 37.3697509765625], "page": 7, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.9996337890625, 638.906982421875, 544.3033447265625, 721.3639526367188], "page": 7, "span": [0, 589], "__ref_s3_data": null}], "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.4480209350586, 606.2725830078125, 301.4690246582031, 619.7714233398438], "page": 7, "span": [0, 37], "__ref_s3_data": null}], "text": "1.3.1 Existing row and column control", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.77957153320312, 534.8919677734375, 541.5673828125, 593.479248046875], "page": 7, "span": [0, 377], "__ref_s3_data": null}], "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9119110107422, 477.10101318359375, 547.4407958984375, 523.368896484375], "page": 7, "span": [0, 340], "__ref_s3_data": null}], "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0379638671875, 430.80120849609375, 547.232666015625, 465.39056396484375], "page": 7, "span": [0, 247], "__ref_s3_data": null}], "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.23910522460938, 91.83807373046875, 317.073486328125, 101.11260986328125], "page": 7, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 1-2 Existing row and column controls", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/6"}, {"prov": [{"bbox": [64.09011840820312, 708.0057373046875, 335.4955139160156, 721.8206787109375], "page": 8, "span": [0, 38], "__ref_s3_data": null}], "text": "2.1.6 Change Function Usage CL command", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.83584594726562, 684.7753295898438, 547.284423828125, 695.3712768554688], "page": 8, "span": [0, 90], "__ref_s3_data": null}], "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6907196044922, 667.4461669921875, 301.5174865722656, 678.259765625], "page": 8, "span": [0, 49], "__ref_s3_data": null}], "text": "- GLYPH Work Function Usage ( WRKFCNUSG )", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7242889404297, 655.3120727539062, 313.39776611328125, 666.0692138671875], "page": 8, "span": [0, 51], "__ref_s3_data": null}], "text": "- GLYPH Change Function Usage ( CHGFCNUSG )", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.71124267578125, 643.400390625, 310.8171081542969, 654.0370483398438], "page": 8, "span": [0, 52], "__ref_s3_data": null}], "text": "- GLYPH Display Function Usage ( DSPFCNUSG )", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.30247497558594, 610.2994995117188, 512.5380249023438, 632.781494140625], "page": 8, "span": [0, 126], "__ref_s3_data": null}], "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3306427001953, 593.1199951171875, 441.59686279296875, 604.0092163085938], "page": 8, "span": [0, 61], "__ref_s3_data": null}], "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.9356689453125, 559.875732421875, 544.4754638671875, 573.8617553710938], "page": 8, "span": [0, 72], "__ref_s3_data": null}], "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.84828186035156, 525.2785034179688, 519.5179443359375, 547.4229736328125], "page": 8, "span": [0, 130], "__ref_s3_data": null}], "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 504.11700439453125, 284.9328308105469, 513.490478515625], "page": 8, "span": [0, 29], "__ref_s3_data": null}], "text": "Table 2-1 FUNCTION_USAGE view", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/1"}, {"prov": [{"bbox": [135.81077575683594, 318.2784729003906, 547.2803955078125, 340.671142578125], "page": 8, "span": [0, 112], "__ref_s3_data": null}], "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.28225708007812, 296.11798095703125, 462.98095703125, 306.23565673828125], "page": 8, "span": [0, 74], "__ref_s3_data": null}], "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 207.56837463378906, 331.67730712890625, 288.34197998046875], "page": 8, "span": [0, 122], "__ref_s3_data": null}], "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.18024444580078, 156.3486328125, 249.59605407714844, 172.6075439453125], "page": 8, "span": [0, 24], "__ref_s3_data": null}], "text": "2.2 Separation of duties", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1588592529297, 81.817626953125, 547.2234497070312, 140.1129150390625], "page": 8, "span": [0, 463], "__ref_s3_data": null}], "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.4488525390625, 27.93828010559082, 78.4020004272461, 37.581298828125], "page": 8, "span": [0, 2], "__ref_s3_data": null}], "text": "10", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.35774993896484, 28.04144287109375, 334.4214172363281, 37.31072998046875], "page": 8, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.92747497558594, 650.9638671875, 542.6943359375, 721.3446044921875], "page": 9, "span": [0, 516], "__ref_s3_data": null}], "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.04833984375, 593.2598266601562, 547.303955078125, 639.4869384765625], "page": 9, "span": [0, 285], "__ref_s3_data": null}], "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.00685119628906, 558.9195556640625, 538.6507568359375, 581.5885009765625], "page": 9, "span": [0, 129], "__ref_s3_data": null}], "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.68702697753906, 513.281005859375, 545.7960205078125, 547.4618530273438], "page": 9, "span": [0, 204], "__ref_s3_data": null}], "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.86065673828125, 455.2619934082031, 539.80712890625, 501.3948669433594], "page": 9, "span": [0, 285], "__ref_s3_data": null}], "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7205352783203, 421.3023681640625, 543.067138671875, 443.39068603515625], "page": 9, "span": [0, 136], "__ref_s3_data": null}], "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.80000305175781, 399.74505615234375, 392.4624328613281, 409.4712829589844], "page": 9, "span": [0, 78], "__ref_s3_data": null}], "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/2"}, {"prov": [{"bbox": [354.4815673828125, 27.89447021484375, 523.5407104492188, 37.05841064453125], "page": 9, "span": [0, 41], "__ref_s3_data": null}], "text": "Chapter 2. Roles and separation of duties", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [536.0808715820312, 27.93828010559082, 547.2591552734375, 37.7674560546875], "page": 9, "span": [0, 2], "__ref_s3_data": null}], "text": "11", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.73501586914062, 699.0009765625, 528.7305908203125, 721.5136108398438], "page": 10, "span": [0, 135], "__ref_s3_data": null}], "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.", "type": "caption", "name": "Caption", "font": null}, {"prov": [{"bbox": [136.3166961669922, 369.1156921386719, 342.55548095703125, 378.73248291015625], "page": 10, "span": [0, 42], "__ref_s3_data": null}], "text": "Figure 3-1 CREATE PERMISSION SQL statement", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/7"}, {"prov": [{"bbox": [136.24984741210938, 340.95599365234375, 215.88082885742188, 353.2656555175781], "page": 10, "span": [0, 11], "__ref_s3_data": null}], "text": "Column mask", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.803466796875, 291.6988525390625, 542.7664794921875, 338.0789489746094], "page": 10, "span": [0, 297], "__ref_s3_data": null}], "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [344.5666809082031, 27.9176025390625, 523.6016235351562, 37.281982421875], "page": 10, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [536.0999755859375, 27.93828010559082, 547.2591552734375, 37.689697265625], "page": 10, "span": [0, 2], "__ref_s3_data": null}], "text": "15", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.82176208496094, 711.1845703125, 412.20758056640625, 721.317138671875], "page": 11, "span": [0, 62], "__ref_s3_data": null}], "text": "Table 3-1 summarizes these special registers and their values.", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [136.8000030517578, 690.0601806640625, 372.7710876464844, 699.2779541015625], "page": 11, "span": [0, 58], "__ref_s3_data": null}], "text": "Table 3-1 Special registers and their corresponding values", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/3"}, {"prov": [{"bbox": [136.3730926513672, 556.2984619140625, 538.493896484375, 578.6343383789062], "page": 11, "span": [0, 97], "__ref_s3_data": null}], "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.5663299560547, 539.2213134765625, 411.36138916015625, 549.454345703125], "page": 11, "span": [0, 75], "__ref_s3_data": null}], "text": "- GLYPH A user connects to the server using the user profile ALICE.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5452880859375, 522.2791137695312, 453.2580871582031, 532.7073974609375], "page": 11, "span": [0, 77], "__ref_s3_data": null}], "text": "- GLYPH USER and CURRENT USER initially have the same value of ALICE.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.3970947265625, 493.01019287109375, 541.4498291015625, 515.4821166992188], "page": 11, "span": [0, 160], "__ref_s3_data": null}], "text": "- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5677947998047, 451.4921875, 547.2167358398438, 486.18145751953125], "page": 11, "span": [0, 253], "__ref_s3_data": null}], "text": "- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.56973266601562, 423.0643615722656, 547.3540649414062, 445.5053405761719], "page": 11, "span": [0, 133], "__ref_s3_data": null}], "text": "- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.22442626953125, 186.25537109375, 342.349853515625, 195.81939697265625], "page": 11, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 3-5 Special registers and adopted authority", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/8"}, {"prov": [{"bbox": [64.079833984375, 154.15521240234375, 247.02536010742188, 167.67864990234375], "page": 11, "span": [0, 31], "__ref_s3_data": null}], "text": "3.2.2 Built-in global variables", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.3346710205078, 119.0784683227539, 518.0011596679688, 141.24090576171875], "page": 11, "span": [0, 161], "__ref_s3_data": null}], "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.17970275878906, 72.93243408203125, 532.3385009765625, 107.37139892578125], "page": 11, "span": [0, 233], "__ref_s3_data": null}], "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [344.5751037597656, 27.93109130859375, 523.6016235351562, 37.29559326171875], "page": 11, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [536.0416870117188, 27.93828010559082, 547.2591552734375, 37.7122802734375], "page": 11, "span": [0, 2], "__ref_s3_data": null}], "text": "19", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.85088348388672, 27.93828010559082, 78.4020004272461, 37.62542724609375], "page": 12, "span": [0, 2], "__ref_s3_data": null}], "text": "20", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31550598144531, 28.02935791015625, 334.4214172363281, 37.3028564453125], "page": 12, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.74647521972656, 711.1533813476562, 342.5477294921875, 721.3251953125], "page": 12, "span": [0, 51], "__ref_s3_data": null}], "text": "Table 3-2 lists the nine built-in global variables.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.80000305175781, 690.177001953125, 201.82247924804688, 699.1653442382812], "page": 12, "span": [0, 35], "__ref_s3_data": null}], "text": "Table 3-2 Built-in global variables", "type": "caption", "name": "Caption", "font": null}, {"name": "Table", "type": "table", "$ref": "#/tables/4"}, {"prov": [{"bbox": [64.34713745117188, 455.0362854003906, 384.3638916015625, 471.380859375], "page": 12, "span": [0, 34], "__ref_s3_data": null}], "text": "3.3 VERIFY_GROUP_FOR_USER function", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8567352294922, 355.704833984375, 547.2347412109375, 438.1376037597656], "page": 12, "span": [0, 576], "__ref_s3_data": null}], "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.01950073242188, 310.2999572753906, 547.2573852539062, 344.5970458984375], "page": 12, "span": [0, 235], "__ref_s3_data": null}], "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.42428588867188, 288.2803955078125, 458.44525146484375, 298.8746337890625], "page": 12, "span": [0, 63], "__ref_s3_data": null}], "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.80001831054688, 271.2408142089844, 406.0775146484375, 281.4947204589844], "page": 12, "span": [0, 57], "__ref_s3_data": null}], "text": "- 1. There are user profiles for MGR, JANE, JUDY, and TONY.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.8521728515625, 253.80572509765625, 396.9881591796875, 264.1617431640625], "page": 12, "span": [0, 58], "__ref_s3_data": null}], "text": "- 2. The user profile JANE specifies a group profile of MGR.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.08595275878906, 225.28138732910156, 536.568603515625, 247.357666015625], "page": 12, "span": [0, 127], "__ref_s3_data": null}], "text": "- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [149.8811798095703, 150.09063720703125, 451.01605224609375, 217.68408203125], "page": 12, "span": [0, 265], "__ref_s3_data": null}], "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [136.79959106445312, 699.5669555664062, 166.73934936523438, 720.341552734375], "page": 13, "span": [0, 11], "__ref_s3_data": null}], "text": "RETURN CASE", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.79959106445312, 530.429443359375, 521.5742797851562, 700.2308349609375], "page": 13, "span": [0, 437], "__ref_s3_data": null}], "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [135.86044311523438, 495.22808837890625, 547.2122192382812, 517.5462646484375], "page": 13, "span": [0, 136], "__ref_s3_data": null}], "text": "- 2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.1599578857422, 478.3014831542969, 469.1528015136719, 488.6722717285156], "page": 13, "span": [0, 62], "__ref_s3_data": null}], "text": "- -Human Resources can see the unmasked TAX_ID of the employees.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.2740936279297, 461.1424560546875, 403.95953369140625, 471.45074462890625], "page": 13, "span": [0, 50], "__ref_s3_data": null}], "text": "- -Employees can see only their own unmasked TAX_ID.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.4427947998047, 432.28228759765625, 545.16845703125, 454.6841735839844], "page": 13, "span": [0, 129], "__ref_s3_data": null}], "text": "- -Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234).", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.51747131347656, 414.8310852050781, 529.463623046875, 425.3660888671875], "page": 13, "span": [0, 77], "__ref_s3_data": null}], "text": "- -Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.69093322753906, 397.82440185546875, 530.060302734375, 408.19866943359375], "page": 13, "span": [0, 82], "__ref_s3_data": null}], "text": "- To implement this column mask, run the SQL statement that is shown in Example 3-9.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.25662231445312, 376.9618835449219, 352.31475830078125, 386.553955078125], "page": 13, "span": [0, 48], "__ref_s3_data": null}], "text": "Example 3-9 Creating a mask on the TAX_ID column", "type": "paragraph", "name": "paragraph", "font": null}, {"prov": [{"bbox": [135.95343017578125, 103.45672607421875, 535.87548828125, 373.4818115234375], "page": 13, "span": [0, 590], "__ref_s3_data": null}], "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [344.5617370605469, 27.86419677734375, 523.6016235351562, 37.32916259765625], "page": 13, "span": [0, 40], "__ref_s3_data": null}], "text": "Chapter 3. Row and Column Access Control", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6422729492188, 27.93828010559082, 547.2591552734375, 37.82464599609375], "page": 13, "span": [0, 2], "__ref_s3_data": null}], "text": "27", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.14459228515625, 710.7732543945312, 449.952392578125, 721.3890380859375], "page": 14, "span": [0, 65], "__ref_s3_data": null}], "text": "- 3. Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.17350769042969, 610.1016235351562, 294.42578125, 619.2543334960938], "page": 14, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 3-10 Column masks shown in System i Navigator", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/9"}, {"prov": [{"bbox": [64.29059600830078, 577.004638671875, 203.98521423339844, 590.3381958007812], "page": 14, "span": [0, 21], "__ref_s3_data": null}], "text": "3.6.6 Activating RCAC", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1686553955078, 529.5360107421875, 547.2256469726562, 563.902587890625], "page": 14, "span": [0, 265], "__ref_s3_data": null}], "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.5933074951172, 513.1278076171875, 409.4788818359375, 523.4700317382812], "page": 14, "span": [0, 57], "__ref_s3_data": null}], "text": "- 1. Run the SQL statements that are shown in Example 3-10.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.31597900390625, 491.5029296875, 375.2909851074219, 501.5721435546875], "page": 14, "span": [0, 51], "__ref_s3_data": null}], "text": "Example 3-10 Activating RCAC on the EMPLOYEES table", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.7803192138672, 473.9972839355469, 376.6766052246094, 484.90777587890625], "page": 14, "span": [0, 45], "__ref_s3_data": null}], "text": "- /* Active Row Access Control (permissions) */", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.8000030517578, 426.5678405761719, 354.86962890625, 471.3420715332031], "page": 14, "span": [0, 131], "__ref_s3_data": null}], "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [365.77313232421875, 462.5672912597656, 376.6766052246094, 471.3420715332031], "page": 14, "span": [0, 2], "__ref_s3_data": null}], "text": "*/", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.87640380859375, 378.27978515625, 540.8014526367188, 412.6735534667969], "page": 14, "span": [0, 231], "__ref_s3_data": null}], "text": "- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition .", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.33819580078125, 134.59954833984375, 348.354736328125, 143.758056640625], "page": 14, "span": [0, 65], "__ref_s3_data": null}], "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/10"}, {"prov": [{"bbox": [63.84088897705078, 27.93828010559082, 78.4020004272461, 37.61041259765625], "page": 14, "span": [0, 2], "__ref_s3_data": null}], "text": "28", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.28304290771484, 28.056396484375, 334.4214172363281, 37.27587890625], "page": 14, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.00341796875, 687.1716918945312, 514.048583984375, 721.5369873046875], "page": 15, "span": [0, 228], "__ref_s3_data": null}], "text": "- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.9990692138672, 302.78125, 327.9913635253906, 311.7919921875], "page": 15, "span": [0, 44], "__ref_s3_data": null}], "text": "Figure 4-68 Visual Explain with RCAC enabled", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/11"}, {"prov": [{"bbox": [136.2928924560547, 251.98651123046875, 547.2394409179688, 286.0349426269531], "page": 15, "span": [0, 232], "__ref_s3_data": null}], "text": "- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.35660552978516, 116.0611572265625, 227.347412109375, 125.32025146484375], "page": 15, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-69 Index advice with no RCAC", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/12"}, {"prov": [{"bbox": [214.30316162109375, 27.9913330078125, 523.5935668945312, 37.2801513671875], "page": 15, "span": [0, 70], "__ref_s3_data": null}], "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.3654174804688, 27.93828010559082, 547.2591552734375, 37.719970703125], "page": 15, "span": [0, 2], "__ref_s3_data": null}], "text": "77", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [62.60613250732422, 84.2364501953125, 500.697265625, 722.6401977539062], "page": 16, "span": [0, 1998], "__ref_s3_data": null}], "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;", "type": "paragraph", "name": "Code", "font": null}, {"prov": [{"bbox": [64.50080871582031, 27.93828010559082, 83.98200225830078, 37.46612548828125], "page": 16, "span": [0, 3], "__ref_s3_data": null}], "text": "124", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [98.63966369628906, 27.98992919921875, 339.882080078125, 37.28564453125], "page": 16, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [287.2200012207031, 741.251953125, 414.24481201171875, 763.4519653320312], "page": 18, "span": [0, 10], "__ref_s3_data": null}], "text": "Back cover", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [26.454715728759766, 650.9618530273438, 447.3600158691406, 720.362060546875], "page": 18, "span": [0, 54], "__ref_s3_data": null}], "text": "Row and Column Access Control Support in IBM DB2 for i", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [26.35322380065918, 524.7881469726562, 127.443603515625, 551.0213623046875], "page": 18, "span": [0, 40], "__ref_s3_data": null}], "text": "Implement roles and separation of duties", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [26.22105598449707, 469.1280212402344, 120.283203125, 508.2904052734375], "page": 18, "span": [0, 40], "__ref_s3_data": null}], "text": "Leverage row permissions on the database", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [26.226221084594727, 413.14801025390625, 121.44960021972656, 452.88134765625], "page": 18, "span": [0, 40], "__ref_s3_data": null}], "text": "Protect columns by defining column masks", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [152.25205993652344, 468.4081115722656, 414.084228515625, 550.1506958007812], "page": 18, "span": [0, 464], "__ref_s3_data": null}], "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [152.3572540283203, 403.090087890625, 414.173828125, 461.4716796875], "page": 18, "span": [0, 309], "__ref_s3_data": null}], "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [170.78512573242188, 152.3369903564453, 232.11270141601562, 161.494140625], "page": 18, "span": [0, 12], "__ref_s3_data": null}], "text": "REDP-5110-00", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/13"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/14"}, {"prov": [{"bbox": [466.3692626953125, 489.8393859863281, 559.809326171875, 544.606201171875], "page": 18, "span": [0, 44], "__ref_s3_data": null}], "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [466.3262939453125, 405.52801513671875, 587.38916015625, 440.5700988769531], "page": 18, "span": [0, 60], "__ref_s3_data": null}], "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [466.1037292480469, 250.36593627929688, 587.5205078125, 393.18768310546875], "page": 18, "span": [0, 323], "__ref_s3_data": null}], "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [466.66748046875, 190.48809814453125, 571.0052490234375, 214.11181640625], "page": 18, "span": [0, 39], "__ref_s3_data": null}], "text": "For more information: ibm.com /redbooks", "type": "paragraph", "name": "Text", "font": null}], "figures": [{"prov": [{"bbox": [513.4560546875, 737.1808471679688, 586.1583251953125, 765.9149169921875], "page": 1, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [143.39866638183594, 506.378662109375, 179.56256103515625, 521.7388916015625], "page": 3, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.16704559326172, 103.87176513671875, 258.77435302734375, 188.49365234375], "page": 3, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [142.52883911132812, 288.79351806640625, 251.47850036621094, 416.9550476074219], "page": 4, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [145.41448974609375, 156.616943359375, 252.08840942382812, 264.7552490234375], "page": 4, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.05508804321289, 553.958984375, 239.62692260742188, 721.5736083984375], "page": 5, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.92466735839844, 103.39019775390625, 546.4456176757812, 416.0727844238281], "page": 7, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 1-2 Existing row and column controls", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.9717559814453, 381.39068603515625, 545.4180908203125, 684.5892944335938], "page": 10, "span": [0, 177], "__ref_s3_data": null}], "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [135.64837646484375, 197.24334716796875, 301.2367248535156, 407.8262939453125], "page": 11, "span": [0, 50], "__ref_s3_data": null}], "text": "Figure 3-5 Special registers and adopted authority", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.801902770996094, 621.9678955078125, 547.11474609375, 696.6175537109375], "page": 14, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 3-10 Column masks shown in System i Navigator", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.98516845703125, 145.86041259765625, 530.0479125976562, 364.0950012207031], "page": 14, "span": [0, 65], "__ref_s3_data": null}], "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.5016632080078, 314.4587707519531, 545.4508666992188, 672.7508544921875], "page": 15, "span": [0, 44], "__ref_s3_data": null}], "text": "Figure 4-68 Visual Explain with RCAC enabled", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.27847290039062, 127.9129638671875, 506.39263916015625, 238.41864013671875], "page": 15, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 4-69 Index advice with no RCAC", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [485.1698303222656, 737.3182983398438, 566.2962036132812, 766.7407836914062], "page": 18, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [474.35540771484375, 602.1873779296875, 592.2726440429688, 711.9486694335938], "page": 18, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}], "tables": [{"prov": [{"bbox": [136.15103149414062, 76.34722900390625, 549.8472290039062, 659.9697265625], "page": 2, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "table", "#-cols": 2, "#-rows": 43, "data": [[{"bbox": [136.8000030517578, 650.1383666992188, 172.89404296875, 659.3513793945312], "spans": [[0, 0]], "text": "Notices", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [175.01951599121094, 650.1383666992188, 547.1898193359375, 659.3513793945312], "spans": [[0, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [136.79901123046875, 637.6585083007812, 189.86537170410156, 646.8715209960938], "spans": [[1, 0]], "text": "Trademarks", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [195.3968505859375, 637.6585083007812, 547.182861328125, 646.8715209960938], "spans": [[1, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [136.79901123046875, 615.1588745117188, 279.3973083496094, 624.3718872070312], "spans": [[2, 0]], "text": "DB2 for i Center of Excellence", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [280.6194152832031, 615.1588745117188, 547.1907958984375, 624.3718872070312], "spans": [[2, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [136.79901123046875, 592.6592407226562, 172.84423828125, 601.8722534179688], "spans": [[3, 0]], "text": "Preface", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [175.01852416992188, 592.6592407226562, 547.182861328125, 601.8722534179688], "spans": [[3, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [136.79803466796875, 580.1793823242188, 547.1808471679688, 589.3923950195312], "spans": [[4, 0]], "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [136.79803466796875, 567.6397705078125, 339.18292236328125, 576.852783203125], "spans": [[5, 0]], "text": "Now you can become a published author, too!", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [344.714111328125, 567.6397705078125, 547.1387939453125, 576.852783203125], "spans": [[5, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [136.79803466796875, 555.159912109375, 529.9950561523438, 564.3729248046875], "spans": [[6, 0]], "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [535.5494995117188, 555.159912109375, 547.1978759765625, 564.3729248046875], "spans": [[6, 1]], "text": "xiii", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [136.79806518554688, 542.6800537109375, 284.0286560058594, 551.89306640625], "spans": [[7, 0]], "text": "Stay connected to IBM Redbooks", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [289.54449462890625, 542.6800537109375, 547.1211547851562, 551.89306640625], "spans": [[7, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [136.79806518554688, 520.180419921875, 536.0958862304688, 529.3934326171875], "spans": [[8, 0]], "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [541.6468505859375, 520.180419921875, 547.1978149414062, 529.3934326171875], "spans": [[8, 1]], "text": "1", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [136.79808044433594, 508.18060302734375, 549.8472290039062, 517.3936157226562], "spans": [[9, 0]], "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [136.79806518554688, 495.6409606933594, 536.1293334960938, 504.85394287109375], "spans": [[10, 0]], "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [541.6611328125, 495.6409606933594, 547.19287109375, 504.85394287109375], "spans": [[10, 1]], "text": "2", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}], [{"bbox": [136.79806518554688, 483.16107177734375, 549.8472290039062, 492.3740539550781], "spans": [[11, 0]], "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 11, "row-header": false, "row-span": [11, 12]}], [{"bbox": [151.19720458984375, 470.6811828613281, 536.0551147460938, 479.8941650390625], "spans": [[12, 0]], "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": [541.6015014648438, 470.6811828613281, 547.14794921875, 479.8941650390625], "spans": [[12, 1]], "text": "4", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 12, "row-header": false, "row-span": [12, 13]}], [{"bbox": [151.19720458984375, 458.14154052734375, 536.080078125, 467.3545227050781], "spans": [[13, 0]], "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 13, "row-header": false, "row-span": [13, 14]}, {"bbox": [541.635498046875, 458.14154052734375, 547.19091796875, 467.3545227050781], "spans": [[13, 1]], "text": "5", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 13, "row-header": false, "row-span": [13, 14]}], [{"bbox": [136.7970428466797, 435.64190673828125, 536.0908813476562, 444.8548889160156], "spans": [[14, 0]], "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 14, "row-header": false, "row-span": [14, 15]}, {"bbox": [541.642822265625, 435.64190673828125, 547.1947631835938, 444.8548889160156], "spans": [[14, 1]], "text": "7", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 14, "row-header": false, "row-span": [14, 15]}], [{"bbox": [136.7970428466797, 423.64208984375, 536.1271362304688, 432.8550720214844], "spans": [[15, 0]], "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 15, "row-header": false, "row-span": [15, 16]}, {"bbox": [541.6658935546875, 423.64208984375, 547.2047119140625, 432.8550720214844], "spans": [[15, 1]], "text": "8", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 15, "row-header": false, "row-span": [15, 16]}], [{"bbox": [151.19720458984375, 411.1622009277344, 535.9526977539062, 420.37518310546875], "spans": [[16, 0]], "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 16, "row-header": false, "row-span": [16, 17]}, {"bbox": [541.5558471679688, 411.1622009277344, 547.1590576171875, 420.37518310546875], "spans": [[16, 1]], "text": "8", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 16, "row-header": false, "row-span": [16, 17]}], [{"bbox": [151.19720458984375, 398.68231201171875, 536.0410766601562, 407.8952941894531], "spans": [[17, 0]], "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 17, "row-header": false, "row-span": [17, 18]}, {"bbox": [541.595947265625, 398.68231201171875, 547.1508178710938, 407.8952941894531], "spans": [[17, 1]], "text": "8", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 17, "row-header": false, "row-span": [17, 18]}], [{"bbox": [151.19720458984375, 386.1426696777344, 536.0748901367188, 395.35565185546875], "spans": [[18, 0]], "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 18, "row-header": false, "row-span": [18, 19]}, {"bbox": [541.6302490234375, 386.1426696777344, 547.1856079101562, 395.35565185546875], "spans": [[18, 1]], "text": "9", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 18, "row-header": false, "row-span": [18, 19]}], [{"bbox": [151.19720458984375, 373.66278076171875, 411.2704772949219, 382.8757629394531], "spans": [[19, 0]], "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 19, "row-header": false, "row-span": [19, 20]}, {"bbox": [416.8177490234375, 373.66278076171875, 547.1786499023438, 382.8757629394531], "spans": [[19, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 19, "row-header": false, "row-span": [19, 20]}], [{"bbox": [151.19720458984375, 361.1828918457031, 536.035888671875, 370.3958740234375], "spans": [[20, 0]], "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 20, "row-header": false, "row-span": [20, 21]}, {"bbox": [541.5989379882812, 361.1828918457031, 547.1619262695312, 370.3958740234375], "spans": [[20, 1]], "text": "9", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 20, "row-header": false, "row-span": [20, 21]}], [{"bbox": [151.19720458984375, 348.64324951171875, 530.5731811523438, 357.8562316894531], "spans": [[21, 0]], "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 21, "row-header": false, "row-span": [21, 22]}, {"bbox": [536.1044311523438, 348.64324951171875, 547.1668701171875, 357.8562316894531], "spans": [[21, 1]], "text": "10", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 21, "row-header": false, "row-span": [21, 22]}], [{"bbox": [151.19720458984375, 336.1633605957031, 530.5352172851562, 345.3763427734375], "spans": [[22, 0]], "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 22, "row-header": false, "row-span": [22, 23]}, {"bbox": [536.0755004882812, 336.1633605957031, 547.156005859375, 345.3763427734375], "spans": [[22, 1]], "text": "10", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 22, "row-header": false, "row-span": [22, 23]}], [{"bbox": [136.7970428466797, 323.6834716796875, 547.256591796875, 332.8964538574219], "spans": [[23, 0]], "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 23, "row-header": false, "row-span": [23, 24]}, {"bbox": null, "spans": [[23, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 23, "row-header": false, "row-span": [23, 24]}], [{"bbox": [136.79702758789062, 301.183837890625, 530.5396118164062, 310.3968200683594], "spans": [[24, 0]], "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 24, "row-header": false, "row-span": [24, 25]}, {"bbox": [536.0916748046875, 301.183837890625, 547.19580078125, 310.3968200683594], "spans": [[24, 1]], "text": "13", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 24, "row-header": false, "row-span": [24, 25]}], [{"bbox": [136.79702758789062, 289.18402099609375, 530.4808959960938, 298.3970031738281], "spans": [[25, 0]], "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 25, "row-header": false, "row-span": [25, 26]}, {"bbox": [536.04248046875, 289.18402099609375, 547.1657104492188, 298.3970031738281], "spans": [[25, 1]], "text": "14", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 25, "row-header": false, "row-span": [25, 26]}], [{"bbox": [151.1971893310547, 276.6443786621094, 378.2078552246094, 285.85736083984375], "spans": [[26, 0]], "text": "3.1.1 Row permission and column mask definitions", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 26, "row-header": false, "row-span": [26, 27]}, {"bbox": [383.74713134765625, 276.6443786621094, 547.15576171875, 285.85736083984375], "spans": [[26, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 26, "row-header": false, "row-span": [26, 27]}], [{"bbox": [151.1971893310547, 264.16448974609375, 530.4347534179688, 273.3774719238281], "spans": [[27, 0]], "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 27, "row-header": false, "row-span": [27, 28]}, {"bbox": [535.9962158203125, 264.16448974609375, 547.1190795898438, 273.3774719238281], "spans": [[27, 1]], "text": "16", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 27, "row-header": false, "row-span": [27, 28]}], [{"bbox": [136.79702758789062, 251.6248321533203, 530.528076171875, 260.83782958984375], "spans": [[28, 0]], "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 28, "row-header": false, "row-span": [28, 29]}, {"bbox": [536.0670166015625, 251.6248321533203, 547.1448364257812, 260.83782958984375], "spans": [[28, 1]], "text": "18", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 28, "row-header": false, "row-span": [28, 29]}], [{"bbox": [151.1971893310547, 239.14495849609375, 530.4978637695312, 248.3579559326172], "spans": [[29, 0]], "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 29, "row-header": false, "row-span": [29, 30]}, {"bbox": [536.0518798828125, 239.14495849609375, 547.159912109375, 248.3579559326172], "spans": [[29, 1]], "text": "18", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 29, "row-header": false, "row-span": [29, 30]}], [{"bbox": [151.1971893310547, 226.6650848388672, 530.5602416992188, 235.87808227539062], "spans": [[30, 0]], "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 30, "row-header": false, "row-span": [30, 31]}, {"bbox": [536.09912109375, 226.6650848388672, 547.1768798828125, 235.87808227539062], "spans": [[30, 1]], "text": "19", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 30, "row-header": false, "row-span": [30, 31]}], [{"bbox": [136.79702758789062, 214.1254425048828, 530.5302734375, 223.33843994140625], "spans": [[31, 0]], "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 31, "row-header": false, "row-span": [31, 32]}, {"bbox": [536.0615234375, 214.1254425048828, 547.1240234375, 223.33843994140625], "spans": [[31, 1]], "text": "20", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 31, "row-header": false, "row-span": [31, 32]}], [{"bbox": [136.79702758789062, 201.64556884765625, 530.6299438476562, 210.8585662841797], "spans": [[32, 0]], "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 32, "row-header": false, "row-span": [32, 33]}, {"bbox": [536.1631469726562, 201.64556884765625, 547.2295532226562, 210.8585662841797], "spans": [[32, 1]], "text": "21", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 32, "row-header": false, "row-span": [32, 33]}], [{"bbox": null, "spans": [[33, 0]], "text": "", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 33, "row-header": false, "row-span": [33, 34]}, {"bbox": [400.3206481933594, 189.1656951904297, 547.10009765625, 198.37869262695312], "spans": [[33, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 33, "row-header": false, "row-span": [33, 34]}], [{"bbox": [136.79701232910156, 189.1656951904297, 394.78179931640625, 198.37869262695312], "spans": [[34, 0]], "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 34, "row-header": false, "row-span": [34, 35]}, {"bbox": null, "spans": [[34, 1]], "text": "", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 34, "row-header": false, "row-span": [34, 35]}], [{"bbox": [151.19717407226562, 164.14617919921875, 530.4913940429688, 173.3591766357422], "spans": [[35, 0]], "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 35, "row-header": false, "row-span": [35, 36]}, {"bbox": [536.0463256835938, 164.14617919921875, 547.1561889648438, 173.3591766357422], "spans": [[35, 1]], "text": "23", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 35, "row-header": false, "row-span": [35, 36]}], [{"bbox": [151.19717407226562, 151.6663055419922, 530.5645751953125, 160.87930297851562], "spans": [[36, 0]], "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 36, "row-header": false, "row-span": [36, 37]}, {"bbox": [536.0960083007812, 151.6663055419922, 547.1587524414062, 160.87930297851562], "spans": [[36, 1]], "text": "23", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 36, "row-header": false, "row-span": [36, 37]}], [{"bbox": [151.19717407226562, 139.1266632080078, 530.5569458007812, 148.33966064453125], "spans": [[37, 0]], "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 37, "row-header": false, "row-span": [37, 38]}, {"bbox": [536.0881958007812, 139.1266632080078, 547.1507568359375, 148.33966064453125], "spans": [[37, 1]], "text": "24", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 37, "row-header": false, "row-span": [37, 38]}], [{"bbox": [151.19717407226562, 126.64678955078125, 530.5341186523438, 135.8597869873047], "spans": [[38, 0]], "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 38, "row-header": false, "row-span": [38, 39]}, {"bbox": [536.072998046875, 126.64678955078125, 547.15087890625, 135.8597869873047], "spans": [[38, 1]], "text": "25", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 38, "row-header": false, "row-span": [38, 39]}], [{"bbox": [151.19717407226562, 114.16690826416016, 339.4510498046875, 123.37991333007812], "spans": [[39, 0]], "text": "3.6.5 Defining and creating column masks", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 39, "row-header": false, "row-span": [39, 40]}, {"bbox": [344.9899597167969, 114.16690826416016, 547.160888671875, 123.37991333007812], "spans": [[39, 1]], "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 39, "row-header": false, "row-span": [39, 40]}], [{"bbox": [151.19717407226562, 101.62727355957031, 530.541015625, 110.84027099609375], "spans": [[40, 0]], "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 40, "row-header": false, "row-span": [40, 41]}, {"bbox": [536.087646484375, 101.62727355957031, 547.1808471679688, 110.84027099609375], "spans": [[40, 1]], "text": "28", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 40, "row-header": false, "row-span": [40, 41]}], [{"bbox": [151.19717407226562, 89.14738464355469, 530.5750732421875, 98.36038970947266], "spans": [[41, 0]], "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 41, "row-header": false, "row-span": [41, 42]}, {"bbox": [536.1066284179688, 89.14738464355469, 547.169677734375, 98.36038970947266], "spans": [[41, 1]], "text": "29", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 41, "row-header": false, "row-span": [41, 42]}], [{"bbox": [151.19717407226562, 76.6675033569336, 530.436279296875, 85.88050842285156], "spans": [[42, 0]], "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 42, "row-header": false, "row-span": [42, 43]}, {"bbox": [535.9984741210938, 76.6675033569336, 547.1228637695312, 85.88050842285156], "spans": [[42, 1]], "text": "32", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 42, "row-header": false, "row-span": [42, 43]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [135.52508544921875, 349.9494934082031, 545.87060546875, 502.2750244140625], "page": 8, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 2-1 FUNCTION_USAGE view", "type": "table", "#-cols": 3, "#-rows": 5, "data": [[{"bbox": [142.8000030517578, 487.1369934082031, 202.2449951171875, 495.4620056152344], "spans": [[0, 0]], "text": "Column name", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [216.8087921142578, 487.1369934082031, 257.210693359375, 495.4620056152344], "spans": [[0, 1]], "text": "Data type", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [289.47479248046875, 487.1369934082031, 338.8946838378906, 495.4620056152344], "spans": [[0, 2]], "text": "Description", "type": "col_header", "col": 2, "col-header": true, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [142.8000030517578, 468.1172790527344, 203.2322998046875, 476.4422912597656], "spans": [[1, 0]], "text": "FUNCTION_ID", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [216.785400390625, 468.1172790527344, 276.00360107421875, 476.4422912597656], "spans": [[1, 1]], "text": "VARCHAR(30)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [289.45770263671875, 468.1172790527344, 359.85394287109375, 476.4422912597656], "spans": [[1, 2]], "text": "ID of the function.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [142.8000030517578, 449.156982421875, 198.66929626464844, 457.48199462890625], "spans": [[2, 0]], "text": "USER_NAME", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [216.74130249023438, 449.156982421875, 275.9234924316406, 457.48199462890625], "spans": [[2, 1]], "text": "VARCHAR(10)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [289.382080078125, 438.1166687011719, 515.0535888671875, 457.48199462890625], "spans": [[2, 2]], "text": "Name of the user profile that has a usage setting for this function.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [142.79998779296875, 419.1563720703125, 173.98318481445312, 427.48138427734375], "spans": [[3, 0]], "text": "USAGE", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [216.773681640625, 419.1563720703125, 270.9797668457031, 427.48138427734375], "spans": [[3, 1]], "text": "VARCHAR(7)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [289.416259765625, 397.13604736328125, 539.1071166992188, 427.48138427734375], "spans": [[3, 2]], "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [142.8000030517578, 378.1163330078125, 196.2248992919922, 386.44134521484375], "spans": [[4, 0]], "text": "USER_TYPE", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [216.75210571289062, 378.1163330078125, 270.99871826171875, 386.44134521484375], "spans": [[4, 1]], "text": "VARCHAR(5)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [289.4316101074219, 356.15631103515625, 448.11962890625, 386.44134521484375], "spans": [[4, 2]], "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [64.41139221191406, 70.39208984375, 547.3950805664062, 398.3863525390625], "page": 9, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "type": "table", "#-cols": 6, "#-rows": 13, "data": [[{"bbox": [70.80030059814453, 383.1567077636719, 119.78550720214844, 391.4817199707031], "spans": [[0, 0]], "text": "User action", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 0, "row-header": true, "row-span": [0, 1]}, {"bbox": [424.93804931640625, 304.9800109863281, 433.2629699707031, 344.4774475097656], "spans": [[0, 1]], "text": "*JOBCTL", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [450.1380615234375, 304.9800109863281, 458.4629821777344, 390.3999328613281], "spans": [[0, 2]], "text": "QIBM_DB_SECADM", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [475.9383544921875, 304.9800109863281, 484.2632751464844, 390.465576171875], "spans": [[0, 3]], "text": "QIBM_DB_SQLADM", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [501.13836669921875, 304.9800109863281, 509.4632873535156, 390.385498046875], "spans": [[0, 4]], "text": "QIBM_DB_SYSMON", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [526.3986206054688, 304.9799499511719, 534.7235717773438, 359.2005615234375], "spans": [[0, 5]], "text": "No Authority", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [70.80000305175781, 285.11700439453125, 220.1568145751953, 293.4420166015625], "spans": [[1, 0]], "text": "SET CURRENT DEGREE (SQL statement)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": true, "row-span": [1, 2]}, {"bbox": [429.0, 285.11700439453125, 435.00299072265625, 293.4420166015625], "spans": [[1, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [480.00030517578125, 285.11700439453125, 486.0032958984375, 293.4420166015625], "spans": [[1, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": null, "spans": [[1, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [70.80001831054688, 266.1567077636719, 264.5538024902344, 274.4817199707031], "spans": [[2, 0]], "text": "CHGQRYA command targeting a different user's job", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": true, "row-span": [2, 3]}, {"bbox": [429.0000305175781, 266.1567077636719, 435.0030212402344, 274.4817199707031], "spans": [[2, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [480.0003356933594, 266.1567077636719, 486.0033264160156, 274.4817199707031], "spans": [[2, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": null, "spans": [[2, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [70.800048828125, 247.1370086669922, 322.5057373046875, 255.46202087402344], "spans": [[3, 0]], "text": "STRDBMON or ENDDBMON commands targeting a different user's job", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": true, "row-span": [3, 4]}, {"bbox": [429.0000305175781, 247.1370086669922, 435.0030212402344, 255.46202087402344], "spans": [[3, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [480.0003356933594, 247.1370086669922, 486.0033264160156, 255.46202087402344], "spans": [[3, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": null, "spans": [[3, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [70.800048828125, 228.1173095703125, 381.0218505859375, 236.44232177734375], "spans": [[4, 0]], "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": true, "row-span": [4, 5]}, {"bbox": [429.0000305175781, 228.1173095703125, 435.0030212402344, 236.44232177734375], "spans": [[4, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": null, "spans": [[4, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [480.0003356933594, 228.1173095703125, 486.0033264160156, 236.44232177734375], "spans": [[4, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [505.2606201171875, 228.1173095703125, 511.26361083984375, 236.44232177734375], "spans": [[4, 4]], "text": "X", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [530.7603149414062, 228.1173095703125, 536.7633056640625, 236.44232177734375], "spans": [[4, 5]], "text": "X", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [70.800048828125, 209.15701293945312, 359.5173645019531, 217.48202514648438], "spans": [[5, 0]], "text": "QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": true, "row-span": [5, 6]}, {"bbox": [429.00006103515625, 209.15701293945312, 435.0030517578125, 217.48202514648438], "spans": [[5, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [480.0003662109375, 209.15701293945312, 486.00335693359375, 217.48202514648438], "spans": [[5, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [505.26068115234375, 209.15701293945312, 511.263671875, 217.48202514648438], "spans": [[5, 4]], "text": "X", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": null, "spans": [[5, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [70.80007934570312, 190.13731384277344, 220.7517852783203, 198.4623260498047], "spans": [[6, 0]], "text": "Visual Explain within Run SQL scripts", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": true, "row-span": [6, 7]}, {"bbox": [429.00006103515625, 190.13731384277344, 435.0030517578125, 198.4623260498047], "spans": [[6, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": null, "spans": [[6, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [480.0003662109375, 190.13731384277344, 486.00335693359375, 198.4623260498047], "spans": [[6, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [505.26068115234375, 190.13731384277344, 511.263671875, 198.4623260498047], "spans": [[6, 4]], "text": "X", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [530.7603759765625, 190.13731384277344, 536.7633666992188, 198.4623260498047], "spans": [[6, 5]], "text": "X", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [70.80007934570312, 171.11761474609375, 236.65480041503906, 179.442626953125], "spans": [[7, 0]], "text": "Visual Explain outside of Run SQL scripts", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": true, "row-span": [7, 8]}, {"bbox": [429.00006103515625, 171.11761474609375, 435.0030517578125, 179.442626953125], "spans": [[7, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [480.0003662109375, 171.11761474609375, 486.00335693359375, 179.442626953125], "spans": [[7, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": null, "spans": [[7, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [70.80007934570312, 152.15731811523438, 213.1296844482422, 160.48233032226562], "spans": [[8, 0]], "text": "ANALYZE PLAN CACHE procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": true, "row-span": [8, 9]}, {"bbox": [429.00006103515625, 152.15731811523438, 435.0030517578125, 160.48233032226562], "spans": [[8, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [480.0003662109375, 152.15731811523438, 486.00335693359375, 160.48233032226562], "spans": [[8, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": null, "spans": [[8, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [70.80007934570312, 133.1376190185547, 199.87808227539062, 141.46263122558594], "spans": [[9, 0]], "text": "DUMP PLAN CACHE procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": true, "row-span": [9, 10]}, {"bbox": [429.00006103515625, 133.1376190185547, 435.0030517578125, 141.46263122558594], "spans": [[9, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [480.0003662109375, 133.1376190185547, 486.00335693359375, 141.46263122558594], "spans": [[9, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": null, "spans": [[9, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 9, "row-header": false, "row-span": [9, 10]}], [{"bbox": [70.80007934570312, 114.11792755126953, 208.36776733398438, 122.44291687011719], "spans": [[10, 0]], "text": "MODIFY PLAN CACHE procedure", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 10, "row-header": true, "row-span": [10, 11]}, {"bbox": [429.00006103515625, 114.11792755126953, 435.0030517578125, 122.44291687011719], "spans": [[10, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": [480.0003662109375, 114.11792755126953, 486.00335693359375, 122.44291687011719], "spans": [[10, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 10, "row-header": false, "row-span": [10, 11]}, {"bbox": null, "spans": [[10, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 10, "row-header": false, "row-span": [10, 11]}], [{"bbox": [70.80007934570312, 95.09822845458984, 411.20263671875, 103.42323303222656], "spans": [[11, 0]], "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 11, "row-header": true, "row-span": [11, 12]}, {"bbox": [429.00006103515625, 95.09822845458984, 435.0030517578125, 103.42323303222656], "spans": [[11, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": [480.0003662109375, 95.09822845458984, 486.00335693359375, 103.42323303222656], "spans": [[11, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 11, "row-header": false, "row-span": [11, 12]}, {"bbox": null, "spans": [[11, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 11, "row-header": false, "row-span": [11, 12]}], [{"bbox": [70.80007934570312, 76.13793182373047, 377.1258544921875, 84.46292877197266], "spans": [[12, 0]], "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "type": "row_header", "col": 0, "col-header": false, "col-span": [0, 1], "row": 12, "row-header": true, "row-span": [12, 13]}, {"bbox": [429.00006103515625, 76.13793182373047, 435.0030517578125, 84.46292877197266], "spans": [[12, 1]], "text": "X", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 2]], "text": "", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": [480.0003662109375, 76.13793182373047, 486.00335693359375, 84.46292877197266], "spans": [[12, 3]], "text": "X", "type": "body", "col": 3, "col-header": false, "col-span": [3, 4], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 4]], "text": "", "type": "body", "col": 4, "col-header": false, "col-span": [4, 5], "row": 12, "row-header": false, "row-span": [12, 13]}, {"bbox": null, "spans": [[12, 5]], "text": "", "type": "body", "col": 5, "col-header": false, "col-span": [5, 6], "row": 12, "row-header": false, "row-span": [12, 13]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [134.54624938964844, 587.7283935546875, 542.0460815429688, 688.5811157226562], "page": 11, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 3-1 Special registers and their corresponding values", "type": "table", "#-cols": 2, "#-rows": 4, "data": [[{"bbox": [142.8000030517578, 673.1370239257812, 209.67091369628906, 681.4619750976562], "spans": [[0, 0]], "text": "Special register", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [230.18911743164062, 673.1370239257812, 319.9352722167969, 681.4619750976562], "spans": [[0, 1]], "text": "Corresponding value", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [142.80001831054688, 643.1364135742188, 212.7012176513672, 662.5016479492188], "spans": [[1, 0]], "text": "USER or SESSION_USER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [230.2197265625, 654.1766967773438, 467.9906921386719, 662.5016479492188], "spans": [[1, 1]], "text": "The effective user of the thread excluding adopted authority.", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [142.80003356933594, 624.11669921875, 216.63963317871094, 632.441650390625], "spans": [[2, 0]], "text": "CURRENT_USER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [230.19813537597656, 613.13671875, 535.6508178710938, 632.441650390625], "spans": [[2, 1]], "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [142.8009033203125, 594.1170043945312, 209.73570251464844, 602.4419555664062], "spans": [[3, 0]], "text": "SYSTEM_USER", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [230.24490356445312, 594.1170043945312, 425.64569091796875, 602.4419555664062], "spans": [[3, 1]], "text": "The authorization ID that initiated the connection.", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}]], "model": null, "bounding-box": null}, {"prov": [{"bbox": [63.556331634521484, 495.7753601074219, 548.5687255859375, 687.76611328125], "page": 12, "span": [0, 0], "__ref_s3_data": null}], "text": "Table 3-2 Built-in global variables", "type": "table", "#-cols": 3, "#-rows": 10, "data": [[{"bbox": [70.80000305175781, 673.1370239257812, 134.99070739746094, 681.4619750976562], "spans": [[0, 0]], "text": "Global variable", "type": "col_header", "col": 0, "col-header": true, "col-span": [0, 1], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [202.889404296875, 673.1370239257812, 223.34640502929688, 681.4619750976562], "spans": [[0, 1]], "text": "Type", "type": "col_header", "col": 1, "col-header": true, "col-span": [1, 2], "row": 0, "row-header": false, "row-span": [0, 1]}, {"bbox": [281.8247985839844, 673.1370239257812, 331.3428039550781, 681.4619750976562], "spans": [[0, 2]], "text": "Description", "type": "col_header", "col": 2, "col-header": true, "col-span": [2, 3], "row": 0, "row-header": false, "row-span": [0, 1]}], [{"bbox": [70.80000305175781, 654.1766967773438, 132.7209014892578, 662.5016479492188], "spans": [[1, 0]], "text": "CLIENT_HOST", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [202.89028930664062, 654.1766967773438, 267.0765075683594, 662.5016479492188], "spans": [[1, 1]], "text": "VARCHAR(255)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 1, "row-header": false, "row-span": [1, 2]}, {"bbox": [281.8473205566406, 654.1766967773438, 510.17547607421875, 662.5016479492188], "spans": [[1, 2]], "text": "Host name of the current client as returned by the system", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 1, "row-header": false, "row-span": [1, 2]}], [{"bbox": [70.80001831054688, 635.156982421875, 140.66522216796875, 643.48193359375], "spans": [[2, 0]], "text": "CLIENT_IPADDR", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [202.872314453125, 635.156982421875, 267.077392578125, 643.48193359375], "spans": [[2, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 2, "row-header": false, "row-span": [2, 3]}, {"bbox": [281.8454895019531, 635.156982421875, 509.6058349609375, 643.48193359375], "spans": [[2, 2]], "text": "IP address of the current client as returned by the system", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 2, "row-header": false, "row-span": [2, 3]}], [{"bbox": [70.80001831054688, 616.1372680664062, 134.98263549804688, 624.4622192382812], "spans": [[3, 0]], "text": "CLIENT_PORT", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [202.90293884277344, 616.1372680664062, 242.80084228515625, 624.4622192382812], "spans": [[3, 1]], "text": "INTEGER", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 3, "row-header": false, "row-span": [3, 4]}, {"bbox": [281.7978515625, 616.1372680664062, 527.5922241210938, 624.4622192382812], "spans": [[3, 2]], "text": "Port used by the current client to communicate with the server", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 3, "row-header": false, "row-span": [3, 4]}], [{"bbox": [70.80001831054688, 597.1175537109375, 143.50924682617188, 605.4425048828125], "spans": [[4, 0]], "text": "PACKAGE_NAME", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [202.80575561523438, 597.1175537109375, 267.0693664550781, 605.4425048828125], "spans": [[4, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 4, "row-header": false, "row-span": [4, 5]}, {"bbox": [281.85186767578125, 597.1175537109375, 436.5726013183594, 605.4425048828125], "spans": [[4, 2]], "text": "Name of the currently running package", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 4, "row-header": false, "row-span": [4, 5]}], [{"bbox": [70.80001831054688, 578.1572265625, 156.01654052734375, 586.482177734375], "spans": [[5, 0]], "text": "PACKAGE_SCHEMA", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [202.83544921875, 578.1572265625, 267.0864562988281, 586.482177734375], "spans": [[5, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 5, "row-header": false, "row-span": [5, 6]}, {"bbox": [281.8707580566406, 578.1572265625, 470.44677734375, 586.482177734375], "spans": [[5, 2]], "text": "Schema name of the currently running package", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 5, "row-header": false, "row-span": [5, 6]}], [{"bbox": [70.80001831054688, 559.1375122070312, 157.89932250976562, 567.4624633789062], "spans": [[6, 0]], "text": "PACKAGE_VERSION", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [202.72471618652344, 559.1375122070312, 261.9825439453125, 567.4624633789062], "spans": [[6, 1]], "text": "VARCHAR(64)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 6, "row-header": false, "row-span": [6, 7]}, {"bbox": [281.7492370605469, 559.1375122070312, 478.84381103515625, 567.4624633789062], "spans": [[6, 2]], "text": "Version identifier of the currently running package", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 6, "row-header": false, "row-span": [6, 7]}], [{"bbox": [70.80001831054688, 540.1177978515625, 154.419921875, 548.4427490234375], "spans": [[7, 0]], "text": "ROUTINE_SCHEMA", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [202.79312133789062, 540.1177978515625, 267.0927429199219, 548.4427490234375], "spans": [[7, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 7, "row-header": false, "row-span": [7, 8]}, {"bbox": [281.87164306640625, 540.1177978515625, 464.2602233886719, 548.4427490234375], "spans": [[7, 2]], "text": "Schema name of the currently running routine", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 7, "row-header": false, "row-span": [7, 8]}], [{"bbox": [70.80001831054688, 521.157470703125, 188.43991088867188, 529.482421875], "spans": [[8, 0]], "text": "ROUTINE_SPECIFIC_NAME", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [202.8444061279297, 521.157470703125, 267.03692626953125, 529.482421875], "spans": [[8, 1]], "text": "VARCHAR(128)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 8, "row-header": false, "row-span": [8, 9]}, {"bbox": [281.80682373046875, 521.157470703125, 430.40045166015625, 529.482421875], "spans": [[8, 2]], "text": "Name of the currently running routine", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 8, "row-header": false, "row-span": [8, 9]}], [{"bbox": [70.80003356933594, 502.1377258300781, 139.4313507080078, 510.4627380371094], "spans": [[9, 0]], "text": "ROUTINE_TYPE", "type": "body", "col": 0, "col-header": false, "col-span": [0, 1], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [202.74635314941406, 502.1377258300781, 239.2899627685547, 510.4627380371094], "spans": [[9, 1]], "text": "CHAR(1)", "type": "body", "col": 1, "col-header": false, "col-span": [1, 2], "row": 9, "row-header": false, "row-span": [9, 10]}, {"bbox": [281.7906494140625, 502.1377258300781, 425.09130859375, 510.4627380371094], "spans": [[9, 2]], "text": "Type of the currently running routine", "type": "body", "col": 2, "col-header": false, "col-span": [2, 3], "row": 9, "row-header": false, "row-span": [9, 10]}]], "model": null, "bounding-box": null}], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 792.0, "page": 1, "width": 612.0}, {"height": 792.0, "page": 2, "width": 612.0}, {"height": 792.0, "page": 3, "width": 612.0}, {"height": 792.0, "page": 4, "width": 612.0}, {"height": 792.0, "page": 5, "width": 612.0}, {"height": 792.0, "page": 6, "width": 612.0}, {"height": 792.0, "page": 7, "width": 612.0}, {"height": 792.0, "page": 8, "width": 612.0}, {"height": 792.0, "page": 9, "width": 612.0}, {"height": 792.0, "page": 10, "width": 612.0}, {"height": 792.0, "page": 11, "width": 612.0}, {"height": 792.0, "page": 12, "width": 612.0}, {"height": 792.0, "page": 13, "width": 612.0}, {"height": 792.0, "page": 14, "width": 612.0}, {"height": 792.0, "page": 15, "width": 612.0}, {"height": 792.0, "page": 16, "width": 612.0}, {"height": 792.0, "page": 17, "width": 612.0}, {"height": 792.0, "page": 18, "width": 612.0}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5110_sampled.md b/tests/data/groundtruth/docling_v1/redp5110_sampled.md new file mode 100644 index 00000000..19736443 --- /dev/null +++ b/tests/data/groundtruth/docling_v1/redp5110_sampled.md @@ -0,0 +1,421 @@ +Front cover + + + + +## Row and Column Access Control Support in IBM DB2 for i + +Implement roles and separation of duties + +Leverage row permissions on the database + +Protect columns by defining column masks + +Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan + +Redpaper + +## Contents + + + +| Notices | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii | +|------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| Trademarks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii | +| DB2 for i Center of Excellence | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix | +| Preface | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | +| Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | | +| Now you can become a published author, too! | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii | +| Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | xiii | +| Stay connected to IBM Redbooks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv | +| Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1 | +| 1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | | +| 1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 2 | +| 1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | | +| 1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 4 | +| 1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . . | 5 | +| Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 7 | +| 2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 8 | +| 2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . . | 8 | +| 2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . . | 8 | +| 2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . . | 9 | +| 2.1.4 Database Information function: QIBM_DB_SYSMON | . . . . . . . . . . . . . . . . . . . . . . 9 | +| 2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . . | 9 | +| 2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 10 | +| 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . . | 10 | +| 2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | | +| Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 13 | +| 3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . . | 14 | +| 3.1.1 Row permission and column mask definitions | . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | +| 3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 16 | +| 3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | +| 3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | +| 3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 19 | +| 3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 20 | +| 3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . . | 21 | +| | . . . . . . . . . . . . . . . . . . . . . . . . 22 | +| 3.5 SELECT, INSERT, and UPDATE behavior with RCAC | | +| 3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . . | 23 | +| 3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . . | 23 | +| 3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 24 | +| 3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 25 | +| 3.6.5 Defining and creating column masks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | +| 3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 28 | +| 3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 29 | +| 3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . . | 32 | + +DB2 for i Center of Excellence + +Solution Brief IBM Systems Lab Services and Training + + + + +## Highlights + +- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH + +- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH + +- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH + +- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH + + + + +Power Services + +## DB2 for i Center of Excellence + +Expert help to achieve your business requirements + +## We build confident, satisfied clients + +No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. + +Because no one else is IBM. + +With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. + +## Who we are, some of what we do + +Global CoE engagements cover topics including: + +- r Database performance and scalability + +- r Advanced SQL knowledge and skills transfer + +- r Business intelligence and analytics + +- r DB2 Web Query + +- r Query/400 modernization for better reporting and analysis capabilities + +- r Database modernization and re-engineering + +- r Data-centric architecture and design + +- r Extremely large database and overcoming limits to growth + +- r ISV education and enablement + +## Preface + +This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. + +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. + +This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. + + + + + + + +Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. + +Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . + +## Authors + + + + +Chapter 1. + +1 + +## Securing and protecting IBM DB2 data + +Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. + +Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. + +This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: + +- GLYPH Security fundamentals + +- GLYPH Current state of IBM i security + +- GLYPH DB2 for i security controls + +## 1.1 Security fundamentals + +Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: + +- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. + +- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. + +A security policy is what defines whether the system and its settings are secure (or not). + +- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. + +With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. + +## 1.2 Current state of IBM i security + +Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. + +Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. + +Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. + +Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. + +## 1.3.1 Existing row and column control + +Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. + +Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. + +Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. + +Figure 1-2 Existing row and column controls + + +## 2.1.6 Change Function Usage CL command + +The following CL commands can be used to work with, display, or change function usage IDs: + +- GLYPH Work Function Usage ( WRKFCNUSG ) + +- GLYPH Change Function Usage ( CHGFCNUSG ) + +- GLYPH Display Function Usage ( DSPFCNUSG ) + +For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: + +CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) + +## 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view + +The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view. + +Table 2-1 FUNCTION_USAGE view + +| Column name | Data type | Description | +|---------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FUNCTION_ID | VARCHAR(30) | ID of the function. | +| USER_NAME | VARCHAR(10) | Name of the user profile that has a usage setting for this function. | +| USAGE | VARCHAR(7) | Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. | +| USER_TYPE | VARCHAR(5) | Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. | + +To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. + +Example 2-1 Query to determine who has authority to define and manage RCAC + +SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name; + +## 2.2 Separation of duties + +Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. + +For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. + +In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. + +QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. + +QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. + +A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. + +Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. + +Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority + +| User action | *JOBCTL | QIBM_DB_SECADM | QIBM_DB_SQLADM | QIBM_DB_SYSMON | No Authority | +|--------------------------------------------------------------------------------|-----------|------------------|------------------|------------------|----------------| +| SET CURRENT DEGREE (SQL statement) | X | | X | | | +| CHGQRYA command targeting a different user's job | X | | X | | | +| STRDBMON or ENDDBMON commands targeting a different user's job | X | | X | | | +| STRDBMON or ENDDBMON commands targeting a job that matches the current user | X | | X | X | X | +| QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job | X | | X | X | | +| Visual Explain within Run SQL scripts | X | | X | X | X | +| Visual Explain outside of Run SQL scripts | X | | X | | | +| ANALYZE PLAN CACHE procedure | X | | X | | | +| DUMP PLAN CACHE procedure | X | | X | | | +| MODIFY PLAN CACHE procedure | X | | X | | | +| MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority) | X | | X | | | +| CHANGE PLAN CACHE SIZE procedure (currently does not check authority) | X | | X | | | + +The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules. + +Figure 3-1 CREATE PERMISSION SQL statement + +The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement + + +## Column mask + +A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. + +Table 3-1 summarizes these special registers and their values. + +Table 3-1 Special registers and their corresponding values + +| Special register | Corresponding value | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| USER or SESSION_USER | The effective user of the thread excluding adopted authority. | +| CURRENT_USER | The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. | +| SYSTEM_USER | The authorization ID that initiated the connection. | + +Figure 3-5 shows the difference in the special register values when an adopted authority is used: + +- GLYPH A user connects to the server using the user profile ALICE. + +- GLYPH USER and CURRENT USER initially have the same value of ALICE. + +- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. + +- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. + +- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. + +Figure 3-5 Special registers and adopted authority + + +## 3.2.2 Built-in global variables + +Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. + +IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. + +Table 3-2 lists the nine built-in global variables. + +Table 3-2 Built-in global variables + +| Global variable | Type | Description | +|-----------------------|--------------|----------------------------------------------------------------| +| CLIENT_HOST | VARCHAR(255) | Host name of the current client as returned by the system | +| CLIENT_IPADDR | VARCHAR(128) | IP address of the current client as returned by the system | +| CLIENT_PORT | INTEGER | Port used by the current client to communicate with the server | +| PACKAGE_NAME | VARCHAR(128) | Name of the currently running package | +| PACKAGE_SCHEMA | VARCHAR(128) | Schema name of the currently running package | +| PACKAGE_VERSION | VARCHAR(64) | Version identifier of the currently running package | +| ROUTINE_SCHEMA | VARCHAR(128) | Schema name of the currently running routine | +| ROUTINE_SPECIFIC_NAME | VARCHAR(128) | Name of the currently running routine | +| ROUTINE_TYPE | CHAR(1) | Type of the currently running routine | + +## 3.3 VERIFY_GROUP_FOR_USER function + +The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. + +If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. + +Here is an example of using the VERIFY_GROUP_FOR_USER function: + +- 1. There are user profiles for MGR, JANE, JUDY, and TONY. + +- 2. The user profile JANE specifies a group profile of MGR. + +- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: + +VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY') + +RETURN CASE + +WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ; + +- 2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones: + +- -Human Resources can see the unmasked TAX_ID of the employees. + +- -Employees can see only their own unmasked TAX_ID. + +- -Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). + +- -Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX. + +- To implement this column mask, run the SQL statement that is shown in Example 3-9. + +Example 3-9 Creating a mask on the TAX_ID column + +CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; + +- 3. Figure 3-10 shows the masks that are created in the HR_SCHEMA. + +Figure 3-10 Column masks shown in System i Navigator + + +## 3.6.6 Activating RCAC + +Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: + +- 1. Run the SQL statements that are shown in Example 3-10. + +## Example 3-10 Activating RCAC on the EMPLOYEES table + +- /* Active Row Access Control (permissions) */ + +/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; + +*/ + +- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . + +Figure 3-11 Selecting the EMPLOYEES table from System i Navigator + + +- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. + +Figure 4-68 Visual Explain with RCAC enabled + + +- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. + +Figure 4-69 Index advice with no RCAC + + +THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; + +Back cover + +## Row and Column Access Control Support in IBM DB2 for i + +Implement roles and separation of duties + +Leverage row permissions on the database + +Protect columns by defining column masks + +This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. + +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. + + + + + + + +INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION + +BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE + +IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. + +For more information: ibm.com /redbooks \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5110_sampled.pages.json b/tests/data/groundtruth/docling_v1/redp5110_sampled.pages.json new file mode 100644 index 00000000..5765cb25 --- /dev/null +++ b/tests/data/groundtruth/docling_v1/redp5110_sampled.pages.json @@ -0,0 +1 @@ +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] diff --git a/tests/data/groundtruth/docling_v1/redp5695.doctags.txt b/tests/data/groundtruth/docling_v1/redp5695.doctags.txt deleted file mode 100644 index ffd5b2fc..00000000 --- a/tests/data/groundtruth/docling_v1/redp5695.doctags.txt +++ /dev/null @@ -1,460 +0,0 @@ - -Front cover -
- -
-IBM Cloud Pak for Data on IBM Z -Jasmeet Bhatia -Ravi Gummadi -Chandra Shekhar Reddy Potula -Srirama Sharma -Data and AI -
- -
-
- -
-
- -
-Executive overview -Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology. -With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences. -This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput. -This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. -IBM Z: An overview -Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world's top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency. -The most recent platform for IBM Z is IBM z16™. The IBM z16 supports the following features: -- GLYPH On-chip AI acceleration -- GLYPH Quantum-safe crypto discovery -- GLYPH Simplified compliance -- GLYPH Flexible capacity -- GLYPH Modernization of applications -- GLYPH Sustainability -With these features, enterprises can upgrade applications while preserving secure and resilient data. -To learn more about these features, see the IBM z16 product page. -Figure 1 on page 3 shows a picture of the IBM z16 mainframe. -Figure 1 IBM z16 -
- -Figure 1 IBM z16 -
-IBM z16 and IBM LinuxONE Emperor 4 features -IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI. -Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement. -Figure 2 IBM Z: Processor roadmap -
- -Figure 2 IBM Z: Processor roadmap -
-The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a 'built to build' focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization. -Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum™ processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory. -Figure 3 System design of IBM z16 LinuxONE Emperor 4 -
- -Figure 3 System design of IBM z16 LinuxONE Emperor 4 -
-The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has "first in the industry" on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection. -Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression. -Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores. -Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores -
- -Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores -
-The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases. -Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities. -Figure 5 Seamless integration -
- -Figure 5 Seamless integration -
-What is Cloud Pak for Data on IBM Z -IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680. -CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses. -Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion. -Figure 6 Solution overview of Cloud Pak for Data -
- -Figure 6 Solution overview of Cloud Pak for Data -
-We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: -- GLYPH Performance and Scale -- GLYPH Embedded Accelerators -- GLYPH Reliability and Availability -- GLYPH Security and Governance. -From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security. -Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE -With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks: -- GLYPH Provision various containerized databases. -- GLYPH Explore, clean, shape, and alter data by using Data Refinery. -- GLYPH Use project-specific data that is uploaded, or connect to distant data. -- GLYPH Create Spark run times and applications. -- GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency. -- GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9. -For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE. -Open-source ecosystem -These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building. -IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business. -On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing. -IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE. -IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community's continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud. -CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms. -Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE. -In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16™) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server. -So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers. -Why AI on IBM Z -Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI. -Traditional ML models' power most of today's ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z). -Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model. -Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE -
- -Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE -
-In summary, here are some of the reasons why you should choose AI on IBM Z: -- GLYPH World-class AI inference platform for enterprise workloads: -- -Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores. -- -Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform. -- -Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z. -- GLYPH Security: Encrypted memory, and improved trusted execution environments. -- GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system. -AI use cases -With billions of transactions per day in many of today's industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale. -Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. -For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount. -For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important. -For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z. -In the following sections, we describe the following use cases: -- GLYPH "Use case 1: Responsible AI augmented with risk and regulatory compliance" on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks. -- GLYPH "Use case 2: Credit default risk assessment" on page 22 -- Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. -- GLYPH "Use case 3: Clearing and settlement" on page 25 -- The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. -- GLYPH "Use case 4: Remaining Useful Life of an aircraft engine" on page 27 -- We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure. -- GLYPH "Use case 5: AI-powered video analytics on an infant's motions for health prediction" on page 30 -- In this section, we describe how AI can predict an infant's health conditions by monitoring real-time body movements. -Use case 1: Responsible AI augmented with risk and regulatory compliance -Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task. -How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring. -Industry challenges -Here are the three main reasons why organizations struggle with the adoption of AI: -- GLYPH Scaling with growing regulations -- GLYPH Lack of confidence in operationalized AI (making responsible AI) -- GLYPH Challenges around managing the risk throughout the entire AI workflow -Scaling with growing regulations -Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination. -Responsible AI -Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable. -Risks throughout the entire AI workflow -Organizations need to mitigate risk of the following items: -- GLYPH Deciding not to use certain technologies or practices -- GLYPH Using personal information when needed and with a user's consent -- GLYPH Ensuring automated decisions are free from bias -- GLYPH Customer confidence by providing explanations for business decisions -- GLYPH Fraud to the organization and to customer's accounts -- GLYPH Delays in putting models into production -In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important. -The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the "why" of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively. -For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise. -Figure 8 Typical AI model lifecycle -
- -Figure 8 Typical AI model lifecycle -
-Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows. -IBM governance solution for IBM Z -AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises. -AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization's use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model's behavior throughout the lifecycle, the data that was influential in its development, and the possible risks. -In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance. -Lifecycle governance -Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements: -- GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. -- GLYPH Automate the capture of model metadata for report generation. -- GLYPH Drive transparent and explainable AI at scale. -- GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging. -Risk management -Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale: -- GLYPH Automate facts and workflow management to comply with business standards. -- GLYPH Use dynamic dashboards for clear and concise customizable results. -- GLYPH Enhanced collaboration across multiple regions and geographies. -Regulatory compliance -Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks: -- GLYPH Help adhere to external AI regulations for audit and compliance. -- GLYPH Convert external AI regulations into policies for automatic enforcement. -- GLYPH Use dynamic dashboards for compliance status across policies and regulations. -Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways: -- GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. -- GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86. -Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. -Figure 9 Remote AI governance solution end-to-end flow -
- -Figure 9 Remote AI governance solution end-to-end flow -
-To achieve end-to-end AI governance, complete the following steps: -- 1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10. -Figure 10 Creating a model entry in IBM OpenPages -
- -Figure 10 Creating a model entry in IBM OpenPages -
-- 2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11. -Figure 11 Training an AI model by using Watson Studio -
- -Figure 11 Training an AI model by using Watson Studio -
-- 3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12. -Figure 12 Deploying an AI model by using WML on Cloud Pak for Data -
- -Figure 12 Deploying an AI model by using WML on Cloud Pak for Data -
-- 4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform. -Figure 13 External model -
- -Figure 13 External model -
-You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages. -Figure 14 Tracking the model -
- -Figure 14 Tracking the model -
-You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15. -Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform -
- -Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform -
-- 5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16. -Figure 16 Creating an external model on an x86 platform -
- -Figure 16 Creating an external model on an x86 platform -
-IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21. -Figure 17 IBM OpenScale dashboard that is used to monitor the external model -
- -Figure 17 IBM OpenScale dashboard that is used to monitor the external model -
-You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale. -Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale -
- -Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale -
-Use case 2: Credit default risk assessment -In today's world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations. -Industry challenges -Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone's likelihood of default, but that is not an efficient method for judgment as a business grows. -Predictions of credit default risk assessment -In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan. -Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk. -Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model. -Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z -
- -Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z -
-A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import. -Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors. -The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications. -Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction. -We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. -Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. -Figure 20 Architecture for credit risk prediction by using DL on IBM Z -
- -Figure 20 Architecture for credit risk prediction by using DL on IBM Z -
-Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model's endpoint. -In summary, here are some considerations for developing real-time AI models, such as credit risk assessment: -- GLYPH A preference for in-platform run times of the model, such as faster execution results. -- GLYPH Less overhead in the end-to-end flows might improve scoring time. -- GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform. -- GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment. -- GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means. -Use case 3: Clearing and settlement -Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day. -Industry challenge -Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs. -Clearing and settlement solution -Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts. -In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions. -The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds. -One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint. -Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE. -Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data -
- -Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data -
-Here are the steps of the high-level process flow: -- 1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building. -- 2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D. -- 3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository. -- 4. Deploy the saved model into a deployment space for batch deployment. -- 5. Create a batch deployment by using any of these interfaces: -- a. Watson Studio user interface from an Analytics deployment space. -- b. WML Python client. -- c. WML REST APIs. -- 6. A hardware configuration can be chosen for the deployment. -- 7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination. -- 8. One way to run batch deployment to predict or score is to create and run a batch deployment job. -- 9. Provide an input data type: -- a. Inline data for entering a JSON format payload. -- b. Select Data asset , click Select data source , and then specify your asset. -- 10.The output data type can be a new output file or a connected data asset. -- 11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run. -- 12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL. -Summary -With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages: -- GLYPH No Impact to SLAs and the batch process window. -- GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs. -- GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring. -Use case 4: Remaining Useful Life of an aircraft engine -In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems. -Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime. -Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z. -Figure 22 Inferencing architecture on IBM Z -
- -Figure 22 Inferencing architecture on IBM Z -
-Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model's life. -Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist's journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see "Use case 3: Clearing and settlement" on page 25. -Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices. -We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works. -This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator. -For decision-making about an aircraft engine's life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction. -The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point. -Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating. -Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application. -Figure 23 In-depth architectural view -
- -Figure 23 In-depth architectural view -
-In summary, consider the following points while developing an AI-based predictive maintenance application: -- GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages. -- GLYPH The trustworthiness of the predicted output is important for critical use cases. -- GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications. -- GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available. -- GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle. -Use case 5: AI-powered video analytics on an infant's motions for health prediction -Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world. -Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis. -Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health. -In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby's life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders. -Industry challenges -There are video surveillance systems that are installed for monitoring an infant's movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected. -There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something "smart" that monitors constantly the surveillance system and detect problems effectively. -AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified. -Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry. -Infant motion analytics in real time -AI is the current "market trend evolution" in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems. -CP4D was used to build and deploy the AI-powered video analytics on infant's motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time. -Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data. -Figure 24 Architecture for AI-powered video analytics -
- -Figure 24 Architecture for AI-powered video analytics -
-Live camera feeds or recorded videos of an infant's movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant's body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture. -When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant's health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means. -We can leverage the following AI technology stack for this use case: -- GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images. -- GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow. -- GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation. -- GLYPH OpenCV: A real-time computer vision library that helps perform image processing. -WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions. -Additional resources -- GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z. -- GLYPH IBM Cloud Pak for Data Tutorials. -- GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE: -- -Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case. -- -Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case. -- -Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case. -A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE. -Summary -This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. -Authors -This publication was produced by a team of specialists from around the world working with the IBM Redbooks team: -Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management. -Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master's degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems. -Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems. -Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization. -Thanks to the following people for their contributions to this project: -Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center -Shin Kelly Yang, AI on IBM Z Product Management IBM US -Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM -Now you can become a published author, too! -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. -Find out more about the residency program, browse the residency index, and apply online at: -ibm.com /redbooks/residencies.html -Stay connected to IBM Redbooks -- GLYPH Find us on LinkedIn: -http://www.linkedin.com/groups?home=&gid=2130806 -- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: -- https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm -- GLYPH Stay current on recent Redbooks publications with RSS Feeds: -http://www.redbooks.ibm.com/rss.html -Notices -This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it. -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: -IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US -INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. -IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you. -The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions. -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. -Statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only. -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental. -COPYRIGHT LICENSE: -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided "AS IS", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs. -Trademarks -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at http://www.ibm.com/legal/copytrade.shtml -The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries. -Db2fi IBMfi -IBM Blockchainfi -IBM Cloudfi IBM Clou -d Pakfi -IBM Telum™ -IBM Watsonfi -IBM z16™ -Instanafi -Open Libertyfi -OpenPagesfi -Redbooksfi -The following terms are trademarks of other companies: -Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. -The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis. -Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries. -UNIX is a registered trademark of The Open Group in the United States and other countries. -Other company, product, or service names may be trademarks or service marks of others. -Redbooks (log o) fi Turbon -omicfi -WebSpherefi -z/OSfi -z16™ -
- -
-Back cover -
- -
-REDP-5695-00 -ISBN 0738461067 -
- -
-
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5695.json b/tests/data/groundtruth/docling_v1/redp5695.json deleted file mode 100644 index 6bb1108d..00000000 --- a/tests/data/groundtruth/docling_v1/redp5695.json +++ /dev/null @@ -1 +0,0 @@ -{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "redp5695.pdf", "filename-prov": null, "document-hash": "a03aa4721c6532a8bab8a84cd8fdf579b5d91b92e5e5bbf63552b451c1b1ad7e", "#-pages": 40, "collection-name": null, "description": null, "page-hashes": [{"hash": "2c6aa6caf31aededa105d495c308dfbbb82f36e74a5c918aef77cb55e270512c", "model": "default", "page": 1}, {"hash": "4c44677e63816427d586e3351fca1f60791742ff03d4e4fbd9e20049f0df1e7c", "model": "default", "page": 2}, {"hash": "9b14b4b39f406833be1be7b8a4267fbc0c9e3fb38d9c0d6be9233aaa7b34a290", "model": "default", "page": 3}, {"hash": "b393eac931d491dfb5754007d81c5eb852837b767e6bbf97532fdd9797089c84", "model": "default", "page": 4}, {"hash": "069d8724992bd8bcf023444a735733831db317258922be9bf9e68b6cb71592b3", "model": "default", "page": 5}, {"hash": "50142dc112c6479b6aa9b337444bf76fab1788845c852372d680663fac7bb708", "model": "default", "page": 6}, {"hash": "dd036a3882859d0dca411354baf6f8d89fecaa39938e0336366cdb0e70aea878", "model": "default", "page": 7}, {"hash": "b6ff3d96c10d8bb147a1678f23b1b3dc0a57314ac67de6dc51c7fed42235b8fb", "model": "default", "page": 8}, {"hash": "a9f5f13f5b38d6e5f144870e072b9b5dcda3e9efb2612d12f2f78844a2af5faf", "model": "default", "page": 9}, {"hash": "2ee65c9e3ecaf2ee28d154184562131c2c0d46fde9536daf2bf63f27cd1593fb", "model": "default", "page": 10}, {"hash": "7c3211d92edf78fb8fc2a25419e905c54df6cf08e46a6ba3af97c6ecb6f42976", "model": "default", "page": 11}, {"hash": "e9d2d2c16961c78c4252759f518e49d67e42323770ea954f0fdb5845060255b4", "model": "default", "page": 12}, {"hash": "96ec46a4b8a06f1e4a0b8ab372f0fa2eb9fa3651d598777108e2c8d841504c01", "model": "default", "page": 13}, {"hash": "85666d6d7492d1aa5e2d680aad82b243f74ac9a88d12a822f1e23a4015653280", "model": "default", "page": 14}, {"hash": "996b6243f71e4b579c257f5a8c13120d756c35db892bb3978a030b3c0244b332", "model": "default", "page": 15}, {"hash": "8d3962d8d62baba81d7c1f9136148614f19ce3e67856165e11746a4eea0ba0e2", "model": "default", "page": 16}, {"hash": "c97edc5fbc0c2ebe67d17aaa3a35994c946e63370e43599ff1a53a43cb015f4b", "model": "default", "page": 17}, {"hash": "027b2018dd204fdcfde1f23714efb239c7b0ddec82e6dcb261917047112c59c1", "model": "default", "page": 18}, {"hash": "bfd48e4d4c91d25d1ce8b96cb8b893121083e34366f2336ec2297ad429aefba5", "model": "default", "page": 19}, {"hash": "369aa7281999b4927d03fc80d04f64c4c466672e988a345b8e38b0b413d8b061", "model": "default", "page": 20}, {"hash": "07156cdcdb8bed82cd7def82ae50e3696797733c1af054e52e085d6dc4f158f3", "model": "default", "page": 21}, {"hash": "6868b382cf5f556a700cbfbd3b5019d1874f4d0b539322cf2d66d3ae91750021", "model": "default", "page": 22}, {"hash": "d18c7c0751a2b21cd90b28db97f792b76d800ef27df66b3b7551f30ae8f3c135", "model": "default", "page": 23}, {"hash": "f6bafed831071a1e8cc789bd6dc193c05982a2d11675458e0e470c69e09c39eb", "model": "default", "page": 24}, {"hash": "acd7cf74cdc0fb0f0fa69c5f5d5882fae44ead0f3e98317d0f1ca28a8bbfa0e5", "model": "default", "page": 25}, {"hash": "8618c32aa8f279cc7cfa3df0ffd5eb3f3f54d7216ae3c1af792a4cb778067f0e", "model": "default", "page": 26}, {"hash": "a158cfc6005ac6ec5857112db18ccbab469a42558439bf7c3e2ff5d63894cab4", "model": "default", "page": 27}, {"hash": "d93efe59e4c22d9f511c0df70a9ec01f5a030934af7b9e6f5232db806b143152", "model": "default", "page": 28}, {"hash": "27d5b0915a207c64ea3dfb11866a19a1ef42e54840493113126c243c4be9bd89", "model": "default", "page": 29}, {"hash": "dfd1705fa6a5b13fef569bb8a9dd567ed3950bb91004431c85bd6499135e0d98", "model": "default", "page": 30}, {"hash": "74a78ed4bb5999301ec12e980789a33cabea9131a0a8f03899a49655b7196ea4", "model": "default", "page": 31}, {"hash": "f38e9710dee1ada6c040bdf1d6b33373780790d53391dde1bdf13ba3a24237cc", "model": "default", "page": 32}, {"hash": "4c45d9a942e9431722d4e657e1772e30ed322e4c48aa8fa8e0f582cab686694f", "model": "default", "page": 33}, {"hash": "d5d0bd616da3d60f4162c3bf0c136e6fb6a3776a09daac01676eaf4f194ddbc8", "model": "default", "page": 34}, {"hash": "e68ecc6baff9b98afcefa647a55aa34f9a9fe9f507a393177097d89c5faf1901", "model": "default", "page": 35}, {"hash": "806561bd028d61b13a1d840ef5aa6bc29f596670f6a755cdff7f5ca16156bc6c", "model": "default", "page": 36}, {"hash": "d3b094a0a238bbd0866053a416a69e04d4d8efb937be01a022db3ccb24808e29", "model": "default", "page": 37}, {"hash": "af95f582613321de443a381441d8c361f4ff94fc0f777736e939927cc7d9963f", "model": "default", "page": 38}, {"hash": "28b15af143c0cf1810e8552ebaf1c58b1597cd4bb772e981b5979d0e83c98d0e", "model": "default", "page": 39}, {"hash": "b98218d5619db175ad1a9a2424365094f52356cbefadce85e557ebb182151d82", "model": "default", "page": 40}]}, "main-text": [{"prov": [{"bbox": [285.9599914550781, 760.5719604492188, 417.8999938964844, 782.77197265625], "page": 1, "span": [0, 11], "__ref_s3_data": null}], "text": "Front cover", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/0"}, {"prov": [{"bbox": [44.81999969482422, 595.87158203125, 535.7647094726562, 683.473876953125], "page": 1, "span": [0, 31], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM Z", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [43.98441696166992, 477.7195129394531, 124.95372772216797, 491.095947265625], "page": 1, "span": [0, 14], "__ref_s3_data": null}], "text": "Jasmeet Bhatia", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [44.41876983642578, 452.2200012207031, 119.91647338867188, 465.8930969238281], "page": 1, "span": [0, 12], "__ref_s3_data": null}], "text": "Ravi Gummadi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [44.286624908447266, 426.2153015136719, 204.99734497070312, 440.6647644042969], "page": 1, "span": [0, 28], "__ref_s3_data": null}], "text": "Chandra Shekhar Reddy Potula", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [44.1224250793457, 401.2209777832031, 128.9265899658203, 415.3961181640625], "page": 1, "span": [0, 14], "__ref_s3_data": null}], "text": "Srirama Sharma", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [41.496700286865234, 139.77430725097656, 138.0545654296875, 163.001953125], "page": 1, "span": [0, 11], "__ref_s3_data": null}], "text": "Data and AI", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/1"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/2"}, {"name": "Picture", "type": "figure", "$ref": "#/figures/3"}, {"prov": [{"bbox": [64.80000305175781, 511.6919860839844, 292.852783203125, 535.0673217773438], "page": 3, "span": [0, 18], "__ref_s3_data": null}], "text": "Executive overview", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.93707275390625, 393.32940673828125, 547.2804565429688, 476.0090637207031], "page": 3, "span": [0, 573], "__ref_s3_data": null}], "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.84193420410156, 323.9799499511719, 547.349853515625, 381.958984375], "page": 3, "span": [0, 392], "__ref_s3_data": null}], "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.86183166503906, 253.34674072265625, 547.2882690429688, 312.0947265625], "page": 3, "span": [0, 385], "__ref_s3_data": null}], "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.76502990722656, 171.91412353515625, 547.2760009765625, 242.08624267578125], "page": 3, "span": [0, 503], "__ref_s3_data": null}], "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 57.0750732421875, 387.7856140136719, 66.7349853515625], "page": 3, "span": [0, 68], "__ref_s3_data": null}], "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "type": "footnote", "name": "Footnote", "font": null}, {"prov": [{"bbox": [63.59157943725586, 27.9246826171875, 180.34423828125, 37.41259765625], "page": 3, "span": [0, 27], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2023.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [541.2573852539062, 27.93828010559082, 547.2176513671875, 37.69696044921875], "page": 3, "span": [0, 1], "__ref_s3_data": null}], "text": "1", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.69976043701172, 706.0162963867188, 212.3214874267578, 721.8857421875], "page": 4, "span": [0, 18], "__ref_s3_data": null}], "text": "IBM Z: An overview", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.16062927246094, 630.7666015625, 539.5514526367188, 689.2479858398438], "page": 4, "span": [0, 365], "__ref_s3_data": null}], "text": "Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world's top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.83799743652344, 597.2792358398438, 515.6898803710938, 619.38916015625], "page": 4, "span": [0, 92], "__ref_s3_data": null}], "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following features:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.797607421875, 580.2049560546875, 255.07154846191406, 590.7014770507812], "page": 4, "span": [0, 39], "__ref_s3_data": null}], "text": "- GLYPH On-chip AI acceleration", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7379150390625, 562.7115478515625, 289.6485290527344, 573.1817626953125], "page": 4, "span": [0, 45], "__ref_s3_data": null}], "text": "- GLYPH Quantum-safe crypto discovery", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6077423095703, 546.2800903320312, 247.8863983154297, 556.6842041015625], "page": 4, "span": [0, 37], "__ref_s3_data": null}], "text": "- GLYPH Simplified compliance", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.57025146484375, 528.6082763671875, 225.32553100585938, 539.3775634765625], "page": 4, "span": [0, 33], "__ref_s3_data": null}], "text": "- GLYPH Flexible capacity", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6380615234375, 511.7322692871094, 280.60699462890625, 522.0386962890625], "page": 4, "span": [0, 45], "__ref_s3_data": null}], "text": "- GLYPH Modernization of applications", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63339233398438, 494.9269104003906, 210.07028198242188, 505.2599792480469], "page": 4, "span": [0, 30], "__ref_s3_data": null}], "text": "- GLYPH Sustainability", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.1382598876953, 461.2615661621094, 521.9436645507812, 483.1922607421875], "page": 4, "span": [0, 101], "__ref_s3_data": null}], "text": "With these features, enterprises can upgrade applications while preserving secure and resilient data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.73519897460938, 438.9506530761719, 434.5896301269531, 449.32598876953125], "page": 4, "span": [0, 65], "__ref_s3_data": null}], "text": "To learn more about these features, see the IBM z16 product page.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.62892150878906, 417.04669189453125, 415.693603515625, 427.2217712402344], "page": 4, "span": [0, 60], "__ref_s3_data": null}], "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.5249786376953, 57.0806884765625, 311.82391357421875, 66.81658935546875], "page": 4, "span": [0, 49], "__ref_s3_data": null}], "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "type": "footnote", "name": "Footnote", "font": null}, {"prov": [{"bbox": [63.95490646362305, 27.93828010559082, 72.8219985961914, 37.72607421875], "page": 4, "span": [0, 1], "__ref_s3_data": null}], "text": "2", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.65045166015625, 28.08099365234375, 261.53851318359375, 37.3072509765625], "page": 4, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.89208984375, 333.9317321777344, 211.0067596435547, 343.65899658203125], "page": 5, "span": [0, 16], "__ref_s3_data": null}], "text": "Figure 1 IBM z16", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/4"}, {"prov": [{"bbox": [64.32122039794922, 301.7572937011719, 355.6016540527344, 314.8720397949219], "page": 5, "span": [0, 43], "__ref_s3_data": null}], "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.82815551757812, 230.37913513183594, 547.1771240234375, 288.6673583984375], "page": 5, "span": [0, 394], "__ref_s3_data": null}], "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [541.0438232421875, 27.93828010559082, 547.2176513671875, 37.53704833984375], "page": 5, "span": [0, 1], "__ref_s3_data": null}], "text": "3", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.14278411865234, 27.93828010559082, 72.8219985961914, 37.86651611328125], "page": 6, "span": [0, 1], "__ref_s3_data": null}], "text": "4", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.67771911621094, 28.11907958984375, 261.53851318359375, 37.247314453125], "page": 6, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.2760009765625, 699.1505126953125, 543.5195922851562, 721.6217041015625], "page": 6, "span": [0, 121], "__ref_s3_data": null}], "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.39653778076172, 403.9766540527344, 213.14488220214844, 413.2160949707031], "page": 6, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 2 IBM Z: Processor roadmap", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/5"}, {"prov": [{"bbox": [136.178955078125, 297.0632019042969, 547.256591796875, 391.21533203125], "page": 6, "span": [0, 689], "__ref_s3_data": null}], "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a 'built to build' focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.1420135498047, 226.8505859375, 547.257568359375, 285.2823181152344], "page": 6, "span": [0, 432], "__ref_s3_data": null}], "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.30784606933594, 430.6064758300781, 297.72265625, 439.85430908203125], "page": 7, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/6"}, {"prov": [{"bbox": [135.62088012695312, 359.75799560546875, 547.2974243164062, 417.83917236328125], "page": 7, "span": [0, 417], "__ref_s3_data": null}], "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has \"first in the industry\" on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.72621154785156, 277.82769775390625, 547.322265625, 347.9376525878906], "page": 7, "span": [0, 452], "__ref_s3_data": null}], "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [541.200439453125, 27.93828010559082, 547.2176513671875, 37.50384521484375], "page": 7, "span": [0, 1], "__ref_s3_data": null}], "text": "5", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.22818756103516, 27.93828010559082, 72.8219985961914, 37.7176513671875], "page": 8, "span": [0, 1], "__ref_s3_data": null}], "text": "6", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.59947204589844, 28.08074951171875, 261.53851318359375, 37.28045654296875], "page": 8, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.43333435058594, 698.982421875, 541.310546875, 721.4392700195312], "page": 8, "span": [0, 115], "__ref_s3_data": null}], "text": "Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.16301727294922, 418.5439453125, 387.3546142578125, 427.9372253417969], "page": 8, "span": [0, 78], "__ref_s3_data": null}], "text": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/7"}, {"prov": [{"bbox": [135.82852172851562, 323.50567626953125, 547.2345581054688, 406.03216552734375], "page": 8, "span": [0, 600], "__ref_s3_data": null}], "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.02378845214844, 289.4884948730469, 544.6222534179688, 312.1341857910156], "page": 8, "span": [0, 161], "__ref_s3_data": null}], "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.26493072509766, 481.2569885253906, 189.6370086669922, 490.24163818359375], "page": 9, "span": [0, 29], "__ref_s3_data": null}], "text": "Figure 5 Seamless integration", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/8"}, {"prov": [{"bbox": [64.28071594238281, 438.1763000488281, 341.6769714355469, 453.8793029785156], "page": 9, "span": [0, 35], "__ref_s3_data": null}], "text": "What is Cloud Pak for Data on IBM Z", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9339141845703, 375.2855224609375, 547.132080078125, 421.42291259765625], "page": 9, "span": [0, 353], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8167266845703, 245.02374267578125, 545.086181640625, 363.46099853515625], "page": 9, "span": [0, 857], "__ref_s3_data": null}], "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [540.8759155273438, 27.93828010559082, 547.2176513671875, 37.7607421875], "page": 9, "span": [0, 1], "__ref_s3_data": null}], "text": "7", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.2588882446289, 27.93828010559082, 72.8219985961914, 37.802001953125], "page": 10, "span": [0, 1], "__ref_s3_data": null}], "text": "8", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [87.62134552001953, 28.1259765625, 261.53851318359375, 37.26226806640625], "page": 10, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.00271606445312, 627.116455078125, 547.2805786132812, 721.300537109375], "page": 10, "span": [0, 655], "__ref_s3_data": null}], "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.43482208251953, 299.04669189453125, 264.0491943359375, 308.513671875], "page": 10, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 6 Solution overview of Cloud Pak for Data", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/9"}, {"prov": [{"bbox": [135.67288208007812, 276.31103515625, 518.3954467773438, 286.730712890625], "page": 10, "span": [0, 87], "__ref_s3_data": null}], "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7481231689453, 259.4186096191406, 255.66061401367188, 269.4034423828125], "page": 10, "span": [0, 37], "__ref_s3_data": null}], "text": "- GLYPH Performance and Scale", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7166748046875, 242.43878173828125, 257.89263916015625, 252.60040283203125], "page": 10, "span": [0, 37], "__ref_s3_data": null}], "text": "- GLYPH Embedded Accelerators", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.57183837890625, 224.7489013671875, 263.64544677734375, 235.25732421875], "page": 10, "span": [0, 44], "__ref_s3_data": null}], "text": "- GLYPH Reliability and Availability", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.74082946777344, 208.41940307617188, 269.5468444824219, 218.43896484375], "page": 10, "span": [0, 40], "__ref_s3_data": null}], "text": "- GLYPH Security and Governance.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.00941467285156, 102.2265625, 547.2814331054688, 196.88873291015625], "page": 10, "span": [0, 650], "__ref_s3_data": null}], "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.78146362304688, 705.7388916015625, 519.7557983398438, 721.9649047851562], "page": 11, "span": [0, 57], "__ref_s3_data": null}], "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.4989776611328, 643.1683959960938, 544.5404052734375, 689.4481201171875], "page": 11, "span": [0, 291], "__ref_s3_data": null}], "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.4654083251953, 626.25927734375, 341.2695007324219, 636.006103515625], "page": 11, "span": [0, 58], "__ref_s3_data": null}], "text": "- GLYPH Provision various containerized databases.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.58457946777344, 609.0025024414062, 423.5125427246094, 619.3070068359375], "page": 11, "span": [0, 77], "__ref_s3_data": null}], "text": "- GLYPH Explore, clean, shape, and alter data by using Data Refinery.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.65841674804688, 592.2996826171875, 454.5639343261719, 602.6298828125], "page": 11, "span": [0, 87], "__ref_s3_data": null}], "text": "- GLYPH Use project-specific data that is uploaded, or connect to distant data.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5748748779297, 575.02197265625, 331.7221984863281, 585.3611450195312], "page": 11, "span": [0, 56], "__ref_s3_data": null}], "text": "- GLYPH Create Spark run times and applications.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.54833984375, 558.2803344726562, 544.107177734375, 568.562255859375], "page": 11, "span": [0, 104], "__ref_s3_data": null}], "text": "- GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.70672607421875, 540.80126953125, 499.1278381347656, 551.1715087890625], "page": 11, "span": [0, 92], "__ref_s3_data": null}], "text": "- GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2892303466797, 507.2811279296875, 538.98681640625, 529.4622802734375], "page": 11, "span": [0, 116], "__ref_s3_data": null}], "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.76227569580078, 463.779541015625, 250.52972412109375, 479.44775390625], "page": 11, "span": [0, 21], "__ref_s3_data": null}], "text": "Open-source ecosystem", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.97999572753906, 376.9634094238281, 543.4259643554688, 447.332275390625], "page": 11, "span": [0, 484], "__ref_s3_data": null}], "text": "These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.85617065429688, 271.137939453125, 547.2396850585938, 365.35247802734375], "page": 11, "span": [0, 684], "__ref_s3_data": null}], "text": "IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.98208618164062, 213.03485107421875, 537.3534545898438, 259.3095703125], "page": 11, "span": [0, 331], "__ref_s3_data": null}], "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.20474243164062, 167.01544189453125, 540.7626342773438, 201.47296142578125], "page": 11, "span": [0, 225], "__ref_s3_data": null}], "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.00357055664062, 108.96240234375, 544.6069946289062, 155.3272705078125], "page": 11, "span": [0, 326], "__ref_s3_data": null}], "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community's continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [540.9940795898438, 27.93828010559082, 547.2176513671875, 37.6314697265625], "page": 11, "span": [0, 1], "__ref_s3_data": null}], "text": "9", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.45117950439453, 27.93828010559082, 78.4020004272461, 37.56591796875], "page": 12, "span": [0, 2], "__ref_s3_data": null}], "text": "10", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.23697662353516, 27.87896728515625, 267.07440185546875, 37.23699951171875], "page": 12, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.01052856445312, 651.1951904296875, 547.312255859375, 721.534912109375], "page": 12, "span": [0, 505], "__ref_s3_data": null}], "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.78475952148438, 581.2603759765625, 547.3501586914062, 639.2750244140625], "page": 12, "span": [0, 427], "__ref_s3_data": null}], "text": "Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8437957763672, 499.2002258300781, 546.230712890625, 569.2590942382812], "page": 12, "span": [0, 501], "__ref_s3_data": null}], "text": "In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.206298828125, 464.8299255371094, 521.3436889648438, 487.1847839355469], "page": 12, "span": [0, 143], "__ref_s3_data": null}], "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.09524536132812, 421.95269775390625, 191.27430725097656, 437.7701110839844], "page": 12, "span": [0, 15], "__ref_s3_data": null}], "text": "Why AI on IBM Z", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.68882751464844, 334.8733825683594, 547.2586059570312, 405.32257080078125], "page": 12, "span": [0, 496], "__ref_s3_data": null}], "text": "Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.5255584716797, 240.78839111328125, 547.2825317382812, 323.26287841796875], "page": 12, "span": [0, 546], "__ref_s3_data": null}], "text": "Traditional ML models' power most of today's ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z).", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.04042053222656, 183.20733642578125, 547.3233032226562, 229.3817138671875], "page": 12, "span": [0, 288], "__ref_s3_data": null}], "text": "Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.15190887451172, 429.0500793457031, 506.3805236816406, 438.59246826171875], "page": 13, "span": [0, 104], "__ref_s3_data": null}], "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/10"}, {"prov": [{"bbox": [136.55064392089844, 406.53900146484375, 492.9408264160156, 416.5304260253906], "page": 13, "span": [0, 75], "__ref_s3_data": null}], "text": "In summary, here are some of the reasons why you should choose AI on IBM Z:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7388458251953, 389.7225341796875, 413.4001770019531, 399.8339538574219], "page": 13, "span": [0, 75], "__ref_s3_data": null}], "text": "- GLYPH World-class AI inference platform for enterprise workloads:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.22914123535156, 360.75909423828125, 526.1881103515625, 382.5239562988281], "page": 13, "span": [0, 89], "__ref_s3_data": null}], "text": "- -Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.42306518554688, 331.77947998046875, 547.2465209960938, 353.90643310546875], "page": 13, "span": [0, 113], "__ref_s3_data": null}], "text": "- -Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.33360290527344, 302.7483825683594, 546.7576904296875, 324.48516845703125], "page": 13, "span": [0, 108], "__ref_s3_data": null}], "text": "- -Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7086639404297, 285.60894775390625, 490.0331726074219, 295.7892761230469], "page": 13, "span": [0, 88], "__ref_s3_data": null}], "text": "- GLYPH Security: Encrypted memory, and improved trusted execution environments.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6390838623047, 256.23675537109375, 547.2705078125, 278.46600341796875], "page": 13, "span": [0, 138], "__ref_s3_data": null}], "text": "- GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.31088256835938, 213.536376953125, 161.7474365234375, 229.1109619140625], "page": 13, "span": [0, 12], "__ref_s3_data": null}], "text": "AI use cases", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.98568725585938, 162.75877380371094, 533.9012451171875, 196.73095703125], "page": 13, "span": [0, 262], "__ref_s3_data": null}], "text": "With billions of transactions per day in many of today's industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.95875549316406, 104.7108154296875, 547.2466430664062, 150.69287109375], "page": 13, "span": [0, 295], "__ref_s3_data": null}], "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.34823608398438, 70.34014892578125, 547.311279296875, 92.72308349609375], "page": 13, "span": [0, 146], "__ref_s3_data": null}], "text": "For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [535.8191528320312, 27.93828010559082, 547.2591552734375, 37.69769287109375], "page": 13, "span": [0, 2], "__ref_s3_data": null}], "text": "11", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.53218078613281, 27.93828010559082, 78.4020004272461, 37.490966796875], "page": 14, "span": [0, 2], "__ref_s3_data": null}], "text": "12", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.2241439819336, 27.8603515625, 267.07440185546875, 37.23846435546875], "page": 14, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.15476989746094, 687.272216796875, 525.1851196289062, 721.3535766601562], "page": 14, "span": [0, 184], "__ref_s3_data": null}], "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8750762939453, 641.2594604492188, 547.3113403320312, 675.216796875], "page": 14, "span": [0, 192], "__ref_s3_data": null}], "text": "For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.158935546875, 619.072021484375, 413.4231262207031, 629.2716674804688], "page": 14, "span": [0, 63], "__ref_s3_data": null}], "text": "In the following sections, we describe the following use cases:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.51185607910156, 561.1438598632812, 545.1838989257812, 611.6864624023438], "page": 14, "span": [0, 306], "__ref_s3_data": null}], "text": "- GLYPH \"Use case 1: Responsible AI augmented with risk and regulatory compliance\" on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6671600341797, 544.2023315429688, 402.90234375, 554.774658203125], "page": 14, "span": [0, 71], "__ref_s3_data": null}], "text": "- GLYPH \"Use case 2: Credit default risk assessment\" on page 22", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.19342041015625, 490.9925842285156, 547.2406005859375, 537.3115234375], "page": 14, "span": [0, 295], "__ref_s3_data": null}], "text": "- Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.68087768554688, 474.0491638183594, 371.79620361328125, 484.5167236328125], "page": 14, "span": [0, 64], "__ref_s3_data": null}], "text": "- GLYPH \"Use case 3: Clearing and settlement\" on page 25", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.48846435546875, 445.0339660644531, 541.1401977539062, 467.4772033691406], "page": 14, "span": [0, 151], "__ref_s3_data": null}], "text": "- The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.71913146972656, 427.7883605957031, 455.3772277832031, 438.1060485839844], "page": 14, "span": [0, 84], "__ref_s3_data": null}], "text": "- GLYPH \"Use case 4: Remaining Useful Life of an aircraft engine\" on page 27", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.2084197998047, 399.0348205566406, 534.64013671875, 421.3099365234375], "page": 14, "span": [0, 169], "__ref_s3_data": null}], "text": "- We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.66246032714844, 370.3010559082031, 539.6531372070312, 392.64227294921875], "page": 14, "span": [0, 112], "__ref_s3_data": null}], "text": "- GLYPH \"Use case 5: AI-powered video analytics on an infant's motions for health prediction\" on page 30", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.8683624267578, 340.944091796875, 547.24267578125, 363.34478759765625], "page": 14, "span": [0, 117], "__ref_s3_data": null}], "text": "- In this section, we describe how AI can predict an infant's health conditions by monitoring real-time body movements.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.4876708984375, 278.525634765625, 547.2564697265625, 313.88934326171875], "page": 14, "span": [0, 72], "__ref_s3_data": null}], "text": "Use case 1: Responsible AI augmented with risk and regulatory compliance", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.6639404296875, 216.21588134765625, 547.1787719726562, 262.65277099609375], "page": 14, "span": [0, 326], "__ref_s3_data": null}], "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.313232421875, 181.63140869140625, 547.2424926757812, 203.98114013671875], "page": 14, "span": [0, 152], "__ref_s3_data": null}], "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.53734588623047, 149.578857421875, 186.71859741210938, 162.76495361328125], "page": 14, "span": [0, 19], "__ref_s3_data": null}], "text": "Industry challenges", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.22996520996094, 126.27838134765625, 508.98724365234375, 136.4630126953125], "page": 14, "span": [0, 83], "__ref_s3_data": null}], "text": "Here are the three main reasons why organizations struggle with the adoption of AI:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8061065673828, 109.0609130859375, 293.9800720214844, 119.39752197265625], "page": 14, "span": [0, 48], "__ref_s3_data": null}], "text": "- GLYPH Scaling with growing regulations", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63792419433594, 91.513916015625, 435.7274475097656, 102.025390625], "page": 14, "span": [0, 80], "__ref_s3_data": null}], "text": "- GLYPH Lack of confidence in operationalized AI (making responsible AI)", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.60543823242188, 74.8839111328125, 466.06842041015625, 85.32098388671875], "page": 14, "span": [0, 85], "__ref_s3_data": null}], "text": "- GLYPH Challenges around managing the risk throughout the entire AI workflow", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.29180908203125, 709.186767578125, 324.71160888671875, 721.60595703125], "page": 15, "span": [0, 32], "__ref_s3_data": null}], "text": "Scaling with growing regulations", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.92501831054688, 636.2792358398438, 536.3155517578125, 706.7998046875], "page": 15, "span": [0, 476], "__ref_s3_data": null}], "text": "Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.52218627929688, 608.3349609375, 223.41616821289062, 620.21044921875], "page": 15, "span": [0, 14], "__ref_s3_data": null}], "text": "Responsible AI", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9759521484375, 558.9086303710938, 547.3283081054688, 605.3233642578125], "page": 15, "span": [0, 362], "__ref_s3_data": null}], "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.5354461669922, 531.4407348632812, 364.06561279296875, 543.5475463867188], "page": 15, "span": [0, 39], "__ref_s3_data": null}], "text": "Risks throughout the entire AI workflow", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.28106689453125, 517.4302978515625, 389.47918701171875, 528.0078735351562], "page": 15, "span": [0, 59], "__ref_s3_data": null}], "text": "Organizations need to mitigate risk of the following items:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.77525329589844, 501.0934753417969, 382.91455078125, 511.2773742675781], "page": 15, "span": [0, 69], "__ref_s3_data": null}], "text": "- GLYPH Deciding not to use certain technologies or practices", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.74273681640625, 483.94232177734375, 450.990234375, 494.5668640136719], "page": 15, "span": [0, 80], "__ref_s3_data": null}], "text": "- GLYPH Using personal information when needed and with a user's consent", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5438995361328, 467.1396484375, 366.2126770019531, 477.4102478027344], "page": 15, "span": [0, 63], "__ref_s3_data": null}], "text": "- GLYPH Ensuring automated decisions are free from bias", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.47459411621094, 450.2794494628906, 462.3146057128906, 460.52044677734375], "page": 15, "span": [0, 84], "__ref_s3_data": null}], "text": "- GLYPH Customer confidence by providing explanations for business decisions", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.48123168945312, 433.125, 386.45635986328125, 443.2645263671875], "page": 15, "span": [0, 68], "__ref_s3_data": null}], "text": "- GLYPH Fraud to the organization and to customer's accounts", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.62051391601562, 415.7923278808594, 331.2491149902344, 425.9614562988281], "page": 15, "span": [0, 56], "__ref_s3_data": null}], "text": "- GLYPH Delays in putting models into production", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.05039978027344, 370.3006286621094, 547.186767578125, 404.44390869140625], "page": 15, "span": [0, 232], "__ref_s3_data": null}], "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.85047912597656, 300.28179931640625, 547.24658203125, 358.5035705566406], "page": 15, "span": [0, 431], "__ref_s3_data": null}], "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the \"why\" of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [535.9011840820312, 27.93828010559082, 547.2591552734375, 37.63787841796875], "page": 15, "span": [0, 2], "__ref_s3_data": null}], "text": "13", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.407470703125, 27.93828010559082, 78.4020004272461, 37.68829345703125], "page": 16, "span": [0, 2], "__ref_s3_data": null}], "text": "14", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.1883316040039, 27.84478759765625, 267.07440185546875, 37.2742919921875], "page": 16, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.13604736328125, 674.9320678710938, 547.3073120117188, 721.3720703125], "page": 16, "span": [0, 309], "__ref_s3_data": null}], "text": "For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.17765808105469, 450.5130310058594, 206.827880859375, 459.9346618652344], "page": 16, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 8 Typical AI model lifecycle", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/11"}, {"prov": [{"bbox": [135.79885864257812, 367.7792053222656, 540.1202392578125, 437.8577880859375], "page": 16, "span": [0, 464], "__ref_s3_data": null}], "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.70143127441406, 335.1172790527344, 279.45147705078125, 348.428955078125], "page": 16, "span": [0, 33], "__ref_s3_data": null}], "text": "IBM governance solution for IBM Z", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.8342742919922, 299.73846435546875, 540.66015625, 322.05352783203125], "page": 16, "span": [0, 112], "__ref_s3_data": null}], "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8035888671875, 181.78021240234375, 547.3551025390625, 288.0574645996094], "page": 16, "span": [0, 755], "__ref_s3_data": null}], "text": "AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization's use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model's behavior throughout the lifecycle, the data that was influential in its development, and the possible risks.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9875030517578, 123.76123809814453, 543.354248046875, 170.0089111328125], "page": 16, "span": [0, 292], "__ref_s3_data": null}], "text": "In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3389434814453, 710.2207641601562, 249.09483337402344, 721.6488037109375], "page": 17, "span": [0, 20], "__ref_s3_data": null}], "text": "Lifecycle governance", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.980224609375, 672.2786865234375, 544.0435791015625, 706.5272827148438], "page": 17, "span": [0, 202], "__ref_s3_data": null}], "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.69290161132812, 654.88720703125, 517.3616333007812, 665.34814453125], "page": 17, "span": [0, 97], "__ref_s3_data": null}], "text": "- GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.61203002929688, 637.7196655273438, 428.482666015625, 647.9351806640625], "page": 17, "span": [0, 77], "__ref_s3_data": null}], "text": "- GLYPH Automate the capture of model metadata for report generation.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6266632080078, 621.0405883789062, 352.8333740234375, 631.390380859375], "page": 17, "span": [0, 62], "__ref_s3_data": null}], "text": "- GLYPH Drive transparent and explainable AI at scale.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.69007873535156, 604.1846923828125, 531.1472778320312, 614.5416259765625], "page": 17, "span": [0, 103], "__ref_s3_data": null}], "text": "- GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.56716918945312, 580.2343139648438, 231.8074951171875, 591.5065307617188], "page": 17, "span": [0, 15], "__ref_s3_data": null}], "text": "Risk management", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.1630859375, 554.0730590820312, 544.0723266601562, 575.9500122070312], "page": 17, "span": [0, 130], "__ref_s3_data": null}], "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6591033935547, 537.1072998046875, 497.7820739746094, 547.224853515625], "page": 17, "span": [0, 89], "__ref_s3_data": null}], "text": "- GLYPH Automate facts and workflow management to comply with business standards.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6646270751953, 520.2988891601562, 455.0130310058594, 530.64794921875], "page": 17, "span": [0, 82], "__ref_s3_data": null}], "text": "- GLYPH Use dynamic dashboards for clear and concise customizable results.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.5814971923828, 503.1455383300781, 440.54815673828125, 513.4422607421875], "page": 17, "span": [0, 79], "__ref_s3_data": null}], "text": "- GLYPH Enhanced collaboration across multiple regions and geographies.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.37454223632812, 479.4071350097656, 258.3398742675781, 490.6622314453125], "page": 17, "span": [0, 21], "__ref_s3_data": null}], "text": "Regulatory compliance", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9670867919922, 428.6660461425781, 547.2466430664062, 475.1661071777344], "page": 17, "span": [0, 366], "__ref_s3_data": null}], "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.71563720703125, 412.0512390136719, 433.3389892578125, 422.6202392578125], "page": 17, "span": [0, 80], "__ref_s3_data": null}], "text": "- GLYPH Help adhere to external AI regulations for audit and compliance.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.65516662597656, 394.9600830078125, 465.02978515625, 405.3585205078125], "page": 17, "span": [0, 88], "__ref_s3_data": null}], "text": "- GLYPH Convert external AI regulations into policies for automatic enforcement.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6472930908203, 378.27911376953125, 503.326171875, 388.6190490722656], "page": 17, "span": [0, 93], "__ref_s3_data": null}], "text": "- GLYPH Use dynamic dashboards for compliance status across policies and regulations.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.04916381835938, 319.36859130859375, 547.2515869140625, 366.0682067871094], "page": 17, "span": [0, 271], "__ref_s3_data": null}], "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6191864013672, 291.2804870605469, 526.8416137695312, 313.45947265625], "page": 17, "span": [0, 119], "__ref_s3_data": null}], "text": "- GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.48377990722656, 225.61773681640625, 541.8055419921875, 284.0699462890625], "page": 17, "span": [0, 413], "__ref_s3_data": null}], "text": "- GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.42056274414062, 204.2818603515625, 512.4911499023438, 214.4039306640625], "page": 17, "span": [0, 82], "__ref_s3_data": null}], "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.24427795410156, 56.91937255859375, 418.4429931640625, 66.9732666015625], "page": 17, "span": [0, 75], "__ref_s3_data": null}], "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "type": "footnote", "name": "Footnote", "font": null}, {"prov": [{"bbox": [535.963623046875, 27.93828010559082, 547.2591552734375, 37.68475341796875], "page": 17, "span": [0, 2], "__ref_s3_data": null}], "text": "15", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.34585571289062, 489.1927490234375, 295.9040222167969, 498.58984375], "page": 18, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 9 Remote AI governance solution end-to-end flow", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/12"}, {"prov": [{"bbox": [136.1533203125, 466.38671875, 438.0164794921875, 476.65362548828125], "page": 18, "span": [0, 66], "__ref_s3_data": null}], "text": "To achieve end-to-end AI governance, complete the following steps:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 437.72967529296875, 541.7039184570312, 460.077880859375], "page": 18, "span": [0, 96], "__ref_s3_data": null}], "text": "- 1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.25994873046875, 113.96868896484375, 279.38360595703125, 123.18603515625], "page": 18, "span": [0, 49], "__ref_s3_data": null}], "text": "Figure 10 Creating a model entry in IBM OpenPages", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/13"}, {"prov": [{"bbox": [64.45965576171875, 27.93828010559082, 78.4020004272461, 37.55645751953125], "page": 18, "span": [0, 2], "__ref_s3_data": null}], "text": "16", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.34640502929688, 27.83563232421875, 267.07440185546875, 37.273681640625], "page": 18, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.98834228515625, 686.9762573242188, 542.9114379882812, 721.23388671875], "page": 19, "span": [0, 192], "__ref_s3_data": null}], "text": "- 2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.27749633789062, 366.48577880859375, 290.4153137207031, 375.8592834472656], "page": 19, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 11 Training an AI model by using Watson Studio", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/14"}, {"prov": [{"bbox": [136.21717834472656, 331.84283447265625, 547.2686767578125, 353.99700927734375], "page": 19, "span": [0, 115], "__ref_s3_data": null}], "text": "- 3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.3975601196289, 56.48388671875, 351.1659851074219, 65.911376953125], "page": 19, "span": [0, 66], "__ref_s3_data": null}], "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/15"}, {"prov": [{"bbox": [535.8695068359375, 27.93828010559082, 547.2591552734375, 37.5572509765625], "page": 19, "span": [0, 2], "__ref_s3_data": null}], "text": "17", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.78439331054688, 674.989501953125, 547.24560546875, 721.399658203125], "page": 20, "span": [0, 338], "__ref_s3_data": null}], "text": "- 4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2765350341797, 394.5011291503906, 242.76724243164062, 403.81927490234375], "page": 20, "span": [0, 24], "__ref_s3_data": null}], "text": "Figure 13 External model", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/16"}, {"prov": [{"bbox": [150.45053100585938, 359.73297119140625, 547.290283203125, 382.123291015625], "page": 20, "span": [0, 127], "__ref_s3_data": null}], "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.26177978515625, 72.2799072265625, 187.44825744628906, 81.8817138671875], "page": 20, "span": [0, 28], "__ref_s3_data": null}], "text": "Figure 14 Tracking the model", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/17"}, {"prov": [{"bbox": [64.46235656738281, 27.93828010559082, 78.4020004272461, 37.5947265625], "page": 20, "span": [0, 2], "__ref_s3_data": null}], "text": "18", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.31233978271484, 27.7569580078125, 267.07440185546875, 37.3203125], "page": 20, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [150.36676025390625, 699.0984497070312, 547.2222290039062, 721.2769165039062], "page": 21, "span": [0, 122], "__ref_s3_data": null}], "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.23995208740234, 368.12579345703125, 450.36871337890625, 377.292236328125], "page": 21, "span": [0, 91], "__ref_s3_data": null}], "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/18"}, {"prov": [{"bbox": [535.8822631835938, 27.93828010559082, 547.2591552734375, 37.6324462890625], "page": 21, "span": [0, 2], "__ref_s3_data": null}], "text": "19", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.09112548828125, 698.8700561523438, 525.693115234375, 721.4546508789062], "page": 22, "span": [0, 94], "__ref_s3_data": null}], "text": "- 5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.40975189208984, 398.55523681640625, 295.9855651855469, 407.9462585449219], "page": 22, "span": [0, 55], "__ref_s3_data": null}], "text": "Figure 16 Creating an external model on an x86 platform", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/19"}, {"prov": [{"bbox": [135.78622436523438, 339.69549560546875, 547.329345703125, 386.0187683105469], "page": 22, "span": [0, 356], "__ref_s3_data": null}], "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.867469787597656, 27.93828010559082, 78.4020004272461, 37.66998291015625], "page": 22, "span": [0, 2], "__ref_s3_data": null}], "text": "20", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.32005310058594, 27.82635498046875, 267.07440185546875, 37.29931640625], "page": 22, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.26493835449219, 429.2548522949219, 386.60101318359375, 438.6904602050781], "page": 23, "span": [0, 76], "__ref_s3_data": null}], "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/20"}, {"prov": [{"bbox": [135.85134887695312, 358.6399230957031, 547.2167358398438, 416.78009033203125], "page": 23, "span": [0, 340], "__ref_s3_data": null}], "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.34110260009766, 57.9146728515625, 507.7935485839844, 67.2464599609375], "page": 23, "span": [0, 103], "__ref_s3_data": null}], "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/21"}, {"prov": [{"bbox": [535.4277954101562, 27.93828010559082, 547.2591552734375, 37.76495361328125], "page": 23, "span": [0, 2], "__ref_s3_data": null}], "text": "21", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.80000305175781, 706.0162963867188, 389.5157470703125, 721.75732421875], "page": 24, "span": [0, 42], "__ref_s3_data": null}], "text": "Use case 2: Credit default risk assessment", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.07400512695312, 655.279296875, 547.2247314453125, 689.2387084960938], "page": 24, "span": [0, 265], "__ref_s3_data": null}], "text": "In today's world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.54896545410156, 622.16162109375, 186.71859741210938, 635.5101318359375], "page": 24, "span": [0, 19], "__ref_s3_data": null}], "text": "Industry challenges", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.15374755859375, 563.0860595703125, 547.2955322265625, 609.3872680664062], "page": 24, "span": [0, 366], "__ref_s3_data": null}], "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone's likelihood of default, but that is not an efficient method for judgment as a business grows.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.6235122680664, 530.6572875976562, 341.16033935546875, 543.4171142578125], "page": 24, "span": [0, 45], "__ref_s3_data": null}], "text": "Predictions of credit default risk assessment", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9077606201172, 435.2793884277344, 547.2635498046875, 517.2838745117188], "page": 24, "span": [0, 579], "__ref_s3_data": null}], "text": "In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.04486083984375, 389.1506042480469, 547.1471557617188, 423.1811218261719], "page": 24, "span": [0, 252], "__ref_s3_data": null}], "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.09634399414062, 330.975341796875, 547.2008666992188, 377.2167663574219], "page": 24, "span": [0, 321], "__ref_s3_data": null}], "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.85818862915039, 27.93828010559082, 78.4020004272461, 37.5885009765625], "page": 24, "span": [0, 2], "__ref_s3_data": null}], "text": "22", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.21298217773438, 27.90716552734375, 267.07440185546875, 37.21533203125], "page": 24, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.25103759765625, 439.3569641113281, 395.7005615234375, 448.5760498046875], "page": 25, "span": [0, 82], "__ref_s3_data": null}], "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/22"}, {"prov": [{"bbox": [135.72901916503906, 380.574951171875, 547.34521484375, 426.48486328125], "page": 25, "span": [0, 317], "__ref_s3_data": null}], "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.47738647460938, 310.60186767578125, 545.5831909179688, 368.5098876953125], "page": 25, "span": [0, 424], "__ref_s3_data": null}], "text": "Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9343719482422, 264.64080810546875, 528.6572875976562, 298.35601806640625], "page": 25, "span": [0, 232], "__ref_s3_data": null}], "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.85601806640625, 182.3758544921875, 547.310546875, 252.58935546875], "page": 25, "span": [0, 498], "__ref_s3_data": null}], "text": "Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7754364013672, 148.32958984375, 547.2376708984375, 170.63201904296875], "page": 25, "span": [0, 173], "__ref_s3_data": null}], "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [535.4268188476562, 27.93828010559082, 547.2591552734375, 37.6199951171875], "page": 25, "span": [0, 2], "__ref_s3_data": null}], "text": "23", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.90467071533203, 27.93828010559082, 78.4020004272461, 37.68109130859375], "page": 26, "span": [0, 2], "__ref_s3_data": null}], "text": "24", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.28766632080078, 27.8919677734375, 267.07440185546875, 37.2451171875], "page": 26, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.43939208984375, 710.9625244140625, 489.5701599121094, 721.3068237304688], "page": 26, "span": [0, 80], "__ref_s3_data": null}], "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.37335968017578, 421.3126220703125, 344.09613037109375, 430.6827697753906], "page": 26, "span": [0, 70], "__ref_s3_data": null}], "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/23"}, {"prov": [{"bbox": [136.12535095214844, 362.44940185546875, 534.5686645507812, 408.48529052734375], "page": 26, "span": [0, 335], "__ref_s3_data": null}], "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model's endpoint.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.19705200195312, 328.7194519042969, 547.2158813476562, 350.4607849121094], "page": 26, "span": [0, 108], "__ref_s3_data": null}], "text": "In summary, here are some considerations for developing real-time AI models, such as credit risk assessment:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6735076904297, 311.7396545410156, 522.9054565429688, 322.04962158203125], "page": 26, "span": [0, 102], "__ref_s3_data": null}], "text": "- GLYPH A preference for in-platform run times of the model, such as faster execution results.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.52078247070312, 294.32757568359375, 445.5369873046875, 304.5061340332031], "page": 26, "span": [0, 81], "__ref_s3_data": null}], "text": "- GLYPH Less overhead in the end-to-end flows might improve scoring time.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.63246154785156, 265.68341064453125, 547.3232421875, 287.9996643066406], "page": 26, "span": [0, 168], "__ref_s3_data": null}], "text": "- GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.62271118164062, 236.74082946777344, 541.7804565429688, 258.63983154296875], "page": 26, "span": [0, 115], "__ref_s3_data": null}], "text": "- GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.50205993652344, 195.76141357421875, 531.8067626953125, 230.15380859375], "page": 26, "span": [0, 234], "__ref_s3_data": null}], "text": "- GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.79078674316406, 705.6964721679688, 338.5379638671875, 721.92333984375], "page": 27, "span": [0, 35], "__ref_s3_data": null}], "text": "Use case 3: Clearing and settlement", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.91648864746094, 630.9378051757812, 539.5654907226562, 689.2892456054688], "page": 27, "span": [0, 433], "__ref_s3_data": null}], "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.3849868774414, 598.3488159179688, 179.53228759765625, 611.3507690429688], "page": 27, "span": [0, 18], "__ref_s3_data": null}], "text": "Industry challenge", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.17025756835938, 563.2137451171875, 538.4359130859375, 585.2027587890625], "page": 27, "span": [0, 184], "__ref_s3_data": null}], "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.63189697265625, 530.2203369140625, 266.077880859375, 543.4601440429688], "page": 27, "span": [0, 32], "__ref_s3_data": null}], "text": "Clearing and settlement solution", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.968505859375, 470.9981994628906, 545.6968383789062, 517.2374267578125], "page": 27, "span": [0, 277], "__ref_s3_data": null}], "text": "Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.97213745117188, 389.1208190917969, 544.662109375, 459.1885681152344], "page": 27, "span": [0, 499], "__ref_s3_data": null}], "text": "In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.8656463623047, 319.3011169433594, 543.3472900390625, 377.083740234375], "page": 27, "span": [0, 430], "__ref_s3_data": null}], "text": "The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.92105102539062, 261.00042724609375, 547.2335815429688, 307.17913818359375], "page": 27, "span": [0, 298], "__ref_s3_data": null}], "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [535.565673828125, 27.93828010559082, 547.2591552734375, 37.67999267578125], "page": 27, "span": [0, 2], "__ref_s3_data": null}], "text": "25", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.89773941040039, 27.93828010559082, 78.4020004272461, 37.6005859375], "page": 28, "span": [0, 2], "__ref_s3_data": null}], "text": "26", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.21942138671875, 27.8814697265625, 267.07440185546875, 37.2734375], "page": 28, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [136.25498962402344, 699.2785034179688, 537.352294921875, 721.3104858398438], "page": 28, "span": [0, 146], "__ref_s3_data": null}], "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.17871856689453, 467.9989013671875, 459.98809814453125, 477.33721923828125], "page": 28, "span": [0, 97], "__ref_s3_data": null}], "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/24"}, {"prov": [{"bbox": [136.43458557128906, 445.08782958984375, 353.37115478515625, 455.203369140625], "page": 28, "span": [0, 50], "__ref_s3_data": null}], "text": "Here are the steps of the high-level process flow:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.8000030517578, 415.95501708984375, 524.740966796875, 437.9080505371094], "page": 28, "span": [0, 135], "__ref_s3_data": null}], "text": "- 1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.05679321289062, 387.2192687988281, 542.9837646484375, 409.4246826171875], "page": 28, "span": [0, 103], "__ref_s3_data": null}], "text": "- 2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.27484130859375, 345.4718933105469, 545.7424926757812, 380.01947021484375], "page": 28, "span": [0, 188], "__ref_s3_data": null}], "text": "- 3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.03822326660156, 328.7619323730469, 468.5547790527344, 339.3093566894531], "page": 28, "span": [0, 71], "__ref_s3_data": null}], "text": "- 4. Deploy the saved model into a deployment space for batch deployment.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.39476013183594, 311.90350341796875, 417.2825622558594, 321.93609619140625], "page": 28, "span": [0, 62], "__ref_s3_data": null}], "text": "- 5. Create a batch deployment by using any of these interfaces:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.49728393554688, 295.11468505859375, 460.12939453125, 305.3652038574219], "page": 28, "span": [0, 67], "__ref_s3_data": null}], "text": "- a. Watson Studio user interface from an Analytics deployment space.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.5271759033203, 277.79693603515625, 251.6896209716797, 288.0757751464844], "page": 28, "span": [0, 21], "__ref_s3_data": null}], "text": "- b. WML Python client.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.59584045410156, 261.2212829589844, 244.95565795898438, 271.8419189453125], "page": 28, "span": [0, 17], "__ref_s3_data": null}], "text": "- c. WML REST APIs.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.3202667236328, 243.8004150390625, 418.506591796875, 254.1214599609375], "page": 28, "span": [0, 61], "__ref_s3_data": null}], "text": "- 6. A hardware configuration can be chosen for the deployment.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.2103271484375, 214.9263916015625, 545.685791015625, 237.25958251953125], "page": 28, "span": [0, 160], "__ref_s3_data": null}], "text": "- 7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.31875610351562, 185.52032470703125, 510.0397033691406, 208.01806640625], "page": 28, "span": [0, 99], "__ref_s3_data": null}], "text": "- 8. One way to run batch deployment to predict or score is to create and run a batch deployment job.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.13897705078125, 168.968994140625, 270.1285705566406, 179.425048828125], "page": 28, "span": [0, 30], "__ref_s3_data": null}], "text": "- 9. Provide an input data type:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.43360900878906, 151.4150390625, 374.55621337890625, 161.90948486328125], "page": 28, "span": [0, 50], "__ref_s3_data": null}], "text": "- a. Inline data for entering a JSON format payload.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.56649780273438, 135.2022705078125, 492.3292236328125, 145.2796630859375], "page": 28, "span": [0, 78], "__ref_s3_data": null}], "text": "- b. Select Data asset , click Select data source , and then specify your asset.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.80201721191406, 117.6864013671875, 471.90997314453125, 127.86083984375], "page": 28, "span": [0, 75], "__ref_s3_data": null}], "text": "- 10.The output data type can be a new output file or a connected data asset.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.80201721191406, 89.26384735107422, 546.2705688476562, 111.1422119140625], "page": 28, "span": [0, 93], "__ref_s3_data": null}], "text": "- 11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [136.71322631835938, 59.8948974609375, 531.2200927734375, 82.11285400390625], "page": 28, "span": [0, 98], "__ref_s3_data": null}], "text": "- 12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.4560546875, 708.4141845703125, 124.18352508544922, 721.5007934570312], "page": 29, "span": [0, 7], "__ref_s3_data": null}], "text": "Summary", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.6417999267578, 660.84716796875, 532.9658813476562, 695.3091430664062], "page": 29, "span": [0, 223], "__ref_s3_data": null}], "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.6079559326172, 643.5902099609375, 374.5103454589844, 654.12255859375], "page": 29, "span": [0, 63], "__ref_s3_data": null}], "text": "- GLYPH No Impact to SLAs and the batch process window.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.4309844970703, 626.9100952148438, 508.5062255859375, 637.3343505859375], "page": 29, "span": [0, 97], "__ref_s3_data": null}], "text": "- GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.6011199951172, 598.2996826171875, 533.5338134765625, 620.6939697265625], "page": 29, "span": [0, 110], "__ref_s3_data": null}], "text": "- GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [64.69216918945312, 554.8306884765625, 482.53704833984375, 571.3740844726562], "page": 29, "span": [0, 55], "__ref_s3_data": null}], "text": "Use case 4: Remaining Useful Life of an aircraft engine", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.27346801757812, 516.2785034179688, 545.7247314453125, 538.683349609375], "page": 29, "span": [0, 108], "__ref_s3_data": null}], "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0217742919922, 458.0208740234375, 547.2705688476562, 504.0582580566406], "page": 29, "span": [0, 339], "__ref_s3_data": null}], "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.3080596923828, 424.2519226074219, 525.1622924804688, 446.7120056152344], "page": 29, "span": [0, 114], "__ref_s3_data": null}], "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.39527893066406, 161.38043212890625, 244.8438262939453, 170.691650390625], "page": 29, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 22 Inferencing architecture on IBM Z", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/25"}, {"prov": [{"bbox": [136.10833740234375, 66.6394271850586, 547.2557373046875, 148.54931640625], "page": 29, "span": [0, 557], "__ref_s3_data": null}], "text": "Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model's life.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [535.5003051757812, 27.93828010559082, 547.2591552734375, 37.801513671875], "page": 29, "span": [0, 2], "__ref_s3_data": null}], "text": "27", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [63.85002517700195, 27.93828010559082, 78.4020004272461, 37.60455322265625], "page": 30, "span": [0, 2], "__ref_s3_data": null}], "text": "28", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.15624237060547, 27.85723876953125, 267.07440185546875, 37.27899169921875], "page": 30, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.91494750976562, 615.0191040039062, 547.2824096679688, 721.306396484375], "page": 30, "span": [0, 754], "__ref_s3_data": null}], "text": "Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist's journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see \"Use case 3: Clearing and settlement\" on page 25.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.84686279296875, 557.2607421875, 545.1770629882812, 603.3901977539062], "page": 30, "span": [0, 289], "__ref_s3_data": null}], "text": "Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.91741943359375, 510.9693298339844, 547.212890625, 545.34765625], "page": 30, "span": [0, 249], "__ref_s3_data": null}], "text": "We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.88528442382812, 452.83648681640625, 547.3082885742188, 499.3803405761719], "page": 30, "span": [0, 304], "__ref_s3_data": null}], "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.9976348876953, 371.1309814453125, 547.282470703125, 441.36517333984375], "page": 30, "span": [0, 495], "__ref_s3_data": null}], "text": "For decision-making about an aircraft engine's life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7574462890625, 313.1587829589844, 547.32421875, 359.3186950683594], "page": 30, "span": [0, 273], "__ref_s3_data": null}], "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.12620544433594, 254.95623779296875, 547.2745361328125, 301.5126953125], "page": 30, "span": [0, 318], "__ref_s3_data": null}], "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.40904235839844, 221.0084228515625, 521.204345703125, 243.3863525390625], "page": 30, "span": [0, 121], "__ref_s3_data": null}], "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.29751586914062, 340.3518371582031, 216.1868438720703, 349.6379699707031], "page": 31, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 23 In-depth architectural view", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/26"}, {"prov": [{"bbox": [136.26695251464844, 306.0186462402344, 501.76422119140625, 327.9122314453125], "page": 31, "span": [0, 106], "__ref_s3_data": null}], "text": "In summary, consider the following points while developing an AI-based predictive maintenance application:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.49343872070312, 265.08624267578125, 547.3203125, 299.4659423828125], "page": 31, "span": [0, 204], "__ref_s3_data": null}], "text": "- GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.57691955566406, 247.70538330078125, 491.34027099609375, 257.9407958984375], "page": 31, "span": [0, 96], "__ref_s3_data": null}], "text": "- GLYPH The trustworthiness of the predicted output is important for critical use cases.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.67471313476562, 219.09210205078125, 534.4998779296875, 241.30987548828125], "page": 31, "span": [0, 118], "__ref_s3_data": null}], "text": "- GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.61285400390625, 190.240234375, 547.2156982421875, 212.05743408203125], "page": 31, "span": [0, 141], "__ref_s3_data": null}], "text": "- GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.52349853515625, 160.86175537109375, 504.0291748046875, 183.47650146484375], "page": 31, "span": [0, 128], "__ref_s3_data": null}], "text": "- GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [535.4804077148438, 27.93828010559082, 547.2591552734375, 37.7464599609375], "page": 31, "span": [0, 2], "__ref_s3_data": null}], "text": "29", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.292236328125, 686.99609375, 542.2593994140625, 721.9068603515625], "page": 32, "span": [0, 83], "__ref_s3_data": null}], "text": "Use case 5: AI-powered video analytics on an infant's motions for health prediction", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [136.04208374023438, 612.2630004882812, 546.6989135742188, 670.8692016601562], "page": 32, "span": [0, 395], "__ref_s3_data": null}], "text": "Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.93234252929688, 553.6912231445312, 547.3121948242188, 600.051025390625], "page": 32, "span": [0, 280], "__ref_s3_data": null}], "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.01303100585938, 508.30059814453125, 533.3443603515625, 542.4129638671875], "page": 32, "span": [0, 264], "__ref_s3_data": null}], "text": "Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.85812377929688, 426.2819519042969, 535.1302490234375, 496.4077453613281], "page": 32, "span": [0, 442], "__ref_s3_data": null}], "text": "In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby's life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.58500671386719, 393.4929504394531, 186.71859741210938, 406.79620361328125], "page": 32, "span": [0, 19], "__ref_s3_data": null}], "text": "Industry challenges", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.78916931152344, 334.298828125, 547.2576293945312, 380.6932067871094], "page": 32, "span": [0, 323], "__ref_s3_data": null}], "text": "There are video surveillance systems that are installed for monitoring an infant's movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.95849609375, 264.06689453125, 547.2775268554688, 322.5081787109375], "page": 32, "span": [0, 391], "__ref_s3_data": null}], "text": "There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something \"smart\" that monitors constantly the surveillance system and detect problems effectively.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.81661987304688, 218.02496337890625, 547.2385864257812, 251.96868896484375], "page": 32, "span": [0, 248], "__ref_s3_data": null}], "text": "AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.16104125976562, 183.468017578125, 541.7665405273438, 205.88714599609375], "page": 32, "span": [0, 173], "__ref_s3_data": null}], "text": "Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.49705505371094, 150.97406005859375, 278.4443054199219, 164.32861328125], "page": 32, "span": [0, 36], "__ref_s3_data": null}], "text": "Infant motion analytics in real time", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.9631805419922, 67.82470703125, 547.2257080078125, 137.95867919921875], "page": 32, "span": [0, 519], "__ref_s3_data": null}], "text": "AI is the current \"market trend evolution\" in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.11967468261719, 27.93828010559082, 78.4020004272461, 37.5791015625], "page": 32, "span": [0, 2], "__ref_s3_data": null}], "text": "30", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.19580841064453, 27.85504150390625, 267.07440185546875, 37.26409912109375], "page": 32, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.8349609375, 687.23095703125, 540.1576538085938, 721.387451171875], "page": 33, "span": [0, 258], "__ref_s3_data": null}], "text": "CP4D was used to build and deploy the AI-powered video analytics on infant's motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0093536376953, 629.25927734375, 542.9444580078125, 675.2120971679688], "page": 33, "span": [0, 288], "__ref_s3_data": null}], "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.36393737792969, 369.383544921875, 281.63330078125, 378.4368591308594], "page": 33, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 24 Architecture for AI-powered video analytics", "type": "caption", "name": "Caption", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/27"}, {"prov": [{"bbox": [135.9974822998047, 274.28826904296875, 547.311279296875, 356.6090087890625], "page": 33, "span": [0, 575], "__ref_s3_data": null}], "text": "Live camera feeds or recorded videos of an infant's movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant's body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.75706481933594, 192.76055908203125, 539.9171752929688, 262.49298095703125], "page": 33, "span": [0, 454], "__ref_s3_data": null}], "text": "When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant's health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.83775329589844, 170.34564208984375, 437.95953369140625, 180.63201904296875], "page": 33, "span": [0, 68], "__ref_s3_data": null}], "text": "We can leverage the following AI technology stack for this use case:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.53660583496094, 141.7152099609375, 546.6869506835938, 164.04058837890625], "page": 33, "span": [0, 117], "__ref_s3_data": null}], "text": "- GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.43955993652344, 124.72181701660156, 455.69329833984375, 134.6781005859375], "page": 33, "span": [0, 80], "__ref_s3_data": null}], "text": "- GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.51890563964844, 95.74219512939453, 543.4529418945312, 118.01629638671875], "page": 33, "span": [0, 120], "__ref_s3_data": null}], "text": "- GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.43861389160156, 78.37835693359375, 516.3308715820312, 88.65191650390625], "page": 33, "span": [0, 96], "__ref_s3_data": null}], "text": "- GLYPH OpenCV: A real-time computer vision library that helps perform image processing.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [535.5228881835938, 27.93828010559082, 547.2591552734375, 37.67767333984375], "page": 33, "span": [0, 2], "__ref_s3_data": null}], "text": "31", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.99948120117188, 687.2371826171875, 542.3601684570312, 721.2702026367188], "page": 34, "span": [0, 238], "__ref_s3_data": null}], "text": "WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.3565673828125, 644.0363159179688, 223.8605499267578, 659.8582763671875], "page": 34, "span": [0, 20], "__ref_s3_data": null}], "text": "Additional resources", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.6084747314453, 605.2584838867188, 547.2325439453125, 627.3983154296875], "page": 34, "span": [0, 149], "__ref_s3_data": null}], "text": "- GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.61322021484375, 588.2786865234375, 300.0693054199219, 598.4909057617188], "page": 34, "span": [0, 49], "__ref_s3_data": null}], "text": "- GLYPH IBM Cloud Pak for Data Tutorials.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.7628173828125, 559.299072265625, 518.558837890625, 581.2073974609375], "page": 34, "span": [0, 149], "__ref_s3_data": null}], "text": "- GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.3540802001953, 530.036376953125, 527.840576171875, 551.8923950195312], "page": 34, "span": [0, 127], "__ref_s3_data": null}], "text": "- -Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.2523193359375, 501.28009033203125, 539.9617919921875, 523.225341796875], "page": 34, "span": [0, 152], "__ref_s3_data": null}], "text": "- -Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [151.19593811035156, 448.30084228515625, 547.2676391601562, 494.5711669921875], "page": 34, "span": [0, 319], "__ref_s3_data": null}], "text": "- -Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [165.18856811523438, 419.2614440917969, 547.1928100585938, 441.26715087890625], "page": 34, "span": [0, 131], "__ref_s3_data": null}], "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.41288757324219, 375.7332763671875, 137.74366760253906, 391.7469787597656], "page": 34, "span": [0, 7], "__ref_s3_data": null}], "text": "Summary", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.86285400390625, 253.18939208984375, 547.1648559570312, 359.3092956542969], "page": 34, "span": [0, 734], "__ref_s3_data": null}], "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.06120300292969, 220.6373748779297, 114.58550262451172, 233.67156982421875], "page": 34, "span": [0, 7], "__ref_s3_data": null}], "text": "Authors", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [64.16203308105469, 27.93828010559082, 78.4020004272461, 37.50299072265625], "page": 34, "span": [0, 2], "__ref_s3_data": null}], "text": "32", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.21607208251953, 27.91644287109375, 267.07440185546875, 37.19580078125], "page": 34, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [135.81004333496094, 185.25857543945312, 538.573486328125, 207.376953125], "page": 34, "span": [0, 112], "__ref_s3_data": null}], "text": "This publication was produced by a team of specialists from around the world working with the IBM Redbooks team:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.75830078125, 115.14935302734375, 547.2435913085938, 173.5089111328125], "page": 34, "span": [0, 393], "__ref_s3_data": null}], "text": "Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.0478515625, 651.166748046875, 546.0402221679688, 721.465576171875], "page": 35, "span": [0, 505], "__ref_s3_data": null}], "text": "Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master's degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.68675231933594, 569.0224609375, 546.8887329101562, 639.4677734375], "page": 35, "span": [0, 501], "__ref_s3_data": null}], "text": "Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.7921600341797, 438.8973693847656, 547.256103515625, 557.3799438476562], "page": 35, "span": [0, 828], "__ref_s3_data": null}], "text": "Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.95065307617188, 417.0667419433594, 432.8396301269531, 427.2441711425781], "page": 35, "span": [0, 71], "__ref_s3_data": null}], "text": "Thanks to the following people for their contributions to this project:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.16671752929688, 383.0773620605469, 314.3034973144531, 405.195556640625], "page": 35, "span": [0, 65], "__ref_s3_data": null}], "text": "Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.28025817871094, 349.3034973144531, 364.17230224609375, 371.7374572753906], "page": 35, "span": [0, 54], "__ref_s3_data": null}], "text": "Shin Kelly Yang, AI on IBM Z Product Management IBM US", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.87332153320312, 315.28411865234375, 537.7623291015625, 337.4849853515625], "page": 35, "span": [0, 87], "__ref_s3_data": null}], "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.67491912841797, 282.3042297363281, 349.12164306640625, 295.62060546875], "page": 35, "span": [0, 43], "__ref_s3_data": null}], "text": "Now you can become a published author, too!", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.876953125, 187.2394561767578, 547.3480224609375, 269.32843017578125], "page": 35, "span": [0, 559], "__ref_s3_data": null}], "text": "Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.39222717285156, 165.0889892578125, 547.3431396484375, 175.36004638671875], "page": 35, "span": [0, 91], "__ref_s3_data": null}], "text": "Find out more about the residency program, browse the residency index, and apply online at:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [136.80099487304688, 148.4791259765625, 301.6788024902344, 157.7542724609375], "page": 35, "span": [0, 34], "__ref_s3_data": null}], "text": "ibm.com /redbooks/residencies.html", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [535.5333251953125, 27.93828010559082, 547.2591552734375, 37.59283447265625], "page": 35, "span": [0, 2], "__ref_s3_data": null}], "text": "33", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.4889907836914, 708.357421875, 270.4855651855469, 721.6314086914062], "page": 36, "span": [0, 30], "__ref_s3_data": null}], "text": "Stay connected to IBM Redbooks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [135.56192016601562, 685.2982788085938, 241.2664794921875, 695.48486328125], "page": 36, "span": [0, 36], "__ref_s3_data": null}], "text": "- GLYPH Find us on LinkedIn:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.71234130859375, 668.0650024414062, 391.0767822265625, 677.8062744140625], "page": 36, "span": [0, 48], "__ref_s3_data": null}], "text": "http://www.linkedin.com/groups?home=&gid=2130806", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [135.51414489746094, 639.2791137695312, 546.8383178710938, 661.1776733398438], "page": 36, "span": [0, 118], "__ref_s3_data": null}], "text": "- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.69110107421875, 622.588134765625, 451.35418701171875, 632.6083984375], "page": 36, "span": [0, 60], "__ref_s3_data": null}], "text": "- https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [135.90457153320312, 604.872802734375, 430.1478271484375, 615.35009765625], "page": 36, "span": [0, 76], "__ref_s3_data": null}], "text": "- GLYPH Stay current on recent Redbooks publications with RSS Feeds:", "type": "paragraph", "name": "List-item", "font": null}, {"prov": [{"bbox": [150.6310272216797, 588.5687866210938, 331.0777282714844, 598.2605590820312], "page": 36, "span": [0, 36], "__ref_s3_data": null}], "text": "http://www.redbooks.ibm.com/rss.html", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.23326110839844, 27.93828010559082, 78.4020004272461, 37.54473876953125], "page": 36, "span": [0, 2], "__ref_s3_data": null}], "text": "34", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.27912139892578, 27.87841796875, 267.07440185546875, 37.2301025390625], "page": 36, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.80000305175781, 695.9519653320312, 151.5048065185547, 719.029296875], "page": 37, "span": [0, 7], "__ref_s3_data": null}], "text": "Notices", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [64.05133819580078, 629.731201171875, 547.2454833984375, 659.9757080078125], "page": 37, "span": [0, 254], "__ref_s3_data": null}], "text": "This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.02767944335938, 559.5601196289062, 547.1796875, 619.982666015625], "page": 37, "span": [0, 625], "__ref_s3_data": null}], "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.14295196533203, 520.18017578125, 547.3560180664062, 550.154052734375], "page": 37, "span": [0, 232], "__ref_s3_data": null}], "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.09358215332031, 509.72900390625, 535.3104248046875, 520.0274658203125], "page": 37, "span": [0, 99], "__ref_s3_data": null}], "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.77083969116211, 449.74090576171875, 545.7673950195312, 500.6291198730469], "page": 37, "span": [0, 411], "__ref_s3_data": null}], "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.76580810546875, 400.1820983886719, 547.2484130859375, 439.9736022949219], "page": 37, "span": [0, 345], "__ref_s3_data": null}], "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.99868392944336, 360.0369567871094, 541.5413208007812, 390.02362060546875], "page": 37, "span": [0, 286], "__ref_s3_data": null}], "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.16744995117188, 329.5712890625, 519.2667846679688, 349.7569580078125], "page": 37, "span": [0, 136], "__ref_s3_data": null}], "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.904296875, 299.6888427734375, 505.2710266113281, 319.8106994628906], "page": 37, "span": [0, 191], "__ref_s3_data": null}], "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.10684204101562, 249.8016357421875, 547.2424926757812, 289.8807373046875], "page": 37, "span": [0, 408], "__ref_s3_data": null}], "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.23661041259766, 219.7401123046875, 544.685791015625, 239.82928466796875], "page": 37, "span": [0, 146], "__ref_s3_data": null}], "text": "Statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.82798385620117, 170.14593505859375, 547.016357421875, 209.76708984375], "page": 37, "span": [0, 335], "__ref_s3_data": null}], "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.29706573486328, 150.16616821289062, 172.50048828125, 160.24713134765625], "page": 37, "span": [0, 18], "__ref_s3_data": null}], "text": "COPYRIGHT LICENSE:", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [63.95261001586914, 59.9888916015625, 547.3580932617188, 140.04864501953125], "page": 37, "span": [0, 779], "__ref_s3_data": null}], "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided \"AS IS\", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.60262680053711, 27.9490966796875, 180.32760620117188, 37.3072509765625], "page": 37, "span": [0, 27], "__ref_s3_data": null}], "text": "' Copyright IBM Corp. 2023.", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [535.6251220703125, 27.93828010559082, 547.2591552734375, 37.6282958984375], "page": 37, "span": [0, 2], "__ref_s3_data": null}], "text": "35", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [64.03144836425781, 706.0162963867188, 155.489501953125, 721.8876953125], "page": 38, "span": [0, 10], "__ref_s3_data": null}], "text": "Trademarks", "type": "subtitle-level-1", "name": "Section-header", "font": null}, {"prov": [{"bbox": [64.0931396484375, 649.2987060546875, 547.2343139648438, 689.2715454101562], "page": 38, "span": [0, 383], "__ref_s3_data": null}], "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \"Copyright and trademark information\" at http://www.ibm.com/legal/copytrade.shtml", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.78811264038086, 619.1767578125, 547.241455078125, 639.4071044921875], "page": 38, "span": [0, 181], "__ref_s3_data": null}], "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.5999984741211, 601.1370239257812, 99.15697479248047, 610.3914184570312], "page": 38, "span": [0, 11], "__ref_s3_data": null}], "text": "Db2fi IBMfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.5999984741211, 579.1167602539062, 144.71075439453125, 588.5880737304688], "page": 38, "span": [0, 16], "__ref_s3_data": null}], "text": "IBM Blockchainfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.5999984741211, 568.1367797851562, 124.25857543945312, 577.4935302734375], "page": 38, "span": [0, 20], "__ref_s3_data": null}], "text": "IBM Cloudfi IBM Clou", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.47257232666016, 557.1567993164062, 142.73785400390625, 567.2310791015625], "page": 38, "span": [0, 7], "__ref_s3_data": null}], "text": "d Pakfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [75.5999984741211, 546.1165161132812, 128.0511016845703, 556.1326904296875], "page": 38, "span": [0, 10], "__ref_s3_data": null}], "text": "IBM Telum\u2122", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [235.9648895263672, 601.13623046875, 292.5691833496094, 610.4598388671875], "page": 38, "span": [0, 12], "__ref_s3_data": null}], "text": "IBM Watsonfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [235.9771270751953, 590.15625, 278.3294982910156, 600.0650634765625], "page": 38, "span": [0, 8], "__ref_s3_data": null}], "text": "IBM z16\u2122", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [235.92138671875, 579.115966796875, 272.8687744140625, 588.3995361328125], "page": 38, "span": [0, 9], "__ref_s3_data": null}], "text": "Instanafi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [235.9377899169922, 567.6576538085938, 294.80047607421875, 577.7839965820312], "page": 38, "span": [0, 14], "__ref_s3_data": null}], "text": "Open Libertyfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [235.86184692382812, 557.100341796875, 290.5615539550781, 566.484619140625], "page": 38, "span": [0, 11], "__ref_s3_data": null}], "text": "OpenPagesfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [236.06265258789062, 546.11572265625, 283.79803466796875, 555.6954345703125], "page": 38, "span": [0, 10], "__ref_s3_data": null}], "text": "Redbooksfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.08106994628906, 523.8305053710938, 312.0052490234375, 533.9868774414062], "page": 38, "span": [0, 54], "__ref_s3_data": null}], "text": "The following terms are trademarks of other companies:", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.17213439941406, 493.8155212402344, 528.6849365234375, 514.7268676757812], "page": 38, "span": [0, 184], "__ref_s3_data": null}], "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [63.988487243652344, 464.2257080078125, 541.6887817382812, 484.4936828613281], "page": 38, "span": [0, 174], "__ref_s3_data": null}], "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.36927795410156, 434.2598876953125, 531.9806518554688, 454.6313781738281], "page": 38, "span": [0, 140], "__ref_s3_data": null}], "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.39899444580078, 414.2801208496094, 472.0943908691406, 424.5513916015625], "page": 38, "span": [0, 90], "__ref_s3_data": null}], "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.1666259765625, 394.30035400390625, 465.3721618652344, 404.60601806640625], "page": 38, "span": [0, 86], "__ref_s3_data": null}], "text": "Other company, product, or service names may be trademarks or service marks of others.", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [64.26212310791016, 26.91827964782715, 78.4020004272461, 36.5125732421875], "page": 38, "span": [0, 2], "__ref_s3_data": null}], "text": "36", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [93.35021209716797, 26.59393310546875, 267.07440185546875, 36.15057373046875], "page": 38, "span": [0, 38], "__ref_s3_data": null}], "text": "IBM Cloud Pak for Data on IBM zSystems", "type": "page-footer", "name": "Page-footer", "font": null}, {"prov": [{"bbox": [396.7199401855469, 600.8096313476562, 464.44384765625, 610.1947631835938], "page": 38, "span": [0, 26], "__ref_s3_data": null}], "text": "Redbooks (log o) fi Turbon", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [396.71099853515625, 590.1554565429688, 452.03265380859375, 599.5802001953125], "page": 38, "span": [0, 6], "__ref_s3_data": null}], "text": "omicfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [396.258544921875, 579.1151733398438, 451.70428466796875, 588.4796142578125], "page": 38, "span": [0, 11], "__ref_s3_data": null}], "text": "WebSpherefi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [396.62286376953125, 568.1351928710938, 424.4446716308594, 577.8291015625], "page": 38, "span": [0, 6], "__ref_s3_data": null}], "text": "z/OSfi", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [396.6561584472656, 557.1552124023438, 420.6365966796875, 566.7672119140625], "page": 38, "span": [0, 4], "__ref_s3_data": null}], "text": "z16\u2122", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/28"}, {"prov": [{"bbox": [287.2200012207031, 741.251953125, 415.20721435546875, 763.4519653320312], "page": 40, "span": [0, 10], "__ref_s3_data": null}], "text": "Back cover", "type": "paragraph", "name": "Text", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/29"}, {"prov": [{"bbox": [495.9403076171875, 670.4779663085938, 564.1664428710938, 680.78173828125], "page": 40, "span": [0, 12], "__ref_s3_data": null}], "text": "REDP-5695-00", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [482.8758239746094, 649.478271484375, 564.6472778320312, 659.2940063476562], "page": 40, "span": [0, 15], "__ref_s3_data": null}], "text": "ISBN 0738461067", "type": "paragraph", "name": "Text", "font": null}, {"prov": [{"bbox": [497.23223876953125, 89.81710052490234, 564.1887817382812, 99.3863525390625], "page": 40, "span": [0, 17], "__ref_s3_data": null}], "text": "Printed in U.S.A.", "type": "page-footer", "name": "Page-footer", "font": null}, {"name": "Picture", "type": "figure", "$ref": "#/figures/30"}], "figures": [{"prov": [{"bbox": [408.87640380859375, 713.802490234375, 569.0722045898438, 757.6637573242188], "page": 1, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [46.60354995727539, 26.44677734375, 127.91421508789062, 59.40655517578125], "page": 1, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [467.1597595214844, 23.5855712890625, 571.5428466796875, 51.5799560546875], "page": 1, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [32.92374801635742, 555.397705078125, 239.95321655273438, 721.5759887695312], "page": 3, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.13192749023438, 345.68524169921875, 435.85162353515625, 714.4678955078125], "page": 5, "span": [0, 16], "__ref_s3_data": null}], "text": "Figure 1 IBM z16", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.98974609375, 416.2847595214844, 547.5855102539062, 685.0554809570312], "page": 6, "span": [0, 33], "__ref_s3_data": null}], "text": "Figure 2 IBM Z: Processor roadmap", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [65.5059585571289, 441.6483154296875, 547.4702758789062, 712.4261474609375], "page": 7, "span": [0, 52], "__ref_s3_data": null}], "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [65.81348419189453, 430.7156677246094, 547.791259765625, 683.7611694335938], "page": 8, "span": [0, 78], "__ref_s3_data": null}], "text": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.88162612915039, 492.099609375, 547.2862548828125, 714.5304565429688], "page": 9, "span": [0, 29], "__ref_s3_data": null}], "text": "Figure 5 Seamless integration", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.72787094116211, 311.20458984375, 547.3121948242188, 612.8547973632812], "page": 10, "span": [0, 48], "__ref_s3_data": null}], "text": "Figure 6 Solution overview of Cloud Pak for Data", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.857383728027344, 441.6200256347656, 547.4847412109375, 714.5877685546875], "page": 13, "span": [0, 104], "__ref_s3_data": null}], "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.77848434448242, 462.53985595703125, 546.8060302734375, 660.74267578125], "page": 16, "span": [0, 35], "__ref_s3_data": null}], "text": "Figure 8 Typical AI model lifecycle", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.32939147949219, 501.2001647949219, 547.455810546875, 714.298583984375], "page": 18, "span": [0, 54], "__ref_s3_data": null}], "text": "Figure 9 Remote AI governance solution end-to-end flow", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.88758850097656, 125.8853759765625, 547.6134033203125, 423.3321228027344], "page": 18, "span": [0, 49], "__ref_s3_data": null}], "text": "Figure 10 Creating a model entry in IBM OpenPages", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.96794891357422, 379.33050537109375, 547.4464111328125, 672.72021484375], "page": 19, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 11 Training an AI model by using Watson Studio", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.33274841308594, 68.50238037109375, 547.9761962890625, 318.6211242675781], "page": 19, "span": [0, 66], "__ref_s3_data": null}], "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [136.07406616210938, 407.510986328125, 533.5489501953125, 661.1522216796875], "page": 20, "span": [0, 24], "__ref_s3_data": null}], "text": "Figure 13 External model", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.0412368774414, 84.3487548828125, 547.8551635742188, 346.5400390625], "page": 20, "span": [0, 28], "__ref_s3_data": null}], "text": "Figure 14 Tracking the model", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.23773956298828, 380.84503173828125, 547.417236328125, 684.8828125], "page": 21, "span": [0, 91], "__ref_s3_data": null}], "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.799659729003906, 410.76275634765625, 547.7122192382812, 684.6780395507812], "page": 22, "span": [0, 55], "__ref_s3_data": null}], "text": "Figure 16 Creating an external model on an x86 platform", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.62750244140625, 441.46466064453125, 547.6529541015625, 714.3441772460938], "page": 23, "span": [0, 76], "__ref_s3_data": null}], "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.15648651123047, 70.03009033203125, 547.9522705078125, 344.8665466308594], "page": 23, "span": [0, 103], "__ref_s3_data": null}], "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.85054016113281, 451.7115173339844, 545.2755126953125, 714.330810546875], "page": 25, "span": [0, 82], "__ref_s3_data": null}], "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [65.03783416748047, 432.6387634277344, 547.6334838867188, 697.0615234375], "page": 26, "span": [0, 70], "__ref_s3_data": null}], "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.01190948486328, 480.45562744140625, 542.310546875, 684.6367797851562], "page": 28, "span": [0, 97], "__ref_s3_data": null}], "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.826560974121094, 173.48193359375, 539.9069213867188, 410.2887268066406], "page": 29, "span": [0, 43], "__ref_s3_data": null}], "text": "Figure 22 Inferencing architecture on IBM Z", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [63.6925048828125, 352.7718200683594, 547.7992553710938, 714.6727294921875], "page": 31, "span": [0, 37], "__ref_s3_data": null}], "text": "Figure 23 In-depth architectural view", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [64.15681457519531, 381.83746337890625, 542.2742309570312, 623.4725341796875], "page": 33, "span": [0, 53], "__ref_s3_data": null}], "text": "Figure 24 Architecture for AI-powered video analytics", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [42.63053512573242, 15.95574951171875, 68.95333862304688, 42.7210693359375], "page": 40, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [475.4501647949219, 712.610595703125, 565.7938232421875, 747.644287109375], "page": 40, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}, {"prov": [{"bbox": [433.6951904296875, 19.161434173583984, 572.0396728515625, 55.36602783203125], "page": 40, "span": [0, 0], "__ref_s3_data": null}], "text": "", "type": "figure", "bounding-box": null}], "tables": [], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 792.0, "page": 1, "width": 612.0}, {"height": 792.0, "page": 2, "width": 612.0}, {"height": 792.0, "page": 3, "width": 612.0}, {"height": 792.0, "page": 4, "width": 612.0}, {"height": 792.0, "page": 5, "width": 612.0}, {"height": 792.0, "page": 6, "width": 612.0}, {"height": 792.0, "page": 7, "width": 612.0}, {"height": 792.0, "page": 8, "width": 612.0}, {"height": 792.0, "page": 9, "width": 612.0}, {"height": 792.0, "page": 10, "width": 612.0}, {"height": 792.0, "page": 11, "width": 612.0}, {"height": 792.0, "page": 12, "width": 612.0}, {"height": 792.0, "page": 13, "width": 612.0}, {"height": 792.0, "page": 14, "width": 612.0}, {"height": 792.0, "page": 15, "width": 612.0}, {"height": 792.0, "page": 16, "width": 612.0}, {"height": 792.0, "page": 17, "width": 612.0}, {"height": 792.0, "page": 18, "width": 612.0}, {"height": 792.0, "page": 19, "width": 612.0}, {"height": 792.0, "page": 20, "width": 612.0}, {"height": 792.0, "page": 21, "width": 612.0}, {"height": 792.0, "page": 22, "width": 612.0}, {"height": 792.0, "page": 23, "width": 612.0}, {"height": 792.0, "page": 24, "width": 612.0}, {"height": 792.0, "page": 25, "width": 612.0}, {"height": 792.0, "page": 26, "width": 612.0}, {"height": 792.0, "page": 27, "width": 612.0}, {"height": 792.0, "page": 28, "width": 612.0}, {"height": 792.0, "page": 29, "width": 612.0}, {"height": 792.0, "page": 30, "width": 612.0}, {"height": 792.0, "page": 31, "width": 612.0}, {"height": 792.0, "page": 32, "width": 612.0}, {"height": 792.0, "page": 33, "width": 612.0}, {"height": 792.0, "page": 34, "width": 612.0}, {"height": 792.0, "page": 35, "width": 612.0}, {"height": 792.0, "page": 36, "width": 612.0}, {"height": 792.0, "page": 37, "width": 612.0}, {"height": 792.0, "page": 38, "width": 612.0}, {"height": 792.0, "page": 39, "width": 612.0}, {"height": 792.0, "page": 40, "width": 612.0}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5695.md b/tests/data/groundtruth/docling_v1/redp5695.md deleted file mode 100644 index d08cae10..00000000 --- a/tests/data/groundtruth/docling_v1/redp5695.md +++ /dev/null @@ -1,726 +0,0 @@ -Front cover - - - - -## IBM Cloud Pak for Data on IBM Z - -Jasmeet Bhatia - -Ravi Gummadi - -Chandra Shekhar Reddy Potula - -Srirama Sharma - -Data and AI - - - - - - - - - - -## Executive overview - -Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology. - -With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences. - -This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput. - -This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. - -## IBM Z: An overview - -Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world's top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency. - -The most recent platform for IBM Z is IBM z16™. The IBM z16 supports the following features: - -- GLYPH On-chip AI acceleration - -- GLYPH Quantum-safe crypto discovery - -- GLYPH Simplified compliance - -- GLYPH Flexible capacity - -- GLYPH Modernization of applications - -- GLYPH Sustainability - -With these features, enterprises can upgrade applications while preserving secure and resilient data. - -To learn more about these features, see the IBM z16 product page. - -Figure 1 on page 3 shows a picture of the IBM z16 mainframe. - -Figure 1 IBM z16 - - -## IBM z16 and IBM LinuxONE Emperor 4 features - -IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI. - -Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement. - -Figure 2 IBM Z: Processor roadmap - - -The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a 'built to build' focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization. - -Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum™ processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory. - -Figure 3 System design of IBM z16 LinuxONE Emperor 4 - - -The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has "first in the industry" on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection. - -Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression. - -Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores. - -Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores - - -The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases. - -Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities. - -Figure 5 Seamless integration - - -## What is Cloud Pak for Data on IBM Z - -IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680. - -CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses. - -Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion. - -Figure 6 Solution overview of Cloud Pak for Data - - -We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: - -- GLYPH Performance and Scale - -- GLYPH Embedded Accelerators - -- GLYPH Reliability and Availability - -- GLYPH Security and Governance. - -From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security. - -## Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE - -With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks: - -- GLYPH Provision various containerized databases. - -- GLYPH Explore, clean, shape, and alter data by using Data Refinery. - -- GLYPH Use project-specific data that is uploaded, or connect to distant data. - -- GLYPH Create Spark run times and applications. - -- GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency. - -- GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9. - -For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE. - -## Open-source ecosystem - -These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building. - -IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business. - -On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing. - -IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE. - -IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community's continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud. - -CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms. - -Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE. - -In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16™) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server. - -So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers. - -## Why AI on IBM Z - -Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI. - -Traditional ML models' power most of today's ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z). - -Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model. - -Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE - - -In summary, here are some of the reasons why you should choose AI on IBM Z: - -- GLYPH World-class AI inference platform for enterprise workloads: - -- -Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores. - -- -Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform. - -- -Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z. - -- GLYPH Security: Encrypted memory, and improved trusted execution environments. - -- GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system. - -## AI use cases - -With billions of transactions per day in many of today's industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale. - -Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. - -For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount. - -For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important. - -For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z. - -In the following sections, we describe the following use cases: - -- GLYPH "Use case 1: Responsible AI augmented with risk and regulatory compliance" on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks. - -- GLYPH "Use case 2: Credit default risk assessment" on page 22 - -- Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. - -- GLYPH "Use case 3: Clearing and settlement" on page 25 - -- The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. - -- GLYPH "Use case 4: Remaining Useful Life of an aircraft engine" on page 27 - -- We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure. - -- GLYPH "Use case 5: AI-powered video analytics on an infant's motions for health prediction" on page 30 - -- In this section, we describe how AI can predict an infant's health conditions by monitoring real-time body movements. - -## Use case 1: Responsible AI augmented with risk and regulatory compliance - -Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task. - -How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring. - -## Industry challenges - -Here are the three main reasons why organizations struggle with the adoption of AI: - -- GLYPH Scaling with growing regulations - -- GLYPH Lack of confidence in operationalized AI (making responsible AI) - -- GLYPH Challenges around managing the risk throughout the entire AI workflow - -## Scaling with growing regulations - -Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination. - -## Responsible AI - -Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable. - -## Risks throughout the entire AI workflow - -Organizations need to mitigate risk of the following items: - -- GLYPH Deciding not to use certain technologies or practices - -- GLYPH Using personal information when needed and with a user's consent - -- GLYPH Ensuring automated decisions are free from bias - -- GLYPH Customer confidence by providing explanations for business decisions - -- GLYPH Fraud to the organization and to customer's accounts - -- GLYPH Delays in putting models into production - -In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important. - -The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the "why" of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively. - -For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise. - -Figure 8 Typical AI model lifecycle - - -Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows. - -## IBM governance solution for IBM Z - -AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises. - -AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization's use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model's behavior throughout the lifecycle, the data that was influential in its development, and the possible risks. - -In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance. - -## Lifecycle governance - -Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements: - -- GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. - -- GLYPH Automate the capture of model metadata for report generation. - -- GLYPH Drive transparent and explainable AI at scale. - -- GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging. - -## Risk management - -Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale: - -- GLYPH Automate facts and workflow management to comply with business standards. - -- GLYPH Use dynamic dashboards for clear and concise customizable results. - -- GLYPH Enhanced collaboration across multiple regions and geographies. - -## Regulatory compliance - -Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks: - -- GLYPH Help adhere to external AI regulations for audit and compliance. - -- GLYPH Convert external AI regulations into policies for automatic enforcement. - -- GLYPH Use dynamic dashboards for compliance status across policies and regulations. - -Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways: - -- GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. - -- GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86. - -Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. - -Figure 9 Remote AI governance solution end-to-end flow - - -To achieve end-to-end AI governance, complete the following steps: - -- 1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10. - -Figure 10 Creating a model entry in IBM OpenPages - - -- 2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11. - -Figure 11 Training an AI model by using Watson Studio - - -- 3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12. - -Figure 12 Deploying an AI model by using WML on Cloud Pak for Data - - -- 4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform. - -Figure 13 External model - - -You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages. - -Figure 14 Tracking the model - - -You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15. - -Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform - - -- 5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16. - -Figure 16 Creating an external model on an x86 platform - - -IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21. - -Figure 17 IBM OpenScale dashboard that is used to monitor the external model - - -You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale. - -Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale - - -## Use case 2: Credit default risk assessment - -In today's world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations. - -## Industry challenges - -Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone's likelihood of default, but that is not an efficient method for judgment as a business grows. - -## Predictions of credit default risk assessment - -In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan. - -Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk. - -Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model. - -Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z - - -A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import. - -Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors. - -The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications. - -Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction. - -We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. - -Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. - -Figure 20 Architecture for credit risk prediction by using DL on IBM Z - - -Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model's endpoint. - -In summary, here are some considerations for developing real-time AI models, such as credit risk assessment: - -- GLYPH A preference for in-platform run times of the model, such as faster execution results. - -- GLYPH Less overhead in the end-to-end flows might improve scoring time. - -- GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform. - -- GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment. - -- GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means. - -## Use case 3: Clearing and settlement - -Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day. - -## Industry challenge - -Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs. - -## Clearing and settlement solution - -Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts. - -In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions. - -The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds. - -One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint. - -Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE. - -Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data - - -Here are the steps of the high-level process flow: - -- 1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building. - -- 2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D. - -- 3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository. - -- 4. Deploy the saved model into a deployment space for batch deployment. - -- 5. Create a batch deployment by using any of these interfaces: - -- a. Watson Studio user interface from an Analytics deployment space. - -- b. WML Python client. - -- c. WML REST APIs. - -- 6. A hardware configuration can be chosen for the deployment. - -- 7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination. - -- 8. One way to run batch deployment to predict or score is to create and run a batch deployment job. - -- 9. Provide an input data type: - -- a. Inline data for entering a JSON format payload. - -- b. Select Data asset , click Select data source , and then specify your asset. - -- 10.The output data type can be a new output file or a connected data asset. - -- 11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run. - -- 12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL. - -## Summary - -With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages: - -- GLYPH No Impact to SLAs and the batch process window. - -- GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs. - -- GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring. - -## Use case 4: Remaining Useful Life of an aircraft engine - -In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems. - -Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime. - -Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z. - -Figure 22 Inferencing architecture on IBM Z - - -Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model's life. - -Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist's journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see "Use case 3: Clearing and settlement" on page 25. - -Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices. - -We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works. - -This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator. - -For decision-making about an aircraft engine's life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction. - -The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point. - -Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating. - -Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application. - -Figure 23 In-depth architectural view - - -In summary, consider the following points while developing an AI-based predictive maintenance application: - -- GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages. - -- GLYPH The trustworthiness of the predicted output is important for critical use cases. - -- GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications. - -- GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available. - -- GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle. - -## Use case 5: AI-powered video analytics on an infant's motions for health prediction - -Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world. - -Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis. - -Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health. - -In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby's life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders. - -## Industry challenges - -There are video surveillance systems that are installed for monitoring an infant's movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected. - -There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something "smart" that monitors constantly the surveillance system and detect problems effectively. - -AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified. - -Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry. - -## Infant motion analytics in real time - -AI is the current "market trend evolution" in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems. - -CP4D was used to build and deploy the AI-powered video analytics on infant's motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time. - -Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data. - -Figure 24 Architecture for AI-powered video analytics - - -Live camera feeds or recorded videos of an infant's movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant's body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture. - -When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant's health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means. - -We can leverage the following AI technology stack for this use case: - -- GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images. - -- GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow. - -- GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation. - -- GLYPH OpenCV: A real-time computer vision library that helps perform image processing. - -WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions. - -## Additional resources - -- GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z. - -- GLYPH IBM Cloud Pak for Data Tutorials. - -- GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE: - -- -Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case. - -- -Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case. - -- -Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case. - -A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE. - -## Summary - -This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. - -## Authors - -This publication was produced by a team of specialists from around the world working with the IBM Redbooks team: - -Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management. - -Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master's degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems. - -Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems. - -Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization. - -Thanks to the following people for their contributions to this project: - -Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center - -Shin Kelly Yang, AI on IBM Z Product Management IBM US - -Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM - -## Now you can become a published author, too! - -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. - -Find out more about the residency program, browse the residency index, and apply online at: - -ibm.com /redbooks/residencies.html - -## Stay connected to IBM Redbooks - -- GLYPH Find us on LinkedIn: - -http://www.linkedin.com/groups?home=&gid=2130806 - -- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: - -- https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm - -- GLYPH Stay current on recent Redbooks publications with RSS Feeds: - -http://www.redbooks.ibm.com/rss.html - -## Notices - -This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it. - -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. - -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: - -IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US - -INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. - -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. - -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. - -IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you. - -The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions. - -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. - -Statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only. - -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental. - -## COPYRIGHT LICENSE: - -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided "AS IS", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs. - -## Trademarks - -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at http://www.ibm.com/legal/copytrade.shtml - -The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries. - -Db2fi IBMfi - -IBM Blockchainfi - -IBM Cloudfi IBM Clou - -d Pakfi - -IBM Telum™ - -IBM Watsonfi - -IBM z16™ - -Instanafi - -Open Libertyfi - -OpenPagesfi - -Redbooksfi - -The following terms are trademarks of other companies: - -Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. - -The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis. - -Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries. - -UNIX is a registered trademark of The Open Group in the United States and other countries. - -Other company, product, or service names may be trademarks or service marks of others. - -Redbooks (log o) fi Turbon - -omicfi - -WebSpherefi - -z/OSfi - -z16™ - - - - -Back cover - - - - -REDP-5695-00 - -ISBN 0738461067 - - - \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v1/redp5695.pages.json b/tests/data/groundtruth/docling_v1/redp5695.pages.json deleted file mode 100644 index 9c82cd2d..00000000 --- a/tests/data/groundtruth/docling_v1/redp5695.pages.json +++ /dev/null @@ -1 +0,0 @@ -[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 467.1597595214844, "t": 740.4200439453125, "r": 571.54285, "b": 768.4144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.779976487159729, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 41.4967, "t": 628.998046875, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}, "confidence": 0.7684483528137207, "cells": [{"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 44.82, "t": 108.52611541748047, "r": 535.76471, "b": 196.12842, "coord_origin": "TOPLEFT"}, "confidence": 0.722160816192627, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 43.98441696166992, "t": 300.904052734375, "r": 124.95372772216797, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8301644325256348, "cells": [{"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 44.41876983642578, "t": 326.1069030761719, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8449194431304932, "cells": [{"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 44.286624908447266, "t": 351.3352355957031, "r": 204.99734, "b": 365.7846984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.7996292114257812, "cells": [{"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 44.1224250793457, "t": 376.6038818359375, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}, "confidence": 0.8224513530731201, "cells": [{"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 408.87640380859375, "t": 34.33623504638672, "r": 569.0722045898438, "b": 78.19747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9278379678726196, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 46.60354995727539, "t": 732.5934448242188, "r": 127.91421508789062, "b": 765.55322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.8796597719192505, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 467.1597595214844, "t": 740.4200439453125, "r": 571.54285, "b": 768.4144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.779976487159729, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 41.4967, "t": 628.998046875, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}, "confidence": 0.7684483528137207, "cells": [{"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 44.82, "t": 108.52611541748047, "r": 535.76471, "b": 196.12842, "coord_origin": "TOPLEFT"}, "confidence": 0.722160816192627, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 43.98441696166992, "t": 300.904052734375, "r": 124.95372772216797, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8301644325256348, "cells": [{"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 44.41876983642578, "t": 326.1069030761719, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8449194431304932, "cells": [{"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 44.286624908447266, "t": 351.3352355957031, "r": 204.99734, "b": 365.7846984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.7996292114257812, "cells": [{"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 44.1224250793457, "t": 376.6038818359375, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}, "confidence": 0.8224513530731201, "cells": [{"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 408.87640380859375, "t": 34.33623504638672, "r": 569.0722045898438, "b": 78.19747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9278379678726196, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 0, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 46.60354995727539, "t": 732.5934448242188, "r": 127.91421508789062, "b": 765.55322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.8796597719192505, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "picture", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 467.1597595214844, "t": 740.4200439453125, "r": 571.54285, "b": 768.4144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.779976487159729, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 41.4967, "t": 628.998046875, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}, "confidence": 0.7684483528137207, "cells": [{"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 44.82, "t": 108.52611541748047, "r": 535.76471, "b": 196.12842, "coord_origin": "TOPLEFT"}, "confidence": 0.722160816192627, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 43.98441696166992, "t": 300.904052734375, "r": 124.95372772216797, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8301644325256348, "cells": [{"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 44.41876983642578, "t": 326.1069030761719, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8449194431304932, "cells": [{"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 44.286624908447266, "t": 351.3352355957031, "r": 204.99734, "b": 365.7846984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.7996292114257812, "cells": [{"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 44.1224250793457, "t": 376.6038818359375, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}, "confidence": 0.8224513530731201, "cells": [{"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 408.87640380859375, "t": 34.33623504638672, "r": 569.0722045898438, "b": 78.19747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9278379678726196, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 0, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 46.60354995727539, "t": 732.5934448242188, "r": 127.91421508789062, "b": 765.55322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.8796597719192505, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.59157943725586, "t": 754.58740234375, "r": 180.34423828125, "b": 764.0753173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9356479644775391, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2573852539062, "t": 754.3030395507812, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8480042219161987, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 256.93267822265625, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.939366340637207, "cells": [{"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.93707275390625, "t": 315.9909362792969, "r": 547.28046, "b": 398.67059326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9878793358802795, "cells": [{"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.84193420410156, "t": 410.041015625, "r": 547.34985, "b": 468.02005, "coord_origin": "TOPLEFT"}, "confidence": 0.9871250987052917, "cells": [{"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.86183166503906, "t": 479.9052734375, "r": 547.28827, "b": 538.6532592773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879317879676819, "cells": [{"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.76502990722656, "t": 549.9137573242188, "r": 547.276, "b": 620.0858764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879330992698669, "cells": [{"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "footnote", "bbox": {"l": 136.8, "t": 725.2650146484375, "r": 387.78561, "b": 734.9249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.8821995854377747, "cells": [{"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 32.92374801635742, "t": 70.42400360107422, "r": 239.95321655273438, "b": 236.60231018066406, "coord_origin": "TOPLEFT"}, "confidence": 0.8423530459403992, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.59157943725586, "t": 754.58740234375, "r": 180.34423828125, "b": 764.0753173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9356479644775391, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2573852539062, "t": 754.3030395507812, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8480042219161987, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "section_header", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 256.93267822265625, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.939366340637207, "cells": [{"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Executive overview"}, {"label": "text", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93707275390625, "t": 315.9909362792969, "r": 547.28046, "b": 398.67059326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9878793358802795, "cells": [{"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology."}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.84193420410156, "t": 410.041015625, "r": 547.34985, "b": 468.02005, "coord_origin": "TOPLEFT"}, "confidence": 0.9871250987052917, "cells": [{"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}]}, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences."}, {"label": "text", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86183166503906, "t": 479.9052734375, "r": 547.28827, "b": 538.6532592773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879317879676819, "cells": [{"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput."}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.76502990722656, "t": 549.9137573242188, "r": 547.276, "b": 620.0858764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879330992698669, "cells": [{"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}]}, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "footnote", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "footnote", "bbox": {"l": 136.8, "t": 725.2650146484375, "r": 387.78561, "b": 734.9249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.8821995854377747, "cells": [{"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html"}, {"label": "picture", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 32.92374801635742, "t": 70.42400360107422, "r": 239.95321655273438, "b": 236.60231018066406, "coord_origin": "TOPLEFT"}, "confidence": 0.8423530459403992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 256.93267822265625, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.939366340637207, "cells": [{"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Executive overview"}, {"label": "text", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93707275390625, "t": 315.9909362792969, "r": 547.28046, "b": 398.67059326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9878793358802795, "cells": [{"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology."}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.84193420410156, "t": 410.041015625, "r": 547.34985, "b": 468.02005, "coord_origin": "TOPLEFT"}, "confidence": 0.9871250987052917, "cells": [{"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}]}, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences."}, {"label": "text", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86183166503906, "t": 479.9052734375, "r": 547.28827, "b": 538.6532592773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879317879676819, "cells": [{"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput."}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.76502990722656, "t": 549.9137573242188, "r": 547.276, "b": 620.0858764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879330992698669, "cells": [{"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}]}, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "footnote", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "footnote", "bbox": {"l": 136.8, "t": 725.2650146484375, "r": 387.78561, "b": 734.9249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.8821995854377747, "cells": [{"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html"}, {"label": "picture", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 32.92374801635742, "t": 70.42400360107422, "r": 239.95321655273438, "b": 236.60231018066406, "coord_origin": "TOPLEFT"}, "confidence": 0.8423530459403992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.59157943725586, "t": 754.58740234375, "r": 180.34423828125, "b": 764.0753173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9356479644775391, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2573852539062, "t": 754.3030395507812, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8480042219161987, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.95490646362305, "t": 754.27392578125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8809324502944946, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.65045166015625, "t": 754.6927490234375, "r": 261.53851, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9455875754356384, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.69976043701172, "t": 70.11424255371094, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.96026211977005, "cells": [{"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.16062927246094, "t": 102.75202941894531, "r": 539.55145, "b": 161.23336791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9878602623939514, "cells": [{"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.83799743652344, "t": 172.61083984375, "r": 515.68988, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9694333076477051, "cells": [{"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.797607421875, "t": 201.2985076904297, "r": 255.07155, "b": 211.79501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9466004967689514, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7379150390625, "t": 218.8182373046875, "r": 289.6485290527344, "b": 229.28843688964844, "coord_origin": "TOPLEFT"}, "confidence": 0.951557457447052, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.6077423095703, "t": 235.31582641601562, "r": 247.8863983154297, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9488750696182251, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.57025146484375, "t": 252.62242126464844, "r": 225.32553100585938, "b": 263.3917236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9447478652000427, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6380615234375, "t": 269.9613342285156, "r": 280.60699, "b": 280.2677307128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9515380263328552, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.63339233398438, "t": 286.7400207519531, "r": 210.07028, "b": 297.0730895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9383591413497925, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.1382598876953, "t": 308.8077392578125, "r": 521.94366, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.972258448600769, "cells": [{"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.73519897460938, "t": 342.67401123046875, "r": 434.58963000000006, "b": 353.0493469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9527294039726257, "cells": [{"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.62892150878906, "t": 364.7782287597656, "r": 415.6936, "b": 374.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9560132622718811, "cells": [{"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "footnote", "bbox": {"l": 136.5249786376953, "t": 725.1834106445312, "r": 311.82391, "b": 734.9193115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8997626900672913, "cells": [{"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95490646362305, "t": 754.27392578125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8809324502944946, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.65045166015625, "t": 754.6927490234375, "r": 261.53851, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9455875754356384, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.69976043701172, "t": 70.11424255371094, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.96026211977005, "cells": [{"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z: An overview"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.16062927246094, "t": 102.75202941894531, "r": 539.55145, "b": 161.23336791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9878602623939514, "cells": [{"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.83799743652344, "t": 172.61083984375, "r": 515.68988, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9694333076477051, "cells": [{"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following features:"}, {"label": "list_item", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.797607421875, "t": 201.2985076904297, "r": 255.07155, "b": 211.79501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9466004967689514, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH On-chip AI acceleration"}, {"label": "list_item", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7379150390625, "t": 218.8182373046875, "r": 289.6485290527344, "b": 229.28843688964844, "coord_origin": "TOPLEFT"}, "confidence": 0.951557457447052, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Quantum-safe crypto discovery"}, {"label": "list_item", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6077423095703, "t": 235.31582641601562, "r": 247.8863983154297, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9488750696182251, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Simplified compliance"}, {"label": "list_item", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.57025146484375, "t": 252.62242126464844, "r": 225.32553100585938, "b": 263.3917236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9447478652000427, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Flexible capacity"}, {"label": "list_item", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6380615234375, "t": 269.9613342285156, "r": 280.60699, "b": 280.2677307128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9515380263328552, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Modernization of applications"}, {"label": "list_item", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.63339233398438, "t": 286.7400207519531, "r": 210.07028, "b": 297.0730895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9383591413497925, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability"}, {"label": "text", "id": 11, "page_no": 3, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1382598876953, "t": 308.8077392578125, "r": 521.94366, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.972258448600769, "cells": [{"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "With these features, enterprises can upgrade applications while preserving secure and resilient data."}, {"label": "text", "id": 12, "page_no": 3, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.73519897460938, "t": 342.67401123046875, "r": 434.58963000000006, "b": 353.0493469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9527294039726257, "cells": [{"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}]}, "text": "To learn more about these features, see the IBM z16 product page."}, {"label": "text", "id": 13, "page_no": 3, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.62892150878906, "t": 364.7782287597656, "r": 415.6936, "b": 374.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9560132622718811, "cells": [{"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe."}, {"label": "footnote", "id": 14, "page_no": 3, "cluster": {"id": 14, "label": "footnote", "bbox": {"l": 136.5249786376953, "t": 725.1834106445312, "r": 311.82391, "b": 734.9193115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8997626900672913, "cells": [{"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/"}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.69976043701172, "t": 70.11424255371094, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.96026211977005, "cells": [{"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z: An overview"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.16062927246094, "t": 102.75202941894531, "r": 539.55145, "b": 161.23336791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9878602623939514, "cells": [{"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.83799743652344, "t": 172.61083984375, "r": 515.68988, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9694333076477051, "cells": [{"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following features:"}, {"label": "list_item", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.797607421875, "t": 201.2985076904297, "r": 255.07155, "b": 211.79501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9466004967689514, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH On-chip AI acceleration"}, {"label": "list_item", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7379150390625, "t": 218.8182373046875, "r": 289.6485290527344, "b": 229.28843688964844, "coord_origin": "TOPLEFT"}, "confidence": 0.951557457447052, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Quantum-safe crypto discovery"}, {"label": "list_item", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6077423095703, "t": 235.31582641601562, "r": 247.8863983154297, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9488750696182251, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Simplified compliance"}, {"label": "list_item", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.57025146484375, "t": 252.62242126464844, "r": 225.32553100585938, "b": 263.3917236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9447478652000427, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Flexible capacity"}, {"label": "list_item", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6380615234375, "t": 269.9613342285156, "r": 280.60699, "b": 280.2677307128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9515380263328552, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Modernization of applications"}, {"label": "list_item", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.63339233398438, "t": 286.7400207519531, "r": 210.07028, "b": 297.0730895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9383591413497925, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability"}, {"label": "text", "id": 11, "page_no": 3, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1382598876953, "t": 308.8077392578125, "r": 521.94366, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.972258448600769, "cells": [{"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "With these features, enterprises can upgrade applications while preserving secure and resilient data."}, {"label": "text", "id": 12, "page_no": 3, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.73519897460938, "t": 342.67401123046875, "r": 434.58963000000006, "b": 353.0493469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9527294039726257, "cells": [{"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}]}, "text": "To learn more about these features, see the IBM z16 product page."}, {"label": "text", "id": 13, "page_no": 3, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.62892150878906, "t": 364.7782287597656, "r": 415.6936, "b": 374.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9560132622718811, "cells": [{"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe."}, {"label": "footnote", "id": 14, "page_no": 3, "cluster": {"id": 14, "label": "footnote", "bbox": {"l": 136.5249786376953, "t": 725.1834106445312, "r": 311.82391, "b": 734.9193115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8997626900672913, "cells": [{"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95490646362305, "t": 754.27392578125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8809324502944946, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.65045166015625, "t": 754.6927490234375, "r": 261.53851, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9455875754356384, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 541.0438232421875, "t": 754.4629516601562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8937394618988037, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 135.89208984375, "t": 448.34100341796875, "r": 211.0067596435547, "b": 458.0682678222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9125407934188843, "cells": [{"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.32122039794922, "t": 477.1279602050781, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}, "confidence": 0.9492653012275696, "cells": [{"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.82815551757812, "t": 503.3326416015625, "r": 547.17712, "b": 561.62086, "coord_origin": "TOPLEFT"}, "confidence": 0.977308452129364, "cells": [{"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 136.13192749023438, "t": 77.53209686279297, "r": 435.85162353515625, "b": 446.31475830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9853245615959167, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.0438232421875, "t": 754.4629516601562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8937394618988037, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "caption", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 135.89208984375, "t": 448.34100341796875, "r": 211.0067596435547, "b": 458.0682678222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9125407934188843, "cells": [{"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 IBM z16"}, {"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.32122039794922, "t": 477.1279602050781, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}, "confidence": 0.9492653012275696, "cells": [{"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16 and IBM LinuxONE Emperor 4 features"}, {"label": "text", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82815551757812, "t": 503.3326416015625, "r": 547.17712, "b": 561.62086, "coord_origin": "TOPLEFT"}, "confidence": 0.977308452129364, "cells": [{"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI."}, {"label": "picture", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.13192749023438, "t": 77.53209686279297, "r": 435.85162353515625, "b": 446.31475830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9853245615959167, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 135.89208984375, "t": 448.34100341796875, "r": 211.0067596435547, "b": 458.0682678222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9125407934188843, "cells": [{"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 IBM z16"}, {"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.32122039794922, "t": 477.1279602050781, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}, "confidence": 0.9492653012275696, "cells": [{"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16 and IBM LinuxONE Emperor 4 features"}, {"label": "text", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82815551757812, "t": 503.3326416015625, "r": 547.17712, "b": 561.62086, "coord_origin": "TOPLEFT"}, "confidence": 0.977308452129364, "cells": [{"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI."}, {"label": "picture", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.13192749023438, "t": 77.53209686279297, "r": 435.85162353515625, "b": 446.31475830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9853245615959167, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.0438232421875, "t": 754.4629516601562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8937394618988037, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.14278411865234, "t": 754.1334838867188, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8598024249076843, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.67771911621094, "t": 754.752685546875, "r": 261.53851, "b": 763.8809204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9530899524688721, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.2760009765625, "t": 70.37826538085938, "r": 543.51959, "b": 92.84950256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.8470332026481628, "cells": [{"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.39653778076172, "t": 378.7839050292969, "r": 213.14488220214844, "b": 388.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9416331648826599, "cells": [{"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.178955078125, "t": 400.78466796875, "r": 547.25659, "b": 494.9367980957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9834467768669128, "cells": [{"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1420135498047, "t": 506.7176818847656, "r": 547.25757, "b": 565.1494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871375560760498, "cells": [{"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.98974609375, "t": 106.94452667236328, "r": 547.5855102539062, "b": 375.7152404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836835265159607, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.14278411865234, "t": 754.1334838867188, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8598024249076843, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.67771911621094, "t": 754.752685546875, "r": 261.53851, "b": 763.8809204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9530899524688721, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.2760009765625, "t": 70.37826538085938, "r": 543.51959, "b": 92.84950256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.8470332026481628, "cells": [{"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement."}, {"label": "caption", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.39653778076172, "t": 378.7839050292969, "r": 213.14488220214844, "b": 388.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9416331648826599, "cells": [{"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 IBM Z: Processor roadmap"}, {"label": "text", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.178955078125, "t": 400.78466796875, "r": 547.25659, "b": 494.9367980957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9834467768669128, "cells": [{"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization."}, {"label": "text", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1420135498047, "t": 506.7176818847656, "r": 547.25757, "b": 565.1494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871375560760498, "cells": [{"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory."}, {"label": "picture", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.98974609375, "t": 106.94452667236328, "r": 547.5855102539062, "b": 375.7152404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836835265159607, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.2760009765625, "t": 70.37826538085938, "r": 543.51959, "b": 92.84950256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.8470332026481628, "cells": [{"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement."}, {"label": "caption", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.39653778076172, "t": 378.7839050292969, "r": 213.14488220214844, "b": 388.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9416331648826599, "cells": [{"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 IBM Z: Processor roadmap"}, {"label": "text", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.178955078125, "t": 400.78466796875, "r": 547.25659, "b": 494.9367980957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9834467768669128, "cells": [{"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization."}, {"label": "text", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1420135498047, "t": 506.7176818847656, "r": 547.25757, "b": 565.1494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871375560760498, "cells": [{"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory."}, {"label": "picture", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.98974609375, "t": 106.94452667236328, "r": 547.5855102539062, "b": 375.7152404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836835265159607, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.14278411865234, "t": 754.1334838867188, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8598024249076843, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.67771911621094, "t": 754.752685546875, "r": 261.53851, "b": 763.8809204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9530899524688721, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 541.200439453125, "t": 754.4961547851562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8813691735267639, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.30784606933594, "t": 352.14569091796875, "r": 297.72265625, "b": 361.3935241699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9315948486328125, "cells": [{"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.62088012695312, "t": 374.16082763671875, "r": 547.29742, "b": 432.24200439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9837573170661926, "cells": [{"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.72621154785156, "t": 444.0623474121094, "r": 547.32227, "b": 514.1723022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9840249419212341, "cells": [{"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 65.5059585571289, "t": 79.5738296508789, "r": 547.4702758789062, "b": 350.3516845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6088427901268005, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.200439453125, "t": 754.4961547851562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8813691735267639, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "caption", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.30784606933594, "t": 352.14569091796875, "r": 297.72265625, "b": 361.3935241699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9315948486328125, "cells": [{"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.62088012695312, "t": 374.16082763671875, "r": 547.29742, "b": 432.24200439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9837573170661926, "cells": [{"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has \u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection."}, {"label": "text", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.72621154785156, "t": 444.0623474121094, "r": 547.32227, "b": 514.1723022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9840249419212341, "cells": [{"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}]}, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression."}, {"label": "picture", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 65.5059585571289, "t": 79.5738296508789, "r": 547.4702758789062, "b": 350.3516845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6088427901268005, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.30784606933594, "t": 352.14569091796875, "r": 297.72265625, "b": 361.3935241699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9315948486328125, "cells": [{"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.62088012695312, "t": 374.16082763671875, "r": 547.29742, "b": 432.24200439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9837573170661926, "cells": [{"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has \u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection."}, {"label": "text", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.72621154785156, "t": 444.0623474121094, "r": 547.32227, "b": 514.1723022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9840249419212341, "cells": [{"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}]}, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression."}, {"label": "picture", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 65.5059585571289, "t": 79.5738296508789, "r": 547.4702758789062, "b": 350.3516845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6088427901268005, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.200439453125, "t": 754.4961547851562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8813691735267639, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.22818756103516, "t": 754.2823486328125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8751445412635803, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.59947204589844, "t": 754.7195434570312, "r": 261.53851, "b": 763.9192504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9498522877693176, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.43333435058594, "t": 70.56073760986328, "r": 541.31055, "b": 93.01757049560547, "coord_origin": "TOPLEFT"}, "confidence": 0.90760338306427, "cells": [{"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.16301727294922, "t": 364.0627746582031, "r": 387.35461, "b": 373.4560546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9267767071723938, "cells": [{"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.82852172851562, "t": 385.96783447265625, "r": 547.23456, "b": 468.49432373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9764872193336487, "cells": [{"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.02378845214844, "t": 479.8658142089844, "r": 544.62225, "b": 502.5115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9691742062568665, "cells": [{"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 65.81348419189453, "t": 108.23880767822266, "r": 547.791259765625, "b": 361.2843322753906, "coord_origin": "TOPLEFT"}, "confidence": 0.668588399887085, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22818756103516, "t": 754.2823486328125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8751445412635803, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.59947204589844, "t": 754.7195434570312, "r": 261.53851, "b": 763.9192504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9498522877693176, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43333435058594, "t": 70.56073760986328, "r": 541.31055, "b": 93.01757049560547, "coord_origin": "TOPLEFT"}, "confidence": 0.90760338306427, "cells": [{"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores."}, {"label": "caption", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.16301727294922, "t": 364.0627746582031, "r": 387.35461, "b": 373.4560546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9267767071723938, "cells": [{"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores"}, {"label": "text", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82852172851562, "t": 385.96783447265625, "r": 547.23456, "b": 468.49432373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9764872193336487, "cells": [{"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases."}, {"label": "text", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.02378845214844, "t": 479.8658142089844, "r": 544.62225, "b": 502.5115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9691742062568665, "cells": [{"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities."}, {"label": "picture", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 65.81348419189453, "t": 108.23880767822266, "r": 547.791259765625, "b": 361.2843322753906, "coord_origin": "TOPLEFT"}, "confidence": 0.668588399887085, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43333435058594, "t": 70.56073760986328, "r": 541.31055, "b": 93.01757049560547, "coord_origin": "TOPLEFT"}, "confidence": 0.90760338306427, "cells": [{"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores."}, {"label": "caption", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.16301727294922, "t": 364.0627746582031, "r": 387.35461, "b": 373.4560546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9267767071723938, "cells": [{"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores"}, {"label": "text", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82852172851562, "t": 385.96783447265625, "r": 547.23456, "b": 468.49432373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9764872193336487, "cells": [{"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases."}, {"label": "text", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.02378845214844, "t": 479.8658142089844, "r": 544.62225, "b": 502.5115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9691742062568665, "cells": [{"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities."}, {"label": "picture", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 65.81348419189453, "t": 108.23880767822266, "r": 547.791259765625, "b": 361.2843322753906, "coord_origin": "TOPLEFT"}, "confidence": 0.668588399887085, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22818756103516, "t": 754.2823486328125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8751445412635803, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.59947204589844, "t": 754.7195434570312, "r": 261.53851, "b": 763.9192504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9498522877693176, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 540.8759155273438, "t": 754.2392578125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8702407479286194, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.26493072509766, "t": 301.75836181640625, "r": 189.6370086669922, "b": 310.74301, "coord_origin": "TOPLEFT"}, "confidence": 0.9447076320648193, "cells": [{"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.28071594238281, "t": 338.1206970214844, "r": 341.6769714355469, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9576840996742249, "cells": [{"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9339141845703, "t": 370.57708740234375, "r": 547.13208, "b": 416.7144775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9846300482749939, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8167266845703, "t": 428.53900146484375, "r": 545.08618, "b": 546.9762573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9876003265380859, "cells": [{"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 63.88162612915039, "t": 77.46954345703125, "r": 547.2862548828125, "b": 299.900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9817203283309937, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.8759155273438, "t": 754.2392578125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8702407479286194, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "caption", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493072509766, "t": 301.75836181640625, "r": 189.6370086669922, "b": 310.74301, "coord_origin": "TOPLEFT"}, "confidence": 0.9447076320648193, "cells": [{"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 Seamless integration"}, {"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.28071594238281, "t": 338.1206970214844, "r": 341.6769714355469, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9576840996742249, "cells": [{"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What is Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9339141845703, "t": 370.57708740234375, "r": 547.13208, "b": 416.7144775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9846300482749939, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8167266845703, "t": 428.53900146484375, "r": 545.08618, "b": 546.9762573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9876003265380859, "cells": [{"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses."}, {"label": "picture", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.88162612915039, "t": 77.46954345703125, "r": 547.2862548828125, "b": 299.900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9817203283309937, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493072509766, "t": 301.75836181640625, "r": 189.6370086669922, "b": 310.74301, "coord_origin": "TOPLEFT"}, "confidence": 0.9447076320648193, "cells": [{"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 Seamless integration"}, {"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.28071594238281, "t": 338.1206970214844, "r": 341.6769714355469, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9576840996742249, "cells": [{"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What is Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9339141845703, "t": 370.57708740234375, "r": 547.13208, "b": 416.7144775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9846300482749939, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8167266845703, "t": 428.53900146484375, "r": 545.08618, "b": 546.9762573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9876003265380859, "cells": [{"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses."}, {"label": "picture", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.88162612915039, "t": 77.46954345703125, "r": 547.2862548828125, "b": 299.900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9817203283309937, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.8759155273438, "t": 754.2392578125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8702407479286194, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.2588882446289, "t": 754.197998046875, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8762364983558655, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.62134552001953, "t": 754.7377319335938, "r": 261.53851, "b": 763.8740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9511485695838928, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.00271606445312, "t": 70.69949340820312, "r": 547.28058, "b": 164.883544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.984743595123291, "cells": [{"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.43482208251953, "t": 483.486328125, "r": 264.04919, "b": 492.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9446989297866821, "cells": [{"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.67288208007812, "t": 505.269287109375, "r": 518.39545, "b": 515.68896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9399420619010925, "cells": [{"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7481231689453, "t": 522.5965576171875, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}, "confidence": 0.9303468465805054, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7166748046875, "t": 539.3995971679688, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}, "confidence": 0.923041820526123, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.57183837890625, "t": 556.74267578125, "r": 263.64544677734375, "b": 567.2510986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9483156800270081, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.74082946777344, "t": 573.56103515625, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}, "confidence": 0.9437612891197205, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.00941467285156, "t": 595.1112670898438, "r": 547.28143, "b": 689.7734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9868659377098083, "cells": [{"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 63.72787094116211, "t": 179.1451873779297, "r": 547.3121948242188, "b": 480.79541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9759865999221802, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2588882446289, "t": 754.197998046875, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8762364983558655, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.62134552001953, "t": 754.7377319335938, "r": 261.53851, "b": 763.8740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9511485695838928, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.00271606445312, "t": 70.69949340820312, "r": 547.28058, "b": 164.883544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.984743595123291, "cells": [{"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.43482208251953, "t": 483.486328125, "r": 264.04919, "b": 492.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9446989297866821, "cells": [{"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 Solution overview of Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.67288208007812, "t": 505.269287109375, "r": 518.39545, "b": 515.68896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9399420619010925, "cells": [{"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}]}, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D:"}, {"label": "list_item", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7481231689453, "t": 522.5965576171875, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}, "confidence": 0.9303468465805054, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and Scale"}, {"label": "list_item", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7166748046875, "t": 539.3995971679688, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}, "confidence": 0.923041820526123, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Embedded Accelerators"}, {"label": "list_item", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.57183837890625, "t": 556.74267578125, "r": 263.64544677734375, "b": 567.2510986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9483156800270081, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reliability and Availability"}, {"label": "list_item", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74082946777344, "t": 573.56103515625, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}, "confidence": 0.9437612891197205, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security and Governance."}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.00941467285156, "t": 595.1112670898438, "r": 547.28143, "b": 689.7734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9868659377098083, "cells": [{"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}]}, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security."}, {"label": "picture", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.72787094116211, "t": 179.1451873779297, "r": 547.3121948242188, "b": 480.79541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9759865999221802, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.00271606445312, "t": 70.69949340820312, "r": 547.28058, "b": 164.883544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.984743595123291, "cells": [{"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.43482208251953, "t": 483.486328125, "r": 264.04919, "b": 492.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9446989297866821, "cells": [{"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 Solution overview of Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.67288208007812, "t": 505.269287109375, "r": 518.39545, "b": 515.68896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9399420619010925, "cells": [{"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}]}, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D:"}, {"label": "list_item", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7481231689453, "t": 522.5965576171875, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}, "confidence": 0.9303468465805054, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and Scale"}, {"label": "list_item", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7166748046875, "t": 539.3995971679688, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}, "confidence": 0.923041820526123, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Embedded Accelerators"}, {"label": "list_item", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.57183837890625, "t": 556.74267578125, "r": 263.64544677734375, "b": 567.2510986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9483156800270081, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reliability and Availability"}, {"label": "list_item", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74082946777344, "t": 573.56103515625, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}, "confidence": 0.9437612891197205, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security and Governance."}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.00941467285156, "t": 595.1112670898438, "r": 547.28143, "b": 689.7734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9868659377098083, "cells": [{"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}]}, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security."}, {"label": "picture", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.72787094116211, "t": 179.1451873779297, "r": 547.3121948242188, "b": 480.79541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9759865999221802, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2588882446289, "t": 754.197998046875, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8762364983558655, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.62134552001953, "t": 754.7377319335938, "r": 261.53851, "b": 763.8740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9511485695838928, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 540.9940795898438, "t": 754.3685302734375, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8976032733917236, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 64.78146362304688, "t": 70.03508758544922, "r": 519.7558, "b": 86.2610855102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9496250748634338, "cells": [{"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.4989776611328, "t": 102.55187225341797, "r": 544.54041, "b": 148.83160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9850783348083496, "cells": [{"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.4654083251953, "t": 155.99386596679688, "r": 341.2695007324219, "b": 165.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9414460062980652, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.58457946777344, "t": 172.69300842285156, "r": 423.51254, "b": 182.9974822998047, "coord_origin": "TOPLEFT"}, "confidence": 0.9599420428276062, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.65841674804688, "t": 189.37014770507812, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9574293494224548, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5748748779297, "t": 206.63885498046875, "r": 331.7222, "b": 216.97801208496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9566726684570312, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.54833984375, "t": 223.43775939941406, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9559329748153687, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.70672607421875, "t": 240.82850646972656, "r": 499.12784, "b": 251.19873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9593135714530945, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.2892303466797, "t": 262.5376892089844, "r": 538.98682, "b": 284.71887, "coord_origin": "TOPLEFT"}, "confidence": 0.9708739519119263, "cells": [{"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.76227569580078, "t": 312.55224609375, "r": 250.52972000000003, "b": 328.220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9684263467788696, "cells": [{"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.97999572753906, "t": 344.667724609375, "r": 543.42596, "b": 415.0365905761719, "coord_origin": "TOPLEFT"}, "confidence": 0.988315224647522, "cells": [{"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.85617065429688, "t": 426.64752197265625, "r": 547.23969, "b": 520.862060546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870705008506775, "cells": [{"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.98208618164062, "t": 532.6904296875, "r": 537.35345, "b": 578.9651489257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9855135083198547, "cells": [{"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.20474243164062, "t": 590.5270385742188, "r": 540.76263, "b": 624.9845581054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9835407137870789, "cells": [{"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 136.00357055664062, "t": 636.6727294921875, "r": 544.60699, "b": 683.03759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842023849487305, "cells": [{"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.9940795898438, "t": 754.3685302734375, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8976032733917236, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}, {"label": "section_header", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.78146362304688, "t": 70.03508758544922, "r": 519.7558, "b": 86.2610855102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9496250748634338, "cells": [{"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.4989776611328, "t": 102.55187225341797, "r": 544.54041, "b": 148.83160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9850783348083496, "cells": [{"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks:"}, {"label": "list_item", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.4654083251953, "t": 155.99386596679688, "r": 341.2695007324219, "b": 165.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9414460062980652, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Provision various containerized databases."}, {"label": "list_item", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.58457946777344, "t": 172.69300842285156, "r": 423.51254, "b": 182.9974822998047, "coord_origin": "TOPLEFT"}, "confidence": 0.9599420428276062, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore, clean, shape, and alter data by using Data Refinery."}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.65841674804688, "t": 189.37014770507812, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9574293494224548, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use project-specific data that is uploaded, or connect to distant data."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5748748779297, "t": 206.63885498046875, "r": 331.7222, "b": 216.97801208496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9566726684570312, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create Spark run times and applications."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.54833984375, "t": 223.43775939941406, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9559329748153687, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70672607421875, "t": 240.82850646972656, "r": 499.12784, "b": 251.19873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9593135714530945, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9."}, {"label": "text", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.2892303466797, "t": 262.5376892089844, "r": 538.98682, "b": 284.71887, "coord_origin": "TOPLEFT"}, "confidence": 0.9708739519119263, "cells": [{"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.76227569580078, "t": 312.55224609375, "r": 250.52972000000003, "b": 328.220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9684263467788696, "cells": [{"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source ecosystem"}, {"label": "text", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.97999572753906, "t": 344.667724609375, "r": 543.42596, "b": 415.0365905761719, "coord_origin": "TOPLEFT"}, "confidence": 0.988315224647522, "cells": [{"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building."}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.85617065429688, "t": 426.64752197265625, "r": 547.23969, "b": 520.862060546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870705008506775, "cells": [{"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}]}, "text": "IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.98208618164062, "t": 532.6904296875, "r": 537.35345, "b": 578.9651489257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9855135083198547, "cells": [{"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}]}, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing."}, {"label": "text", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.20474243164062, "t": 590.5270385742188, "r": 540.76263, "b": 624.9845581054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9835407137870789, "cells": [{"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE."}, {"label": "text", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.00357055664062, "t": 636.6727294921875, "r": 544.60699, "b": 683.03759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842023849487305, "cells": [{"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud."}], "body": [{"label": "section_header", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.78146362304688, "t": 70.03508758544922, "r": 519.7558, "b": 86.2610855102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9496250748634338, "cells": [{"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.4989776611328, "t": 102.55187225341797, "r": 544.54041, "b": 148.83160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9850783348083496, "cells": [{"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks:"}, {"label": "list_item", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.4654083251953, "t": 155.99386596679688, "r": 341.2695007324219, "b": 165.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9414460062980652, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Provision various containerized databases."}, {"label": "list_item", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.58457946777344, "t": 172.69300842285156, "r": 423.51254, "b": 182.9974822998047, "coord_origin": "TOPLEFT"}, "confidence": 0.9599420428276062, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore, clean, shape, and alter data by using Data Refinery."}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.65841674804688, "t": 189.37014770507812, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9574293494224548, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use project-specific data that is uploaded, or connect to distant data."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5748748779297, "t": 206.63885498046875, "r": 331.7222, "b": 216.97801208496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9566726684570312, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create Spark run times and applications."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.54833984375, "t": 223.43775939941406, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9559329748153687, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70672607421875, "t": 240.82850646972656, "r": 499.12784, "b": 251.19873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9593135714530945, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9."}, {"label": "text", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.2892303466797, "t": 262.5376892089844, "r": 538.98682, "b": 284.71887, "coord_origin": "TOPLEFT"}, "confidence": 0.9708739519119263, "cells": [{"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.76227569580078, "t": 312.55224609375, "r": 250.52972000000003, "b": 328.220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9684263467788696, "cells": [{"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source ecosystem"}, {"label": "text", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.97999572753906, "t": 344.667724609375, "r": 543.42596, "b": 415.0365905761719, "coord_origin": "TOPLEFT"}, "confidence": 0.988315224647522, "cells": [{"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building."}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.85617065429688, "t": 426.64752197265625, "r": 547.23969, "b": 520.862060546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870705008506775, "cells": [{"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}]}, "text": "IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.98208618164062, "t": 532.6904296875, "r": 537.35345, "b": 578.9651489257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9855135083198547, "cells": [{"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}]}, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing."}, {"label": "text", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.20474243164062, "t": 590.5270385742188, "r": 540.76263, "b": 624.9845581054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9835407137870789, "cells": [{"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE."}, {"label": "text", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.00357055664062, "t": 636.6727294921875, "r": 544.60699, "b": 683.03759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842023849487305, "cells": [{"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.9940795898438, "t": 754.3685302734375, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8976032733917236, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.45117950439453, "t": 754.43408203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155402183532715, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.23697662353516, "t": 754.7630004882812, "r": 267.0744, "b": 764.1210327148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9532065987586975, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.01052856445312, "t": 70.46507263183594, "r": 547.31226, "b": 140.8048095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9860562086105347, "cells": [{"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.78475952148438, "t": 152.72494506835938, "r": 547.35016, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9879527688026428, "cells": [{"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8437957763672, "t": 222.7408905029297, "r": 546.23071, "b": 292.7997741699219, "coord_origin": "TOPLEFT"}, "confidence": 0.988102376461029, "cells": [{"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.206298828125, "t": 304.8152160644531, "r": 521.34369, "b": 327.1700744628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9795346260070801, "cells": [{"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.09524536132812, "t": 354.2298889160156, "r": 191.27430725097656, "b": 370.04730224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9598572254180908, "cells": [{"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.68882751464844, "t": 386.67742919921875, "r": 547.25861, "b": 457.1266174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9882671236991882, "cells": [{"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.5255584716797, "t": 468.73712158203125, "r": 547.28253, "b": 551.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9885222911834717, "cells": [{"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.04042053222656, "t": 562.6182861328125, "r": 547.3233, "b": 608.7926635742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9859467148780823, "cells": [{"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45117950439453, "t": 754.43408203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155402183532715, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.23697662353516, "t": 754.7630004882812, "r": 267.0744, "b": 764.1210327148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9532065987586975, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.01052856445312, "t": 70.46507263183594, "r": 547.31226, "b": 140.8048095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9860562086105347, "cells": [{"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms."}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.78475952148438, "t": 152.72494506835938, "r": 547.35016, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9879527688026428, "cells": [{"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE."}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8437957763672, "t": 222.7408905029297, "r": 546.23071, "b": 292.7997741699219, "coord_origin": "TOPLEFT"}, "confidence": 0.988102376461029, "cells": [{"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server."}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.206298828125, "t": 304.8152160644531, "r": 521.34369, "b": 327.1700744628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9795346260070801, "cells": [{"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}]}, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers."}, {"label": "section_header", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.09524536132812, "t": 354.2298889160156, "r": 191.27430725097656, "b": 370.04730224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9598572254180908, "cells": [{"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Why AI on IBM Z"}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.68882751464844, "t": 386.67742919921875, "r": 547.25861, "b": 457.1266174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9882671236991882, "cells": [{"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.5255584716797, "t": 468.73712158203125, "r": 547.28253, "b": 551.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9885222911834717, "cells": [{"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}]}, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z)."}, {"label": "text", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04042053222656, "t": 562.6182861328125, "r": 547.3233, "b": 608.7926635742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9859467148780823, "cells": [{"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model."}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.01052856445312, "t": 70.46507263183594, "r": 547.31226, "b": 140.8048095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9860562086105347, "cells": [{"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms."}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.78475952148438, "t": 152.72494506835938, "r": 547.35016, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9879527688026428, "cells": [{"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE."}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8437957763672, "t": 222.7408905029297, "r": 546.23071, "b": 292.7997741699219, "coord_origin": "TOPLEFT"}, "confidence": 0.988102376461029, "cells": [{"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server."}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.206298828125, "t": 304.8152160644531, "r": 521.34369, "b": 327.1700744628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9795346260070801, "cells": [{"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}]}, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers."}, {"label": "section_header", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.09524536132812, "t": 354.2298889160156, "r": 191.27430725097656, "b": 370.04730224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9598572254180908, "cells": [{"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Why AI on IBM Z"}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.68882751464844, "t": 386.67742919921875, "r": 547.25861, "b": 457.1266174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9882671236991882, "cells": [{"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.5255584716797, "t": 468.73712158203125, "r": 547.28253, "b": 551.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9885222911834717, "cells": [{"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}]}, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z)."}, {"label": "text", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04042053222656, "t": 562.6182861328125, "r": 547.3233, "b": 608.7926635742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9859467148780823, "cells": [{"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45117950439453, "t": 754.43408203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155402183532715, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.23697662353516, "t": 754.7630004882812, "r": 267.0744, "b": 764.1210327148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9532065987586975, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.8191528320312, "t": 754.3023071289062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9041211009025574, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.15190887451172, "t": 353.40753173828125, "r": 506.3805236816406, "b": 362.9499206542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9419980049133301, "cells": [{"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.55064392089844, "t": 375.4695739746094, "r": 492.94083, "b": 385.46099853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9363874197006226, "cells": [{"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.7388458251953, "t": 392.1660461425781, "r": 413.40018, "b": 402.2774658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9464669823646545, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.22914123535156, "t": 409.4760437011719, "r": 526.18811, "b": 431.24091, "coord_origin": "TOPLEFT"}, "confidence": 0.9700906872749329, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.42306518554688, "t": 438.09356689453125, "r": 547.24652, "b": 460.22052, "coord_origin": "TOPLEFT"}, "confidence": 0.9732586741447449, "cells": [{"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.33360290527344, "t": 467.51483154296875, "r": 546.75769, "b": 489.2516174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9748732447624207, "cells": [{"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.7086639404297, "t": 496.2107238769531, "r": 490.03317, "b": 506.39105224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9550834894180298, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.6390838623047, "t": 513.5339965820312, "r": 547.27051, "b": 535.7632446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9789533019065857, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.31088256835938, "t": 562.8890380859375, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}, "confidence": 0.9544580578804016, "cells": [{"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.98568725585938, "t": 595.26904296875, "r": 533.90125, "b": 629.24123, "coord_origin": "TOPLEFT"}, "confidence": 0.9852948188781738, "cells": [{"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.95875549316406, "t": 641.30712890625, "r": 547.24664, "b": 687.2891845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9874392151832581, "cells": [{"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.34823608398438, "t": 699.2769165039062, "r": 547.31128, "b": 721.6598510742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9817102551460266, "cells": [{"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.857383728027344, "t": 77.41220092773438, "r": 547.4847412109375, "b": 350.3799743652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8191528320312, "t": 754.3023071289062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9041211009025574, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "caption", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.15190887451172, "t": 353.40753173828125, "r": 506.3805236816406, "b": 362.9499206542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9419980049133301, "cells": [{"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.55064392089844, "t": 375.4695739746094, "r": 492.94083, "b": 385.46099853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9363874197006226, "cells": [{"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z:"}, {"label": "list_item", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.7388458251953, "t": 392.1660461425781, "r": 413.40018, "b": 402.2774658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9464669823646545, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH World-class AI inference platform for enterprise workloads:"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.22914123535156, "t": 409.4760437011719, "r": 526.18811, "b": 431.24091, "coord_origin": "TOPLEFT"}, "confidence": 0.9700906872749329, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}]}, "text": "-Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores."}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.42306518554688, "t": 438.09356689453125, "r": 547.24652, "b": 460.22052, "coord_origin": "TOPLEFT"}, "confidence": 0.9732586741447449, "cells": [{"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}]}, "text": "-Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.33360290527344, "t": 467.51483154296875, "r": 546.75769, "b": 489.2516174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9748732447624207, "cells": [{"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}]}, "text": "-Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7086639404297, "t": 496.2107238769531, "r": 490.03317, "b": 506.39105224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9550834894180298, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security: Encrypted memory, and improved trusted execution environments."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6390838623047, "t": 513.5339965820312, "r": 547.27051, "b": 535.7632446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9789533019065857, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system."}, {"label": "section_header", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.31088256835938, "t": 562.8890380859375, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}, "confidence": 0.9544580578804016, "cells": [{"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}]}, "text": "AI use cases"}, {"label": "text", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.98568725585938, "t": 595.26904296875, "r": 533.90125, "b": 629.24123, "coord_origin": "TOPLEFT"}, "confidence": 0.9852948188781738, "cells": [{"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}]}, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale."}, {"label": "text", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.95875549316406, "t": 641.30712890625, "r": 547.24664, "b": 687.2891845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9874392151832581, "cells": [{"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "text", "id": 12, "page_no": 12, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.34823608398438, "t": 699.2769165039062, "r": 547.31128, "b": 721.6598510742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9817102551460266, "cells": [{"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}]}, "text": "For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount."}, {"label": "picture", "id": 13, "page_no": 12, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.857383728027344, "t": 77.41220092773438, "r": 547.4847412109375, "b": 350.3799743652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.15190887451172, "t": 353.40753173828125, "r": 506.3805236816406, "b": 362.9499206542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9419980049133301, "cells": [{"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.55064392089844, "t": 375.4695739746094, "r": 492.94083, "b": 385.46099853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9363874197006226, "cells": [{"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z:"}, {"label": "list_item", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.7388458251953, "t": 392.1660461425781, "r": 413.40018, "b": 402.2774658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9464669823646545, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH World-class AI inference platform for enterprise workloads:"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.22914123535156, "t": 409.4760437011719, "r": 526.18811, "b": 431.24091, "coord_origin": "TOPLEFT"}, "confidence": 0.9700906872749329, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}]}, "text": "-Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores."}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.42306518554688, "t": 438.09356689453125, "r": 547.24652, "b": 460.22052, "coord_origin": "TOPLEFT"}, "confidence": 0.9732586741447449, "cells": [{"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}]}, "text": "-Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.33360290527344, "t": 467.51483154296875, "r": 546.75769, "b": 489.2516174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9748732447624207, "cells": [{"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}]}, "text": "-Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7086639404297, "t": 496.2107238769531, "r": 490.03317, "b": 506.39105224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9550834894180298, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security: Encrypted memory, and improved trusted execution environments."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6390838623047, "t": 513.5339965820312, "r": 547.27051, "b": 535.7632446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9789533019065857, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system."}, {"label": "section_header", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.31088256835938, "t": 562.8890380859375, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}, "confidence": 0.9544580578804016, "cells": [{"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}]}, "text": "AI use cases"}, {"label": "text", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.98568725585938, "t": 595.26904296875, "r": 533.90125, "b": 629.24123, "coord_origin": "TOPLEFT"}, "confidence": 0.9852948188781738, "cells": [{"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}]}, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale."}, {"label": "text", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.95875549316406, "t": 641.30712890625, "r": 547.24664, "b": 687.2891845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9874392151832581, "cells": [{"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "text", "id": 12, "page_no": 12, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.34823608398438, "t": 699.2769165039062, "r": 547.31128, "b": 721.6598510742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9817102551460266, "cells": [{"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}]}, "text": "For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount."}, {"label": "picture", "id": 13, "page_no": 12, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.857383728027344, "t": 77.41220092773438, "r": 547.4847412109375, "b": 350.3799743652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8191528320312, "t": 754.3023071289062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9041211009025574, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.53218078613281, "t": 754.509033203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160951375961304, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2241439819336, "t": 754.7615356445312, "r": 267.0744, "b": 764.1396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9570255279541016, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.15476989746094, "t": 70.64640045166016, "r": 525.18512, "b": 104.7277603149414, "coord_origin": "TOPLEFT"}, "confidence": 0.9839752912521362, "cells": [{"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8750762939453, "t": 116.78321838378906, "r": 547.31134, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9775494337081909, "cells": [{"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.158935546875, "t": 162.72833251953125, "r": 413.42313, "b": 172.92796325683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9381385445594788, "cells": [{"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.51185607910156, "t": 180.31353759765625, "r": 545.1839, "b": 230.8561553955078, "coord_origin": "TOPLEFT"}, "confidence": 0.700736403465271, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6671600341797, "t": 237.22537231445312, "r": 402.90234, "b": 247.7976837158203, "coord_origin": "TOPLEFT"}, "confidence": 0.927428662776947, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 150.19342041015625, "t": 254.68844604492188, "r": 547.2406, "b": 301.0074157714844, "coord_origin": "TOPLEFT"}, "confidence": 0.817919135093689, "cells": [{"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.68087768554688, "t": 307.4832763671875, "r": 371.7962, "b": 317.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9381933212280273, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.48846435546875, "t": 324.5227966308594, "r": 541.1402, "b": 346.9660339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.7946481108665466, "cells": [{"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.71913146972656, "t": 353.8939514160156, "r": 455.3772277832031, "b": 364.2116394042969, "coord_origin": "TOPLEFT"}, "confidence": 0.896625280380249, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.2084197998047, "t": 370.6900634765625, "r": 534.64014, "b": 392.9651794433594, "coord_origin": "TOPLEFT"}, "confidence": 0.7541017532348633, "cells": [{"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.66246032714844, "t": 399.35772705078125, "r": 539.65314, "b": 421.6989440917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9588227868080139, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 150.8683624267578, "t": 428.65521240234375, "r": 547.24268, "b": 451.055908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.7970486879348755, "cells": [{"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "section_header", "bbox": {"l": 64.4876708984375, "t": 478.11065673828125, "r": 547.25647, "b": 513.474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484166502952576, "cells": [{"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.6639404296875, "t": 529.3472290039062, "r": 547.17877, "b": 575.7841186523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9858030080795288, "cells": [{"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.313232421875, "t": 588.0188598632812, "r": 547.24249, "b": 610.3685913085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9748781323432922, "cells": [{"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "section_header", "bbox": {"l": 64.53734588623047, "t": 629.2350463867188, "r": 186.7186, "b": 642.421142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9630159139633179, "cells": [{"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 136.22996520996094, "t": 655.5369873046875, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}, "confidence": 0.9516966938972473, "cells": [{"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.8061065673828, "t": 672.6024780273438, "r": 293.9800720214844, "b": 682.9390869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9561625123023987, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.63792419433594, "t": 689.974609375, "r": 435.72745, "b": 700.486083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9557024240493774, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.60543823242188, "t": 706.6790161132812, "r": 466.06842041015625, "b": 717.1160888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9607930183410645, "cells": [{"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53218078613281, "t": 754.509033203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160951375961304, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2241439819336, "t": 754.7615356445312, "r": 267.0744, "b": 764.1396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9570255279541016, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.15476989746094, "t": 70.64640045166016, "r": 525.18512, "b": 104.7277603149414, "coord_origin": "TOPLEFT"}, "confidence": 0.9839752912521362, "cells": [{"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8750762939453, "t": 116.78321838378906, "r": 547.31134, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9775494337081909, "cells": [{"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.158935546875, "t": 162.72833251953125, "r": 413.42313, "b": 172.92796325683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9381385445594788, "cells": [{"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In the following sections, we describe the following use cases:"}, {"label": "list_item", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51185607910156, "t": 180.31353759765625, "r": 545.1839, "b": 230.8561553955078, "coord_origin": "TOPLEFT"}, "confidence": 0.700736403465271, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks."}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6671600341797, "t": 237.22537231445312, "r": 402.90234, "b": 247.7976837158203, "coord_origin": "TOPLEFT"}, "confidence": 0.927428662776947, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 2: Credit default risk assessment\u201d on page 22"}, {"label": "list_item", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.19342041015625, "t": 254.68844604492188, "r": 547.2406, "b": 301.0074157714844, "coord_origin": "TOPLEFT"}, "confidence": 0.817919135093689, "cells": [{"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.68087768554688, "t": 307.4832763671875, "r": 371.7962, "b": 317.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9381933212280273, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 3: Clearing and settlement\u201d on page 25"}, {"label": "list_item", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.48846435546875, "t": 324.5227966308594, "r": 541.1402, "b": 346.9660339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.7946481108665466, "cells": [{"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process."}, {"label": "list_item", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.71913146972656, "t": 353.8939514160156, "r": 455.3772277832031, "b": 364.2116394042969, "coord_origin": "TOPLEFT"}, "confidence": 0.896625280380249, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.2084197998047, "t": 370.6900634765625, "r": 534.64014, "b": 392.9651794433594, "coord_origin": "TOPLEFT"}, "confidence": 0.7541017532348633, "cells": [{"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure."}, {"label": "list_item", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.66246032714844, "t": 399.35772705078125, "r": 539.65314, "b": 421.6989440917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9588227868080139, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on page 30"}, {"label": "list_item", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.8683624267578, "t": 428.65521240234375, "r": 547.24268, "b": 451.055908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.7970486879348755, "cells": [{"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}]}, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring real-time body movements."}, {"label": "section_header", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.4876708984375, "t": 478.11065673828125, "r": 547.25647, "b": 513.474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484166502952576, "cells": [{"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 1: Responsible AI augmented with risk and regulatory compliance"}, {"label": "text", "id": 15, "page_no": 13, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.6639404296875, "t": 529.3472290039062, "r": 547.17877, "b": 575.7841186523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9858030080795288, "cells": [{"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}]}, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task."}, {"label": "text", "id": 16, "page_no": 13, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.313232421875, "t": 588.0188598632812, "r": 547.24249, "b": 610.3685913085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9748781323432922, "cells": [{"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}]}, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring."}, {"label": "section_header", "id": 17, "page_no": 13, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.53734588623047, "t": 629.2350463867188, "r": 186.7186, "b": 642.421142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9630159139633179, "cells": [{"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 18, "page_no": 13, "cluster": {"id": 18, "label": "text", "bbox": {"l": 136.22996520996094, "t": 655.5369873046875, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}, "confidence": 0.9516966938972473, "cells": [{"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the three main reasons why organizations struggle with the adoption of AI:"}, {"label": "list_item", "id": 19, "page_no": 13, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.8061065673828, "t": 672.6024780273438, "r": 293.9800720214844, "b": 682.9390869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9561625123023987, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scaling with growing regulations"}, {"label": "list_item", "id": 20, "page_no": 13, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.63792419433594, "t": 689.974609375, "r": 435.72745, "b": 700.486083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9557024240493774, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Lack of confidence in operationalized AI (making responsible AI)"}, {"label": "list_item", "id": 21, "page_no": 13, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.60543823242188, "t": 706.6790161132812, "r": 466.06842041015625, "b": 717.1160888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9607930183410645, "cells": [{"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Challenges around managing the risk throughout the entire AI workflow"}], "body": [{"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.15476989746094, "t": 70.64640045166016, "r": 525.18512, "b": 104.7277603149414, "coord_origin": "TOPLEFT"}, "confidence": 0.9839752912521362, "cells": [{"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8750762939453, "t": 116.78321838378906, "r": 547.31134, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9775494337081909, "cells": [{"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.158935546875, "t": 162.72833251953125, "r": 413.42313, "b": 172.92796325683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9381385445594788, "cells": [{"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In the following sections, we describe the following use cases:"}, {"label": "list_item", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51185607910156, "t": 180.31353759765625, "r": 545.1839, "b": 230.8561553955078, "coord_origin": "TOPLEFT"}, "confidence": 0.700736403465271, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks."}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6671600341797, "t": 237.22537231445312, "r": 402.90234, "b": 247.7976837158203, "coord_origin": "TOPLEFT"}, "confidence": 0.927428662776947, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 2: Credit default risk assessment\u201d on page 22"}, {"label": "list_item", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.19342041015625, "t": 254.68844604492188, "r": 547.2406, "b": 301.0074157714844, "coord_origin": "TOPLEFT"}, "confidence": 0.817919135093689, "cells": [{"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.68087768554688, "t": 307.4832763671875, "r": 371.7962, "b": 317.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9381933212280273, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 3: Clearing and settlement\u201d on page 25"}, {"label": "list_item", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.48846435546875, "t": 324.5227966308594, "r": 541.1402, "b": 346.9660339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.7946481108665466, "cells": [{"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process."}, {"label": "list_item", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.71913146972656, "t": 353.8939514160156, "r": 455.3772277832031, "b": 364.2116394042969, "coord_origin": "TOPLEFT"}, "confidence": 0.896625280380249, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.2084197998047, "t": 370.6900634765625, "r": 534.64014, "b": 392.9651794433594, "coord_origin": "TOPLEFT"}, "confidence": 0.7541017532348633, "cells": [{"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure."}, {"label": "list_item", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.66246032714844, "t": 399.35772705078125, "r": 539.65314, "b": 421.6989440917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9588227868080139, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on page 30"}, {"label": "list_item", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.8683624267578, "t": 428.65521240234375, "r": 547.24268, "b": 451.055908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.7970486879348755, "cells": [{"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}]}, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring real-time body movements."}, {"label": "section_header", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.4876708984375, "t": 478.11065673828125, "r": 547.25647, "b": 513.474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484166502952576, "cells": [{"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 1: Responsible AI augmented with risk and regulatory compliance"}, {"label": "text", "id": 15, "page_no": 13, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.6639404296875, "t": 529.3472290039062, "r": 547.17877, "b": 575.7841186523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9858030080795288, "cells": [{"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}]}, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task."}, {"label": "text", "id": 16, "page_no": 13, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.313232421875, "t": 588.0188598632812, "r": 547.24249, "b": 610.3685913085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9748781323432922, "cells": [{"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}]}, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring."}, {"label": "section_header", "id": 17, "page_no": 13, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.53734588623047, "t": 629.2350463867188, "r": 186.7186, "b": 642.421142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9630159139633179, "cells": [{"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 18, "page_no": 13, "cluster": {"id": 18, "label": "text", "bbox": {"l": 136.22996520996094, "t": 655.5369873046875, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}, "confidence": 0.9516966938972473, "cells": [{"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the three main reasons why organizations struggle with the adoption of AI:"}, {"label": "list_item", "id": 19, "page_no": 13, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.8061065673828, "t": 672.6024780273438, "r": 293.9800720214844, "b": 682.9390869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9561625123023987, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scaling with growing regulations"}, {"label": "list_item", "id": 20, "page_no": 13, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.63792419433594, "t": 689.974609375, "r": 435.72745, "b": 700.486083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9557024240493774, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Lack of confidence in operationalized AI (making responsible AI)"}, {"label": "list_item", "id": 21, "page_no": 13, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.60543823242188, "t": 706.6790161132812, "r": 466.06842041015625, "b": 717.1160888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9607930183410645, "cells": [{"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Challenges around managing the risk throughout the entire AI workflow"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53218078613281, "t": 754.509033203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160951375961304, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2241439819336, "t": 754.7615356445312, "r": 267.0744, "b": 764.1396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9570255279541016, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.9011840820312, "t": 754.3621215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.915951669216156, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 136.29180908203125, "t": 70.39407348632812, "r": 324.71161, "b": 82.81320190429688, "coord_origin": "TOPLEFT"}, "confidence": 0.9631897211074829, "cells": [{"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92501831054688, "t": 85.20021057128906, "r": 536.31555, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.988149106502533, "cells": [{"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.52218627929688, "t": 171.78952026367188, "r": 223.41616821289062, "b": 183.66505432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9572980999946594, "cells": [{"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.9759521484375, "t": 186.67660522460938, "r": 547.32831, "b": 233.0913543701172, "coord_origin": "TOPLEFT"}, "confidence": 0.9755564332008362, "cells": [{"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 136.5354461669922, "t": 248.45245361328125, "r": 364.06561, "b": 260.55926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9580543637275696, "cells": [{"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.28106689453125, "t": 263.99212646484375, "r": 389.47919, "b": 274.5697326660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9462679028511047, "cells": [{"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.77525329589844, "t": 280.7226257324219, "r": 382.91455, "b": 290.9065246582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9557760953903198, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.74273681640625, "t": 297.4331359863281, "r": 450.99023, "b": 308.05767822265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9605316519737244, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.5438995361328, "t": 314.5897521972656, "r": 366.21268, "b": 324.8603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9523881077766418, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.47459411621094, "t": 331.47955322265625, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9583740830421448, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.48123168945312, "t": 348.7354736328125, "r": 386.45636, "b": 358.875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537600874900818, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.62051391601562, "t": 366.0385437011719, "r": 331.24911, "b": 376.2076721191406, "coord_origin": "TOPLEFT"}, "confidence": 0.9608153700828552, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.05039978027344, "t": 387.55609130859375, "r": 547.18677, "b": 421.69937, "coord_origin": "TOPLEFT"}, "confidence": 0.9833502769470215, "cells": [{"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.85047912597656, "t": 433.4964294433594, "r": 547.24658, "b": 491.7182, "coord_origin": "TOPLEFT"}, "confidence": 0.9875410199165344, "cells": [{"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.9011840820312, "t": 754.3621215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.915951669216156, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}, {"label": "section_header", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.29180908203125, "t": 70.39407348632812, "r": 324.71161, "b": 82.81320190429688, "coord_origin": "TOPLEFT"}, "confidence": 0.9631897211074829, "cells": [{"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Scaling with growing regulations"}, {"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92501831054688, "t": 85.20021057128906, "r": 536.31555, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.988149106502533, "cells": [{"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination."}, {"label": "section_header", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.52218627929688, "t": 171.78952026367188, "r": 223.41616821289062, "b": 183.66505432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9572980999946594, "cells": [{"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9759521484375, "t": 186.67660522460938, "r": 547.32831, "b": 233.0913543701172, "coord_origin": "TOPLEFT"}, "confidence": 0.9755564332008362, "cells": [{"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable."}, {"label": "section_header", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.5354461669922, "t": 248.45245361328125, "r": 364.06561, "b": 260.55926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9580543637275696, "cells": [{"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}]}, "text": "Risks throughout the entire AI workflow"}, {"label": "text", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28106689453125, "t": 263.99212646484375, "r": 389.47919, "b": 274.5697326660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9462679028511047, "cells": [{"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Organizations need to mitigate risk of the following items:"}, {"label": "list_item", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.77525329589844, "t": 280.7226257324219, "r": 382.91455, "b": 290.9065246582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9557760953903198, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Deciding not to use certain technologies or practices"}, {"label": "list_item", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74273681640625, "t": 297.4331359863281, "r": 450.99023, "b": 308.05767822265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9605316519737244, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using personal information when needed and with a user\u2019s consent"}, {"label": "list_item", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5438995361328, "t": 314.5897521972656, "r": 366.21268, "b": 324.8603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9523881077766418, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ensuring automated decisions are free from bias"}, {"label": "list_item", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.47459411621094, "t": 331.47955322265625, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9583740830421448, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Customer confidence by providing explanations for business decisions"}, {"label": "list_item", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.48123168945312, "t": 348.7354736328125, "r": 386.45636, "b": 358.875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537600874900818, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Fraud to the organization and to customer\u2019s accounts"}, {"label": "list_item", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.62051391601562, "t": 366.0385437011719, "r": 331.24911, "b": 376.2076721191406, "coord_origin": "TOPLEFT"}, "confidence": 0.9608153700828552, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Delays in putting models into production"}, {"label": "text", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05039978027344, "t": 387.55609130859375, "r": 547.18677, "b": 421.69937, "coord_origin": "TOPLEFT"}, "confidence": 0.9833502769470215, "cells": [{"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}]}, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important."}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.85047912597656, "t": 433.4964294433594, "r": 547.24658, "b": 491.7182, "coord_origin": "TOPLEFT"}, "confidence": 0.9875410199165344, "cells": [{"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}]}, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively."}], "body": [{"label": "section_header", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.29180908203125, "t": 70.39407348632812, "r": 324.71161, "b": 82.81320190429688, "coord_origin": "TOPLEFT"}, "confidence": 0.9631897211074829, "cells": [{"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Scaling with growing regulations"}, {"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92501831054688, "t": 85.20021057128906, "r": 536.31555, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.988149106502533, "cells": [{"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination."}, {"label": "section_header", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.52218627929688, "t": 171.78952026367188, "r": 223.41616821289062, "b": 183.66505432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9572980999946594, "cells": [{"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9759521484375, "t": 186.67660522460938, "r": 547.32831, "b": 233.0913543701172, "coord_origin": "TOPLEFT"}, "confidence": 0.9755564332008362, "cells": [{"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable."}, {"label": "section_header", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.5354461669922, "t": 248.45245361328125, "r": 364.06561, "b": 260.55926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9580543637275696, "cells": [{"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}]}, "text": "Risks throughout the entire AI workflow"}, {"label": "text", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28106689453125, "t": 263.99212646484375, "r": 389.47919, "b": 274.5697326660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9462679028511047, "cells": [{"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Organizations need to mitigate risk of the following items:"}, {"label": "list_item", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.77525329589844, "t": 280.7226257324219, "r": 382.91455, "b": 290.9065246582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9557760953903198, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Deciding not to use certain technologies or practices"}, {"label": "list_item", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74273681640625, "t": 297.4331359863281, "r": 450.99023, "b": 308.05767822265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9605316519737244, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using personal information when needed and with a user\u2019s consent"}, {"label": "list_item", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5438995361328, "t": 314.5897521972656, "r": 366.21268, "b": 324.8603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9523881077766418, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ensuring automated decisions are free from bias"}, {"label": "list_item", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.47459411621094, "t": 331.47955322265625, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9583740830421448, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Customer confidence by providing explanations for business decisions"}, {"label": "list_item", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.48123168945312, "t": 348.7354736328125, "r": 386.45636, "b": 358.875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537600874900818, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Fraud to the organization and to customer\u2019s accounts"}, {"label": "list_item", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.62051391601562, "t": 366.0385437011719, "r": 331.24911, "b": 376.2076721191406, "coord_origin": "TOPLEFT"}, "confidence": 0.9608153700828552, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Delays in putting models into production"}, {"label": "text", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05039978027344, "t": 387.55609130859375, "r": 547.18677, "b": 421.69937, "coord_origin": "TOPLEFT"}, "confidence": 0.9833502769470215, "cells": [{"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}]}, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important."}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.85047912597656, "t": 433.4964294433594, "r": 547.24658, "b": 491.7182, "coord_origin": "TOPLEFT"}, "confidence": 0.9875410199165344, "cells": [{"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}]}, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.9011840820312, "t": 754.3621215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.915951669216156, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.407470703125, "t": 754.3117065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9113772511482239, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.1883316040039, "t": 754.7257080078125, "r": 267.0744, "b": 764.1552124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9578691720962524, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.13604736328125, "t": 70.62796020507812, "r": 547.30731, "b": 117.06792449951172, "coord_origin": "TOPLEFT"}, "confidence": 0.9846124053001404, "cells": [{"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17765808105469, "t": 332.0653381347656, "r": 206.827880859375, "b": 341.4869689941406, "coord_origin": "TOPLEFT"}, "confidence": 0.952994704246521, "cells": [{"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.79885864257812, "t": 354.1422119140625, "r": 540.12024, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9863293766975403, "cells": [{"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.70143127441406, "t": 443.571044921875, "r": 279.45147705078125, "b": 456.88272, "coord_origin": "TOPLEFT"}, "confidence": 0.9659296274185181, "cells": [{"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.8342742919922, "t": 469.94647216796875, "r": 540.66016, "b": 492.26154, "coord_origin": "TOPLEFT"}, "confidence": 0.9788194298744202, "cells": [{"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.8035888671875, "t": 503.9425354003906, "r": 547.3551, "b": 610.21979, "coord_origin": "TOPLEFT"}, "confidence": 0.9855291247367859, "cells": [{"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.9875030517578, "t": 621.9910888671875, "r": 543.35425, "b": 668.23876, "coord_origin": "TOPLEFT"}, "confidence": 0.9869634509086609, "cells": [{"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 63.77848434448242, "t": 131.25733947753906, "r": 546.8060302734375, "b": 329.46014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9830358028411865, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.407470703125, "t": 754.3117065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9113772511482239, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1883316040039, "t": 754.7257080078125, "r": 267.0744, "b": 764.1552124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9578691720962524, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.13604736328125, "t": 70.62796020507812, "r": 547.30731, "b": 117.06792449951172, "coord_origin": "TOPLEFT"}, "confidence": 0.9846124053001404, "cells": [{"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise."}, {"label": "caption", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17765808105469, "t": 332.0653381347656, "r": 206.827880859375, "b": 341.4869689941406, "coord_origin": "TOPLEFT"}, "confidence": 0.952994704246521, "cells": [{"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 8 Typical AI model lifecycle"}, {"label": "text", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.79885864257812, "t": 354.1422119140625, "r": 540.12024, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9863293766975403, "cells": [{"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows."}, {"label": "section_header", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.70143127441406, "t": 443.571044921875, "r": 279.45147705078125, "b": 456.88272, "coord_origin": "TOPLEFT"}, "confidence": 0.9659296274185181, "cells": [{"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}]}, "text": "IBM governance solution for IBM Z"}, {"label": "text", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8342742919922, "t": 469.94647216796875, "r": 540.66016, "b": 492.26154, "coord_origin": "TOPLEFT"}, "confidence": 0.9788194298744202, "cells": [{"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}]}, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises."}, {"label": "text", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8035888671875, "t": 503.9425354003906, "r": 547.3551, "b": 610.21979, "coord_origin": "TOPLEFT"}, "confidence": 0.9855291247367859, "cells": [{"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}]}, "text": "AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, and the possible risks."}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9875030517578, "t": 621.9910888671875, "r": 543.35425, "b": 668.23876, "coord_origin": "TOPLEFT"}, "confidence": 0.9869634509086609, "cells": [{"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}]}, "text": "In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance."}, {"label": "picture", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.77848434448242, "t": 131.25733947753906, "r": 546.8060302734375, "b": 329.46014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9830358028411865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.13604736328125, "t": 70.62796020507812, "r": 547.30731, "b": 117.06792449951172, "coord_origin": "TOPLEFT"}, "confidence": 0.9846124053001404, "cells": [{"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise."}, {"label": "caption", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17765808105469, "t": 332.0653381347656, "r": 206.827880859375, "b": 341.4869689941406, "coord_origin": "TOPLEFT"}, "confidence": 0.952994704246521, "cells": [{"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 8 Typical AI model lifecycle"}, {"label": "text", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.79885864257812, "t": 354.1422119140625, "r": 540.12024, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9863293766975403, "cells": [{"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows."}, {"label": "section_header", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.70143127441406, "t": 443.571044921875, "r": 279.45147705078125, "b": 456.88272, "coord_origin": "TOPLEFT"}, "confidence": 0.9659296274185181, "cells": [{"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}]}, "text": "IBM governance solution for IBM Z"}, {"label": "text", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8342742919922, "t": 469.94647216796875, "r": 540.66016, "b": 492.26154, "coord_origin": "TOPLEFT"}, "confidence": 0.9788194298744202, "cells": [{"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}]}, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises."}, {"label": "text", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8035888671875, "t": 503.9425354003906, "r": 547.3551, "b": 610.21979, "coord_origin": "TOPLEFT"}, "confidence": 0.9855291247367859, "cells": [{"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}]}, "text": "AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, and the possible risks."}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9875030517578, "t": 621.9910888671875, "r": 543.35425, "b": 668.23876, "coord_origin": "TOPLEFT"}, "confidence": 0.9869634509086609, "cells": [{"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}]}, "text": "In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance."}, {"label": "picture", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.77848434448242, "t": 131.25733947753906, "r": 546.8060302734375, "b": 329.46014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9830358028411865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.407470703125, "t": 754.3117065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9113772511482239, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1883316040039, "t": 754.7257080078125, "r": 267.0744, "b": 764.1552124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9578691720962524, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.963623046875, "t": 754.3152465820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105063676834106, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 136.3389434814453, "t": 70.3511962890625, "r": 249.09483337402344, "b": 81.77921295166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9597545266151428, "cells": [{"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.980224609375, "t": 85.47271728515625, "r": 544.04358, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9820835590362549, "cells": [{"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.69290161132812, "t": 126.65188598632812, "r": 517.36163, "b": 137.11279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9599407315254211, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.61203002929688, "t": 144.06478881835938, "r": 428.48267, "b": 154.2803192138672, "coord_origin": "TOPLEFT"}, "confidence": 0.9574074745178223, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6266632080078, "t": 160.60958862304688, "r": 352.83337, "b": 170.9593963623047, "coord_origin": "TOPLEFT"}, "confidence": 0.9567543864250183, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.69007873535156, "t": 177.45838928222656, "r": 531.14728, "b": 187.81533813476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9560735821723938, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.56716918945312, "t": 200.49346923828125, "r": 231.8074951171875, "b": 211.7656707763672, "coord_origin": "TOPLEFT"}, "confidence": 0.9554390907287598, "cells": [{"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.1630859375, "t": 216.0500030517578, "r": 544.07233, "b": 237.92694091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9777550101280212, "cells": [{"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6591033935547, "t": 244.775146484375, "r": 497.78207, "b": 254.89271545410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9544404745101929, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.6646270751953, "t": 261.35205078125, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9548507332801819, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.5814971923828, "t": 278.5577087402344, "r": 440.54816000000005, "b": 288.8544616699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9628311991691589, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 136.37454223632812, "t": 301.3377685546875, "r": 258.3398742675781, "b": 312.59286, "coord_origin": "TOPLEFT"}, "confidence": 0.9562974572181702, "cells": [{"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9670867919922, "t": 316.8338928222656, "r": 547.24664, "b": 363.3339538574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852515459060669, "cells": [{"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.71563720703125, "t": 369.3797607421875, "r": 433.33899, "b": 379.9487609863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9577170014381409, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.65516662597656, "t": 386.6414794921875, "r": 465.02979000000005, "b": 397.0399169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9534773826599121, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.6472930908203, "t": 403.3809509277344, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9609959721565247, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 136.04916381835938, "t": 425.9317932128906, "r": 547.25159, "b": 472.63140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": [{"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.6191864013672, "t": 478.54052734375, "r": 526.84161, "b": 500.71951, "coord_origin": "TOPLEFT"}, "confidence": 0.9704018831253052, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.48377990722656, "t": 507.9300537109375, "r": 541.80554, "b": 566.3822631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9851728677749634, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 136.42056274414062, "t": 577.5960693359375, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}, "confidence": 0.9513794779777527, "cells": [{"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "footnote", "bbox": {"l": 136.24427795410156, "t": 725.0267333984375, "r": 418.4429931640625, "b": 735.0806274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9410406947135925, "cells": [{"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.963623046875, "t": 754.3152465820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105063676834106, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "section_header", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.3389434814453, "t": 70.3511962890625, "r": 249.09483337402344, "b": 81.77921295166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9597545266151428, "cells": [{"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance"}, {"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.980224609375, "t": 85.47271728515625, "r": 544.04358, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9820835590362549, "cells": [{"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements:"}, {"label": "list_item", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.69290161132812, "t": 126.65188598632812, "r": 517.36163, "b": 137.11279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9599407315254211, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle."}, {"label": "list_item", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.61203002929688, "t": 144.06478881835938, "r": 428.48267, "b": 154.2803192138672, "coord_origin": "TOPLEFT"}, "confidence": 0.9574074745178223, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate the capture of model metadata for report generation."}, {"label": "list_item", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6266632080078, "t": 160.60958862304688, "r": 352.83337, "b": 170.9593963623047, "coord_origin": "TOPLEFT"}, "confidence": 0.9567543864250183, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Drive transparent and explainable AI at scale."}, {"label": "list_item", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.69007873535156, "t": 177.45838928222656, "r": 531.14728, "b": 187.81533813476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9560735821723938, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging."}, {"label": "section_header", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.56716918945312, "t": 200.49346923828125, "r": 231.8074951171875, "b": 211.7656707763672, "coord_origin": "TOPLEFT"}, "confidence": 0.9554390907287598, "cells": [{"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management"}, {"label": "text", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.1630859375, "t": 216.0500030517578, "r": 544.07233, "b": 237.92694091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9777550101280212, "cells": [{"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale:"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6591033935547, "t": 244.775146484375, "r": 497.78207, "b": 254.89271545410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9544404745101929, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate facts and workflow management to comply with business standards."}, {"label": "list_item", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6646270751953, "t": 261.35205078125, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9548507332801819, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for clear and concise customizable results."}, {"label": "list_item", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.5814971923828, "t": 278.5577087402344, "r": 440.54816000000005, "b": 288.8544616699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9628311991691589, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enhanced collaboration across multiple regions and geographies."}, {"label": "section_header", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.37454223632812, "t": 301.3377685546875, "r": 258.3398742675781, "b": 312.59286, "coord_origin": "TOPLEFT"}, "confidence": 0.9562974572181702, "cells": [{"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance"}, {"label": "text", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9670867919922, "t": 316.8338928222656, "r": 547.24664, "b": 363.3339538574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852515459060669, "cells": [{"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:"}, {"label": "list_item", "id": 14, "page_no": 16, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.71563720703125, "t": 369.3797607421875, "r": 433.33899, "b": 379.9487609863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9577170014381409, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Help adhere to external AI regulations for audit and compliance."}, {"label": "list_item", "id": 15, "page_no": 16, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.65516662597656, "t": 386.6414794921875, "r": 465.02979000000005, "b": 397.0399169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9534773826599121, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convert external AI regulations into policies for automatic enforcement."}, {"label": "list_item", "id": 16, "page_no": 16, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.6472930908203, "t": 403.3809509277344, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9609959721565247, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for compliance status across policies and regulations."}, {"label": "text", "id": 17, "page_no": 16, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.04916381835938, "t": 425.9317932128906, "r": 547.25159, "b": 472.63140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": [{"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}]}, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways:"}, {"label": "list_item", "id": 18, "page_no": 16, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.6191864013672, "t": 478.54052734375, "r": 526.84161, "b": 500.71951, "coord_origin": "TOPLEFT"}, "confidence": 0.9704018831253052, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z."}, {"label": "list_item", "id": 19, "page_no": 16, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.48377990722656, "t": 507.9300537109375, "r": 541.80554, "b": 566.3822631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9851728677749634, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86."}, {"label": "text", "id": 20, "page_no": 16, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.42056274414062, "t": 577.5960693359375, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}, "confidence": 0.9513794779777527, "cells": [{"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution."}, {"label": "footnote", "id": 21, "page_no": 16, "cluster": {"id": 21, "label": "footnote", "bbox": {"l": 136.24427795410156, "t": 725.0267333984375, "r": 418.4429931640625, "b": 735.0806274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9410406947135925, "cells": [{"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance"}], "body": [{"label": "section_header", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.3389434814453, "t": 70.3511962890625, "r": 249.09483337402344, "b": 81.77921295166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9597545266151428, "cells": [{"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance"}, {"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.980224609375, "t": 85.47271728515625, "r": 544.04358, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9820835590362549, "cells": [{"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements:"}, {"label": "list_item", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.69290161132812, "t": 126.65188598632812, "r": 517.36163, "b": 137.11279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9599407315254211, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle."}, {"label": "list_item", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.61203002929688, "t": 144.06478881835938, "r": 428.48267, "b": 154.2803192138672, "coord_origin": "TOPLEFT"}, "confidence": 0.9574074745178223, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate the capture of model metadata for report generation."}, {"label": "list_item", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6266632080078, "t": 160.60958862304688, "r": 352.83337, "b": 170.9593963623047, "coord_origin": "TOPLEFT"}, "confidence": 0.9567543864250183, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Drive transparent and explainable AI at scale."}, {"label": "list_item", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.69007873535156, "t": 177.45838928222656, "r": 531.14728, "b": 187.81533813476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9560735821723938, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging."}, {"label": "section_header", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.56716918945312, "t": 200.49346923828125, "r": 231.8074951171875, "b": 211.7656707763672, "coord_origin": "TOPLEFT"}, "confidence": 0.9554390907287598, "cells": [{"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management"}, {"label": "text", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.1630859375, "t": 216.0500030517578, "r": 544.07233, "b": 237.92694091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9777550101280212, "cells": [{"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale:"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6591033935547, "t": 244.775146484375, "r": 497.78207, "b": 254.89271545410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9544404745101929, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate facts and workflow management to comply with business standards."}, {"label": "list_item", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6646270751953, "t": 261.35205078125, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9548507332801819, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for clear and concise customizable results."}, {"label": "list_item", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.5814971923828, "t": 278.5577087402344, "r": 440.54816000000005, "b": 288.8544616699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9628311991691589, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enhanced collaboration across multiple regions and geographies."}, {"label": "section_header", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.37454223632812, "t": 301.3377685546875, "r": 258.3398742675781, "b": 312.59286, "coord_origin": "TOPLEFT"}, "confidence": 0.9562974572181702, "cells": [{"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance"}, {"label": "text", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9670867919922, "t": 316.8338928222656, "r": 547.24664, "b": 363.3339538574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852515459060669, "cells": [{"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:"}, {"label": "list_item", "id": 14, "page_no": 16, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.71563720703125, "t": 369.3797607421875, "r": 433.33899, "b": 379.9487609863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9577170014381409, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Help adhere to external AI regulations for audit and compliance."}, {"label": "list_item", "id": 15, "page_no": 16, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.65516662597656, "t": 386.6414794921875, "r": 465.02979000000005, "b": 397.0399169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9534773826599121, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convert external AI regulations into policies for automatic enforcement."}, {"label": "list_item", "id": 16, "page_no": 16, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.6472930908203, "t": 403.3809509277344, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9609959721565247, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for compliance status across policies and regulations."}, {"label": "text", "id": 17, "page_no": 16, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.04916381835938, "t": 425.9317932128906, "r": 547.25159, "b": 472.63140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": [{"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}]}, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways:"}, {"label": "list_item", "id": 18, "page_no": 16, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.6191864013672, "t": 478.54052734375, "r": 526.84161, "b": 500.71951, "coord_origin": "TOPLEFT"}, "confidence": 0.9704018831253052, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z."}, {"label": "list_item", "id": 19, "page_no": 16, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.48377990722656, "t": 507.9300537109375, "r": 541.80554, "b": 566.3822631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9851728677749634, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86."}, {"label": "text", "id": 20, "page_no": 16, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.42056274414062, "t": 577.5960693359375, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}, "confidence": 0.9513794779777527, "cells": [{"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution."}, {"label": "footnote", "id": 21, "page_no": 16, "cluster": {"id": 21, "label": "footnote", "bbox": {"l": 136.24427795410156, "t": 725.0267333984375, "r": 418.4429931640625, "b": 735.0806274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9410406947135925, "cells": [{"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.963623046875, "t": 754.3152465820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105063676834106, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.45965576171875, "t": 754.4435424804688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9134598970413208, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.34640502929688, "t": 754.726318359375, "r": 267.0744, "b": 764.1643676757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9585385322570801, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.34585571289062, "t": 293.41015625, "r": 295.9040222167969, "b": 302.8072509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9478130340576172, "cells": [{"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.1533203125, "t": 315.34637451171875, "r": 438.01648, "b": 325.61328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8973822593688965, "cells": [{"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 331.922119140625, "r": 541.70392, "b": 354.27032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9647595286369324, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.25994873046875, "t": 668.81396484375, "r": 279.38360595703125, "b": 678.0313110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9575855135917664, "cells": [{"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.88758850097656, "t": 368.6678771972656, "r": 547.6134033203125, "b": 666.1146240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861761927604675, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.32939147949219, "t": 77.701416015625, "r": 547.455810546875, "b": 290.7998352050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9852413535118103, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45965576171875, "t": 754.4435424804688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9134598970413208, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34640502929688, "t": 754.726318359375, "r": 267.0744, "b": 764.1643676757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9585385322570801, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "caption", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.34585571289062, "t": 293.41015625, "r": 295.9040222167969, "b": 302.8072509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9478130340576172, "cells": [{"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 Remote AI governance solution end-to-end flow"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1533203125, "t": 315.34637451171875, "r": 438.01648, "b": 325.61328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8973822593688965, "cells": [{"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}]}, "text": "To achieve end-to-end AI governance, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 331.922119140625, "r": 541.70392, "b": 354.27032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9647595286369324, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10."}, {"label": "caption", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.25994873046875, "t": 668.81396484375, "r": 279.38360595703125, "b": 678.0313110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9575855135917664, "cells": [{"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 10 Creating a model entry in IBM OpenPages"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.88758850097656, "t": 368.6678771972656, "r": 547.6134033203125, "b": 666.1146240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861761927604675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.32939147949219, "t": 77.701416015625, "r": 547.455810546875, "b": 290.7998352050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9852413535118103, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.34585571289062, "t": 293.41015625, "r": 295.9040222167969, "b": 302.8072509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9478130340576172, "cells": [{"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 Remote AI governance solution end-to-end flow"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1533203125, "t": 315.34637451171875, "r": 438.01648, "b": 325.61328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8973822593688965, "cells": [{"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}]}, "text": "To achieve end-to-end AI governance, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 331.922119140625, "r": 541.70392, "b": 354.27032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9647595286369324, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10."}, {"label": "caption", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.25994873046875, "t": 668.81396484375, "r": 279.38360595703125, "b": 678.0313110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9575855135917664, "cells": [{"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 10 Creating a model entry in IBM OpenPages"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.88758850097656, "t": 368.6678771972656, "r": 547.6134033203125, "b": 666.1146240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861761927604675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.32939147949219, "t": 77.701416015625, "r": 547.455810546875, "b": 290.7998352050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9852413535118103, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45965576171875, "t": 754.4435424804688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9134598970413208, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34640502929688, "t": 754.726318359375, "r": 267.0744, "b": 764.1643676757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9585385322570801, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 18, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.8695068359375, "t": 754.4427490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9015737175941467, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "list_item", "bbox": {"l": 135.98834228515625, "t": 70.76612854003906, "r": 542.91144, "b": 105.02376556396484, "coord_origin": "TOPLEFT"}, "confidence": 0.9786083102226257, "cells": [{"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.27749633789062, "t": 416.1407165527344, "r": 290.4153137207031, "b": 425.51422119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.956462562084198, "cells": [{"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.21717834472656, "t": 438.00299072265625, "r": 547.26868, "b": 460.15716552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9648804664611816, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 64.3975601196289, "t": 726.088623046875, "r": 351.1659851074219, "b": 735.51611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9549134373664856, "cells": [{"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 63.96794891357422, "t": 119.27977752685547, "r": 547.4464111328125, "b": 412.66949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9853487610816956, "cells": []}, {"id": 6, "label": "picture", "bbox": {"l": 64.33274841308594, "t": 473.3788757324219, "r": 547.9761962890625, "b": 723.4976196289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9851948618888855, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8695068359375, "t": 754.4427490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9015737175941467, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}, {"label": "list_item", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "list_item", "bbox": {"l": 135.98834228515625, "t": 70.76612854003906, "r": 542.91144, "b": 105.02376556396484, "coord_origin": "TOPLEFT"}, "confidence": 0.9786083102226257, "cells": [{"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11."}, {"label": "caption", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.27749633789062, "t": 416.1407165527344, "r": 290.4153137207031, "b": 425.51422119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.956462562084198, "cells": [{"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 11 Training an AI model by using Watson Studio"}, {"label": "list_item", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.21717834472656, "t": 438.00299072265625, "r": 547.26868, "b": 460.15716552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9648804664611816, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}]}, "text": "3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12."}, {"label": "caption", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.3975601196289, "t": 726.088623046875, "r": 351.1659851074219, "b": 735.51611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9549134373664856, "cells": [{"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data"}, {"label": "picture", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.96794891357422, "t": 119.27977752685547, "r": 547.4464111328125, "b": 412.66949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9853487610816956, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 64.33274841308594, "t": 473.3788757324219, "r": 547.9761962890625, "b": 723.4976196289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9851948618888855, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "list_item", "bbox": {"l": 135.98834228515625, "t": 70.76612854003906, "r": 542.91144, "b": 105.02376556396484, "coord_origin": "TOPLEFT"}, "confidence": 0.9786083102226257, "cells": [{"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11."}, {"label": "caption", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.27749633789062, "t": 416.1407165527344, "r": 290.4153137207031, "b": 425.51422119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.956462562084198, "cells": [{"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 11 Training an AI model by using Watson Studio"}, {"label": "list_item", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.21717834472656, "t": 438.00299072265625, "r": 547.26868, "b": 460.15716552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9648804664611816, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}]}, "text": "3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12."}, {"label": "caption", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.3975601196289, "t": 726.088623046875, "r": 351.1659851074219, "b": 735.51611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9549134373664856, "cells": [{"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data"}, {"label": "picture", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.96794891357422, "t": 119.27977752685547, "r": 547.4464111328125, "b": 412.66949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9853487610816956, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 64.33274841308594, "t": 473.3788757324219, "r": 547.9761962890625, "b": 723.4976196289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9851948618888855, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8695068359375, "t": 754.4427490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9015737175941467, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}]}}, {"page_no": 19, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.46235656738281, "t": 754.4052734375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125085473060608, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31233978271484, "t": 754.6796875, "r": 267.0744, "b": 764.2430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9569898843765259, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.78439331054688, "t": 70.60037231445312, "r": 547.24561, "b": 117.01048278808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9820504188537598, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.2765350341797, "t": 388.18072509765625, "r": 242.76724243164062, "b": 397.4988708496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9542616605758667, "cells": [{"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 150.45053100585938, "t": 409.876708984375, "r": 547.29028, "b": 432.26702880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414600729942322, "cells": [{"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.26177978515625, "t": 710.1182861328125, "r": 187.44825744628906, "b": 719.7200927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9529473781585693, "cells": [{"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.07406616210938, "t": 130.84774780273438, "r": 533.5489501953125, "b": 384.489013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865854978561401, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.0412368774414, "t": 445.4599609375, "r": 547.8551635742188, "b": 707.6512451171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9851176738739014, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46235656738281, "t": 754.4052734375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125085473060608, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31233978271484, "t": 754.6796875, "r": 267.0744, "b": 764.2430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9569898843765259, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "list_item", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78439331054688, "t": 70.60037231445312, "r": 547.24561, "b": 117.01048278808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9820504188537598, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform."}, {"label": "caption", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2765350341797, "t": 388.18072509765625, "r": 242.76724243164062, "b": 397.4988708496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9542616605758667, "cells": [{"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 13 External model"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.45053100585938, "t": 409.876708984375, "r": 547.29028, "b": 432.26702880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414600729942322, "cells": [{"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}]}, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages."}, {"label": "caption", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.26177978515625, "t": 710.1182861328125, "r": 187.44825744628906, "b": 719.7200927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9529473781585693, "cells": [{"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 14 Tracking the model"}, {"label": "picture", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.07406616210938, "t": 130.84774780273438, "r": 533.5489501953125, "b": 384.489013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865854978561401, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.0412368774414, "t": 445.4599609375, "r": 547.8551635742188, "b": 707.6512451171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9851176738739014, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78439331054688, "t": 70.60037231445312, "r": 547.24561, "b": 117.01048278808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9820504188537598, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform."}, {"label": "caption", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2765350341797, "t": 388.18072509765625, "r": 242.76724243164062, "b": 397.4988708496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9542616605758667, "cells": [{"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 13 External model"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.45053100585938, "t": 409.876708984375, "r": 547.29028, "b": 432.26702880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414600729942322, "cells": [{"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}]}, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages."}, {"label": "caption", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.26177978515625, "t": 710.1182861328125, "r": 187.44825744628906, "b": 719.7200927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9529473781585693, "cells": [{"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 14 Tracking the model"}, {"label": "picture", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.07406616210938, "t": 130.84774780273438, "r": 533.5489501953125, "b": 384.489013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865854978561401, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.0412368774414, "t": 445.4599609375, "r": 547.8551635742188, "b": 707.6512451171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9851176738739014, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46235656738281, "t": 754.4052734375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125085473060608, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31233978271484, "t": 754.6796875, "r": 267.0744, "b": 764.2430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9569898843765259, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 20, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.8822631835938, "t": 754.3675537109375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9091770052909851, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 150.36676025390625, "t": 70.72309875488281, "r": 547.22223, "b": 92.90152740478516, "coord_origin": "TOPLEFT"}, "confidence": 0.8821508288383484, "cells": [{"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.23995208740234, "t": 414.707763671875, "r": 450.36871337890625, "b": 423.87420654296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9387805461883545, "cells": [{"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "picture", "bbox": {"l": 64.23773956298828, "t": 107.1172103881836, "r": 547.417236328125, "b": 411.15496826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9859113693237305, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8822631835938, "t": 754.3675537109375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9091770052909851, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "text", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "text", "bbox": {"l": 150.36676025390625, "t": 70.72309875488281, "r": 547.22223, "b": 92.90152740478516, "coord_origin": "TOPLEFT"}, "confidence": 0.8821508288383484, "cells": [{"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15."}, {"label": "caption", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.23995208740234, "t": 414.707763671875, "r": 450.36871337890625, "b": 423.87420654296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9387805461883545, "cells": [{"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform"}, {"label": "picture", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.23773956298828, "t": 107.1172103881836, "r": 547.417236328125, "b": 411.15496826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9859113693237305, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "text", "bbox": {"l": 150.36676025390625, "t": 70.72309875488281, "r": 547.22223, "b": 92.90152740478516, "coord_origin": "TOPLEFT"}, "confidence": 0.8821508288383484, "cells": [{"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15."}, {"label": "caption", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.23995208740234, "t": 414.707763671875, "r": 450.36871337890625, "b": 423.87420654296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9387805461883545, "cells": [{"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform"}, {"label": "picture", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.23773956298828, "t": 107.1172103881836, "r": 547.417236328125, "b": 411.15496826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9859113693237305, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8822631835938, "t": 754.3675537109375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9091770052909851, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 21, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.867469787597656, "t": 754.3300170898438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187637567520142, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32005310058594, "t": 754.70068359375, "r": 267.0744, "b": 764.1736450195312, "coord_origin": "TOPLEFT"}, "confidence": 0.957935094833374, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.09112548828125, "t": 70.54534149169922, "r": 525.69312, "b": 93.12995147705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9633587598800659, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.40975189208984, "t": 384.0537414550781, "r": 295.9855651855469, "b": 393.44476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950371503829956, "cells": [{"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.78622436523438, "t": 405.9812316894531, "r": 547.32935, "b": 452.30450439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535754323005676, "cells": [{"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 63.799659729003906, "t": 107.32193756103516, "r": 547.7122192382812, "b": 381.23724365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9833127856254578, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.867469787597656, "t": 754.3300170898438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187637567520142, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32005310058594, "t": 754.70068359375, "r": 267.0744, "b": 764.1736450195312, "coord_origin": "TOPLEFT"}, "confidence": 0.957935094833374, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "list_item", "id": 2, "page_no": 21, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.09112548828125, "t": 70.54534149169922, "r": 525.69312, "b": 93.12995147705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9633587598800659, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16."}, {"label": "caption", "id": 3, "page_no": 21, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.40975189208984, "t": 384.0537414550781, "r": 295.9855651855469, "b": 393.44476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950371503829956, "cells": [{"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 16 Creating an external model on an x86 platform"}, {"label": "text", "id": 4, "page_no": 21, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78622436523438, "t": 405.9812316894531, "r": 547.32935, "b": 452.30450439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535754323005676, "cells": [{"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}]}, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21."}, {"label": "picture", "id": 5, "page_no": 21, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.799659729003906, "t": 107.32193756103516, "r": 547.7122192382812, "b": 381.23724365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9833127856254578, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 21, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.09112548828125, "t": 70.54534149169922, "r": 525.69312, "b": 93.12995147705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9633587598800659, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16."}, {"label": "caption", "id": 3, "page_no": 21, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.40975189208984, "t": 384.0537414550781, "r": 295.9855651855469, "b": 393.44476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950371503829956, "cells": [{"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 16 Creating an external model on an x86 platform"}, {"label": "text", "id": 4, "page_no": 21, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78622436523438, "t": 405.9812316894531, "r": 547.32935, "b": 452.30450439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535754323005676, "cells": [{"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}]}, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21."}, {"label": "picture", "id": 5, "page_no": 21, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.799659729003906, "t": 107.32193756103516, "r": 547.7122192382812, "b": 381.23724365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9833127856254578, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.867469787597656, "t": 754.3300170898438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187637567520142, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32005310058594, "t": 754.70068359375, "r": 267.0744, "b": 764.1736450195312, "coord_origin": "TOPLEFT"}, "confidence": 0.957935094833374, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 22, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.4277954101562, "t": 754.2350463867188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9060306549072266, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.26493835449219, "t": 353.3095397949219, "r": 386.60101318359375, "b": 362.7451477050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9381591081619263, "cells": [{"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.85134887695312, "t": 375.21990966796875, "r": 547.21674, "b": 433.3600769042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9801287055015564, "cells": [{"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.34110260009766, "t": 724.7535400390625, "r": 507.7935485839844, "b": 734.0853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9460791945457458, "cells": [{"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 64.15648651123047, "t": 447.1334533691406, "r": 547.9522705078125, "b": 721.9699096679688, "coord_origin": "TOPLEFT"}, "confidence": 0.9854127764701843, "cells": []}, {"id": 5, "label": "picture", "bbox": {"l": 63.62750244140625, "t": 77.65582275390625, "r": 547.6529541015625, "b": 350.53533935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835888147354126, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4277954101562, "t": 754.2350463867188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9060306549072266, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}, {"label": "caption", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493835449219, "t": 353.3095397949219, "r": 386.60101318359375, "b": 362.7451477050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9381591081619263, "cells": [{"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model"}, {"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.85134887695312, "t": 375.21990966796875, "r": 547.21674, "b": 433.3600769042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9801287055015564, "cells": [{"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}]}, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale."}, {"label": "caption", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.34110260009766, "t": 724.7535400390625, "r": 507.7935485839844, "b": 734.0853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9460791945457458, "cells": [{"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale"}, {"label": "picture", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.15648651123047, "t": 447.1334533691406, "r": 547.9522705078125, "b": 721.9699096679688, "coord_origin": "TOPLEFT"}, "confidence": 0.9854127764701843, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.62750244140625, "t": 77.65582275390625, "r": 547.6529541015625, "b": 350.53533935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835888147354126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493835449219, "t": 353.3095397949219, "r": 386.60101318359375, "b": 362.7451477050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9381591081619263, "cells": [{"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model"}, {"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.85134887695312, "t": 375.21990966796875, "r": 547.21674, "b": 433.3600769042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9801287055015564, "cells": [{"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}]}, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale."}, {"label": "caption", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.34110260009766, "t": 724.7535400390625, "r": 507.7935485839844, "b": 734.0853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9460791945457458, "cells": [{"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale"}, {"label": "picture", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.15648651123047, "t": 447.1334533691406, "r": 547.9522705078125, "b": 721.9699096679688, "coord_origin": "TOPLEFT"}, "confidence": 0.9854127764701843, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.62750244140625, "t": 77.65582275390625, "r": 547.6529541015625, "b": 350.53533935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835888147354126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4277954101562, "t": 754.2350463867188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9060306549072266, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}]}}, {"page_no": 23, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85818862915039, "t": 754.4114990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204315543174744, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.21298217773438, "t": 754.78466796875, "r": 267.0744, "b": 764.0928344726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9566571712493896, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 70.24270629882812, "r": 389.5157470703125, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9576336145401001, "cells": [{"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.07400512695312, "t": 102.76129150390625, "r": 547.22473, "b": 136.72068786621094, "coord_origin": "TOPLEFT"}, "confidence": 0.985734224319458, "cells": [{"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.54896545410156, "t": 156.48988342285156, "r": 186.7186, "b": 169.83836364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.964301347732544, "cells": [{"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.15374755859375, "t": 182.6127166748047, "r": 547.29553, "b": 228.91392517089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9875076413154602, "cells": [{"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.6235122680664, "t": 248.58290100097656, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9595711827278137, "cells": [{"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.9077606201172, "t": 274.71612548828125, "r": 547.26355, "b": 356.72061, "coord_origin": "TOPLEFT"}, "confidence": 0.9880195260047913, "cells": [{"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.04486083984375, "t": 368.8188781738281, "r": 547.14716, "b": 402.8493957519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9847903847694397, "cells": [{"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.09634399414062, "t": 414.7832336425781, "r": 547.20087, "b": 461.024658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9877332448959351, "cells": [{"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85818862915039, "t": 754.4114990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204315543174744, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21298217773438, "t": 754.78466796875, "r": 267.0744, "b": 764.0928344726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9566571712493896, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 70.24270629882812, "r": 389.5157470703125, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9576336145401001, "cells": [{"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 2: Credit default risk assessment"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.07400512695312, "t": 102.76129150390625, "r": 547.22473, "b": 136.72068786621094, "coord_origin": "TOPLEFT"}, "confidence": 0.985734224319458, "cells": [{"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations."}, {"label": "section_header", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.54896545410156, "t": 156.48988342285156, "r": 186.7186, "b": 169.83836364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.964301347732544, "cells": [{"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.15374755859375, "t": 182.6127166748047, "r": 547.29553, "b": 228.91392517089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9875076413154602, "cells": [{"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood of default, but that is not an efficient method for judgment as a business grows."}, {"label": "section_header", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.6235122680664, "t": 248.58290100097656, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9595711827278137, "cells": [{"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Predictions of credit default risk assessment"}, {"label": "text", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9077606201172, "t": 274.71612548828125, "r": 547.26355, "b": 356.72061, "coord_origin": "TOPLEFT"}, "confidence": 0.9880195260047913, "cells": [{"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}]}, "text": "In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan."}, {"label": "text", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.04486083984375, "t": 368.8188781738281, "r": 547.14716, "b": 402.8493957519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9847903847694397, "cells": [{"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk."}, {"label": "text", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09634399414062, "t": 414.7832336425781, "r": 547.20087, "b": 461.024658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9877332448959351, "cells": [{"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model."}], "body": [{"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 70.24270629882812, "r": 389.5157470703125, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9576336145401001, "cells": [{"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 2: Credit default risk assessment"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.07400512695312, "t": 102.76129150390625, "r": 547.22473, "b": 136.72068786621094, "coord_origin": "TOPLEFT"}, "confidence": 0.985734224319458, "cells": [{"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations."}, {"label": "section_header", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.54896545410156, "t": 156.48988342285156, "r": 186.7186, "b": 169.83836364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.964301347732544, "cells": [{"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.15374755859375, "t": 182.6127166748047, "r": 547.29553, "b": 228.91392517089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9875076413154602, "cells": [{"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood of default, but that is not an efficient method for judgment as a business grows."}, {"label": "section_header", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.6235122680664, "t": 248.58290100097656, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9595711827278137, "cells": [{"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Predictions of credit default risk assessment"}, {"label": "text", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9077606201172, "t": 274.71612548828125, "r": 547.26355, "b": 356.72061, "coord_origin": "TOPLEFT"}, "confidence": 0.9880195260047913, "cells": [{"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}]}, "text": "In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan."}, {"label": "text", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.04486083984375, "t": 368.8188781738281, "r": 547.14716, "b": 402.8493957519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9847903847694397, "cells": [{"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk."}, {"label": "text", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09634399414062, "t": 414.7832336425781, "r": 547.20087, "b": 461.024658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9877332448959351, "cells": [{"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85818862915039, "t": 754.4114990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204315543174744, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21298217773438, "t": 754.78466796875, "r": 267.0744, "b": 764.0928344726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9566571712493896, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 24, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.4268188476562, "t": 754.3800048828125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9180097579956055, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.25103759765625, "t": 343.4239501953125, "r": 395.7005615234375, "b": 352.6430358886719, "coord_origin": "TOPLEFT"}, "confidence": 0.945114016532898, "cells": [{"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.72901916503906, "t": 365.51513671875, "r": 547.34521, "b": 411.425048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9854235053062439, "cells": [{"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.47738647460938, "t": 423.4901123046875, "r": 545.58319, "b": 481.39813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9868801832199097, "cells": [{"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.9343719482422, "t": 493.64398193359375, "r": 528.65729, "b": 527.35919, "coord_origin": "TOPLEFT"}, "confidence": 0.9839997887611389, "cells": [{"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.85601806640625, "t": 539.41064453125, "r": 547.31055, "b": 609.6241455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9883375763893127, "cells": [{"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.7754364013672, "t": 621.3679809570312, "r": 547.23767, "b": 643.67041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.981151282787323, "cells": [{"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 64.85054016113281, "t": 77.66917419433594, "r": 545.2755126953125, "b": 340.2884826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836614727973938, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4268188476562, "t": 754.3800048828125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9180097579956055, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}, {"label": "caption", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.25103759765625, "t": 343.4239501953125, "r": 395.7005615234375, "b": 352.6430358886719, "coord_origin": "TOPLEFT"}, "confidence": 0.945114016532898, "cells": [{"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z"}, {"label": "text", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.72901916503906, "t": 365.51513671875, "r": 547.34521, "b": 411.425048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9854235053062439, "cells": [{"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import."}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.47738647460938, "t": 423.4901123046875, "r": 545.58319, "b": 481.39813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9868801832199097, "cells": [{"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}]}, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9343719482422, "t": 493.64398193359375, "r": 528.65729, "b": 527.35919, "coord_origin": "TOPLEFT"}, "confidence": 0.9839997887611389, "cells": [{"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}]}, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85601806640625, "t": 539.41064453125, "r": 547.31055, "b": 609.6241455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9883375763893127, "cells": [{"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction."}, {"label": "text", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7754364013672, "t": 621.3679809570312, "r": 547.23767, "b": 643.67041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.981151282787323, "cells": [{"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}]}, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk."}, {"label": "picture", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.85054016113281, "t": 77.66917419433594, "r": 545.2755126953125, "b": 340.2884826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836614727973938, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.25103759765625, "t": 343.4239501953125, "r": 395.7005615234375, "b": 352.6430358886719, "coord_origin": "TOPLEFT"}, "confidence": 0.945114016532898, "cells": [{"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z"}, {"label": "text", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.72901916503906, "t": 365.51513671875, "r": 547.34521, "b": 411.425048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9854235053062439, "cells": [{"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import."}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.47738647460938, "t": 423.4901123046875, "r": 545.58319, "b": 481.39813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9868801832199097, "cells": [{"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}]}, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9343719482422, "t": 493.64398193359375, "r": 528.65729, "b": 527.35919, "coord_origin": "TOPLEFT"}, "confidence": 0.9839997887611389, "cells": [{"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}]}, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85601806640625, "t": 539.41064453125, "r": 547.31055, "b": 609.6241455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9883375763893127, "cells": [{"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction."}, {"label": "text", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7754364013672, "t": 621.3679809570312, "r": 547.23767, "b": 643.67041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.981151282787323, "cells": [{"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}]}, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk."}, {"label": "picture", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.85054016113281, "t": 77.66917419433594, "r": 545.2755126953125, "b": 340.2884826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836614727973938, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4268188476562, "t": 754.3800048828125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9180097579956055, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}]}}, {"page_no": 25, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.90467071533203, "t": 754.3189086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163190722465515, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28766632080078, "t": 754.7548828125, "r": 267.0744, "b": 764.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.95806485414505, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.43939208984375, "t": 70.69316101074219, "r": 489.57016, "b": 81.03749084472656, "coord_origin": "TOPLEFT"}, "confidence": 0.7741285562515259, "cells": [{"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.37335968017578, "t": 361.3172302246094, "r": 344.09613037109375, "b": 370.6873779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9477778077125549, "cells": [{"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.12535095214844, "t": 383.51470947265625, "r": 534.56866, "b": 429.55059814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9804685115814209, "cells": [{"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.19705200195312, "t": 441.5392150878906, "r": 547.21588, "b": 463.28055, "coord_origin": "TOPLEFT"}, "confidence": 0.9671667814254761, "cells": [{"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6735076904297, "t": 469.95037841796875, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}, "confidence": 0.955508291721344, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.52078247070312, "t": 487.4938659667969, "r": 445.53699, "b": 497.67242431640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9564528465270996, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.63246154785156, "t": 504.0003356933594, "r": 547.32324, "b": 526.3165893554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9790537357330322, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.62271118164062, "t": 533.3601684570312, "r": 541.78046, "b": 555.25917, "coord_origin": "TOPLEFT"}, "confidence": 0.970277726650238, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.50205993652344, "t": 561.84619140625, "r": 531.80676, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9821013808250427, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 65.03783416748047, "t": 94.93846130371094, "r": 547.6334838867188, "b": 359.3612365722656, "coord_origin": "TOPLEFT"}, "confidence": 0.984186589717865, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.90467071533203, "t": 754.3189086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163190722465515, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28766632080078, "t": 754.7548828125, "r": 267.0744, "b": 764.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.95806485414505, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43939208984375, "t": 70.69316101074219, "r": 489.57016, "b": 81.03749084472656, "coord_origin": "TOPLEFT"}, "confidence": 0.7741285562515259, "cells": [{"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z."}, {"label": "caption", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37335968017578, "t": 361.3172302246094, "r": 344.09613037109375, "b": 370.6873779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9477778077125549, "cells": [{"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z"}, {"label": "text", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.12535095214844, "t": 383.51470947265625, "r": 534.56866, "b": 429.55059814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9804685115814209, "cells": [{"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}]}, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint."}, {"label": "text", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.19705200195312, "t": 441.5392150878906, "r": 547.21588, "b": 463.28055, "coord_origin": "TOPLEFT"}, "confidence": 0.9671667814254761, "cells": [{"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some considerations for developing real-time AI models, such as credit risk assessment:"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6735076904297, "t": 469.95037841796875, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}, "confidence": 0.955508291721344, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A preference for in-platform run times of the model, such as faster execution results."}, {"label": "list_item", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52078247070312, "t": 487.4938659667969, "r": 445.53699, "b": 497.67242431640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9564528465270996, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Less overhead in the end-to-end flows might improve scoring time."}, {"label": "list_item", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.63246154785156, "t": 504.0003356933594, "r": 547.32324, "b": 526.3165893554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9790537357330322, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform."}, {"label": "list_item", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.62271118164062, "t": 533.3601684570312, "r": 541.78046, "b": 555.25917, "coord_origin": "TOPLEFT"}, "confidence": 0.970277726650238, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment."}, {"label": "list_item", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.50205993652344, "t": 561.84619140625, "r": 531.80676, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9821013808250427, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means."}, {"label": "picture", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 65.03783416748047, "t": 94.93846130371094, "r": 547.6334838867188, "b": 359.3612365722656, "coord_origin": "TOPLEFT"}, "confidence": 0.984186589717865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43939208984375, "t": 70.69316101074219, "r": 489.57016, "b": 81.03749084472656, "coord_origin": "TOPLEFT"}, "confidence": 0.7741285562515259, "cells": [{"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z."}, {"label": "caption", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37335968017578, "t": 361.3172302246094, "r": 344.09613037109375, "b": 370.6873779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9477778077125549, "cells": [{"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z"}, {"label": "text", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.12535095214844, "t": 383.51470947265625, "r": 534.56866, "b": 429.55059814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9804685115814209, "cells": [{"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}]}, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint."}, {"label": "text", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.19705200195312, "t": 441.5392150878906, "r": 547.21588, "b": 463.28055, "coord_origin": "TOPLEFT"}, "confidence": 0.9671667814254761, "cells": [{"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some considerations for developing real-time AI models, such as credit risk assessment:"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6735076904297, "t": 469.95037841796875, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}, "confidence": 0.955508291721344, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A preference for in-platform run times of the model, such as faster execution results."}, {"label": "list_item", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52078247070312, "t": 487.4938659667969, "r": 445.53699, "b": 497.67242431640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9564528465270996, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Less overhead in the end-to-end flows might improve scoring time."}, {"label": "list_item", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.63246154785156, "t": 504.0003356933594, "r": 547.32324, "b": 526.3165893554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9790537357330322, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform."}, {"label": "list_item", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.62271118164062, "t": 533.3601684570312, "r": 541.78046, "b": 555.25917, "coord_origin": "TOPLEFT"}, "confidence": 0.970277726650238, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment."}, {"label": "list_item", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.50205993652344, "t": 561.84619140625, "r": 531.80676, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9821013808250427, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means."}, {"label": "picture", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 65.03783416748047, "t": 94.93846130371094, "r": 547.6334838867188, "b": 359.3612365722656, "coord_origin": "TOPLEFT"}, "confidence": 0.984186589717865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.90467071533203, "t": 754.3189086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163190722465515, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28766632080078, "t": 754.7548828125, "r": 267.0744, "b": 764.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.95806485414505, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 26, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.565673828125, "t": 754.3200073242188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160840511322021, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 64.79078674316406, "t": 70.07665252685547, "r": 338.53796, "b": 86.30354309082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9623725414276123, "cells": [{"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.91648864746094, "t": 102.71073150634766, "r": 539.56549, "b": 161.0622100830078, "coord_origin": "TOPLEFT"}, "confidence": 0.9869711399078369, "cells": [{"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.3849868774414, "t": 180.6492462158203, "r": 179.53229, "b": 193.6511993408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9618170857429504, "cells": [{"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.17025756835938, "t": 206.79721069335938, "r": 538.43591, "b": 228.78622436523438, "coord_origin": "TOPLEFT"}, "confidence": 0.963640034198761, "cells": [{"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.63189697265625, "t": 248.53985595703125, "r": 266.07788, "b": 261.7796936035156, "coord_origin": "TOPLEFT"}, "confidence": 0.9650317430496216, "cells": [{"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.968505859375, "t": 274.7626037597656, "r": 545.69684, "b": 321.0018005371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9876250624656677, "cells": [{"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.97213745117188, "t": 332.8114318847656, "r": 544.66211, "b": 402.8791809082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9885076284408569, "cells": [{"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.8656463623047, "t": 414.916259765625, "r": 543.34729, "b": 472.69888, "coord_origin": "TOPLEFT"}, "confidence": 0.9878571033477783, "cells": [{"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.92105102539062, "t": 484.82086181640625, "r": 547.23358, "b": 530.9995727539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9847769737243652, "cells": [{"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.565673828125, "t": 754.3200073242188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160840511322021, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}, {"label": "section_header", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.79078674316406, "t": 70.07665252685547, "r": 338.53796, "b": 86.30354309082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9623725414276123, "cells": [{"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 3: Clearing and settlement"}, {"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91648864746094, "t": 102.71073150634766, "r": 539.56549, "b": 161.0622100830078, "coord_origin": "TOPLEFT"}, "confidence": 0.9869711399078369, "cells": [{"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day."}, {"label": "section_header", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3849868774414, "t": 180.6492462158203, "r": 179.53229, "b": 193.6511993408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9618170857429504, "cells": [{"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenge"}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.17025756835938, "t": 206.79721069335938, "r": 538.43591, "b": 228.78622436523438, "coord_origin": "TOPLEFT"}, "confidence": 0.963640034198761, "cells": [{"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs."}, {"label": "section_header", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.63189697265625, "t": 248.53985595703125, "r": 266.07788, "b": 261.7796936035156, "coord_origin": "TOPLEFT"}, "confidence": 0.9650317430496216, "cells": [{"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlement solution"}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.968505859375, "t": 274.7626037597656, "r": 545.69684, "b": 321.0018005371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9876250624656677, "cells": [{"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.97213745117188, "t": 332.8114318847656, "r": 544.66211, "b": 402.8791809082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9885076284408569, "cells": [{"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions."}, {"label": "text", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8656463623047, "t": 414.916259765625, "r": 543.34729, "b": 472.69888, "coord_origin": "TOPLEFT"}, "confidence": 0.9878571033477783, "cells": [{"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}]}, "text": "The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds."}, {"label": "text", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.92105102539062, "t": 484.82086181640625, "r": 547.23358, "b": 530.9995727539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9847769737243652, "cells": [{"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}]}, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint."}], "body": [{"label": "section_header", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.79078674316406, "t": 70.07665252685547, "r": 338.53796, "b": 86.30354309082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9623725414276123, "cells": [{"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 3: Clearing and settlement"}, {"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91648864746094, "t": 102.71073150634766, "r": 539.56549, "b": 161.0622100830078, "coord_origin": "TOPLEFT"}, "confidence": 0.9869711399078369, "cells": [{"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day."}, {"label": "section_header", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3849868774414, "t": 180.6492462158203, "r": 179.53229, "b": 193.6511993408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9618170857429504, "cells": [{"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenge"}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.17025756835938, "t": 206.79721069335938, "r": 538.43591, "b": 228.78622436523438, "coord_origin": "TOPLEFT"}, "confidence": 0.963640034198761, "cells": [{"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs."}, {"label": "section_header", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.63189697265625, "t": 248.53985595703125, "r": 266.07788, "b": 261.7796936035156, "coord_origin": "TOPLEFT"}, "confidence": 0.9650317430496216, "cells": [{"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlement solution"}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.968505859375, "t": 274.7626037597656, "r": 545.69684, "b": 321.0018005371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9876250624656677, "cells": [{"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.97213745117188, "t": 332.8114318847656, "r": 544.66211, "b": 402.8791809082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9885076284408569, "cells": [{"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions."}, {"label": "text", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8656463623047, "t": 414.916259765625, "r": 543.34729, "b": 472.69888, "coord_origin": "TOPLEFT"}, "confidence": 0.9878571033477783, "cells": [{"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}]}, "text": "The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds."}, {"label": "text", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.92105102539062, "t": 484.82086181640625, "r": 547.23358, "b": 530.9995727539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9847769737243652, "cells": [{"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}]}, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.565673828125, "t": 754.3200073242188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160840511322021, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}]}}, {"page_no": 27, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.89773941040039, "t": 754.3994140625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9172815680503845, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.21942138671875, "t": 754.7265625, "r": 267.0744, "b": 764.1185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9594259858131409, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.25498962402344, "t": 70.68953704833984, "r": 537.35229, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8348162174224854, "cells": [{"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17871856689453, "t": 314.66278076171875, "r": 459.9880999999999, "b": 324.0010986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9384534955024719, "cells": [{"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.43458557128906, "t": 336.796630859375, "r": 353.37115, "b": 346.91217041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.8770962953567505, "cells": [{"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.8, "t": 354.0919494628906, "r": 524.74097, "b": 376.04498291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9748183488845825, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.05679321289062, "t": 382.5753173828125, "r": 542.98376, "b": 404.78073, "coord_origin": "TOPLEFT"}, "confidence": 0.9745410680770874, "cells": [{"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.27484130859375, "t": 411.98052978515625, "r": 545.74249, "b": 446.5281066894531, "coord_origin": "TOPLEFT"}, "confidence": 0.9805867671966553, "cells": [{"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.03822326660156, "t": 452.6906433105469, "r": 468.55477999999994, "b": 463.2380676269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9558380842208862, "cells": [{"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 136.39476013183594, "t": 470.06390380859375, "r": 417.28256, "b": 480.09649658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9519129395484924, "cells": [{"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 150.49728393554688, "t": 486.6347961425781, "r": 460.12939, "b": 496.88531494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9560188055038452, "cells": [{"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.5271759033203, "t": 503.9242248535156, "r": 251.68962, "b": 514.2030639648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9418551921844482, "cells": [{"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 150.59584045410156, "t": 520.1580810546875, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}, "confidence": 0.9270838499069214, "cells": [{"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 136.3202667236328, "t": 537.8785400390625, "r": 418.50659, "b": 548.1995849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9545198678970337, "cells": [{"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 136.2103271484375, "t": 554.7404174804688, "r": 545.68579, "b": 577.0736083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9779444336891174, "cells": [{"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 136.31875610351562, "t": 583.98193359375, "r": 510.0397, "b": 606.4796752929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9764688014984131, "cells": [{"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 136.13897705078125, "t": 612.574951171875, "r": 270.12857, "b": 623.031005859375, "coord_origin": "TOPLEFT"}, "confidence": 0.946601152420044, "cells": [{"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 150.43360900878906, "t": 630.0905151367188, "r": 374.55621, "b": 640.5849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9528450965881348, "cells": [{"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 150.56649780273438, "t": 646.7203369140625, "r": 492.32922, "b": 656.7977294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529765248298645, "cells": [{"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 136.80202, "t": 664.13916015625, "r": 471.90997, "b": 674.3135986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9405826330184937, "cells": [{"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 136.80202, "t": 680.8577880859375, "r": 546.27057, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9651632308959961, "cells": [{"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 136.71322631835938, "t": 709.8871459960938, "r": 531.22009, "b": 732.1051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9538568258285522, "cells": [{"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "picture", "bbox": {"l": 64.01190948486328, "t": 107.36324310302734, "r": 542.310546875, "b": 311.54437255859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9792013168334961, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.89773941040039, "t": 754.3994140625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9172815680503845, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21942138671875, "t": 754.7265625, "r": 267.0744, "b": 764.1185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9594259858131409, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.25498962402344, "t": 70.68953704833984, "r": 537.35229, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8348162174224854, "cells": [{"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE."}, {"label": "caption", "id": 3, "page_no": 27, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17871856689453, "t": 314.66278076171875, "r": 459.9880999999999, "b": 324.0010986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9384534955024719, "cells": [{"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 27, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.43458557128906, "t": 336.796630859375, "r": 353.37115, "b": 346.91217041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.8770962953567505, "cells": [{"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the steps of the high-level process flow:"}, {"label": "list_item", "id": 5, "page_no": 27, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.8, "t": 354.0919494628906, "r": 524.74097, "b": 376.04498291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9748183488845825, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building."}, {"label": "list_item", "id": 6, "page_no": 27, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.05679321289062, "t": 382.5753173828125, "r": 542.98376, "b": 404.78073, "coord_origin": "TOPLEFT"}, "confidence": 0.9745410680770874, "cells": [{"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}]}, "text": "2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D."}, {"label": "list_item", "id": 7, "page_no": 27, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.27484130859375, "t": 411.98052978515625, "r": 545.74249, "b": 446.5281066894531, "coord_origin": "TOPLEFT"}, "confidence": 0.9805867671966553, "cells": [{"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}]}, "text": "3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository."}, {"label": "list_item", "id": 8, "page_no": 27, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.03822326660156, "t": 452.6906433105469, "r": 468.55477999999994, "b": 463.2380676269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9558380842208862, "cells": [{"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}]}, "text": "4. Deploy the saved model into a deployment space for batch deployment."}, {"label": "list_item", "id": 9, "page_no": 27, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.39476013183594, "t": 470.06390380859375, "r": 417.28256, "b": 480.09649658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9519129395484924, "cells": [{"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create a batch deployment by using any of these interfaces:"}, {"label": "list_item", "id": 10, "page_no": 27, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 150.49728393554688, "t": 486.6347961425781, "r": 460.12939, "b": 496.88531494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9560188055038452, "cells": [{"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}]}, "text": "a. Watson Studio user interface from an Analytics deployment space."}, {"label": "list_item", "id": 11, "page_no": 27, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.5271759033203, "t": 503.9242248535156, "r": 251.68962, "b": 514.2030639648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9418551921844482, "cells": [{"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}]}, "text": "b. WML Python client."}, {"label": "list_item", "id": 12, "page_no": 27, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.59584045410156, "t": 520.1580810546875, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}, "confidence": 0.9270838499069214, "cells": [{"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}]}, "text": "c. WML REST APIs."}, {"label": "list_item", "id": 13, "page_no": 27, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 136.3202667236328, "t": 537.8785400390625, "r": 418.50659, "b": 548.1995849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9545198678970337, "cells": [{"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}]}, "text": "6. A hardware configuration can be chosen for the deployment."}, {"label": "list_item", "id": 14, "page_no": 27, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.2103271484375, "t": 554.7404174804688, "r": 545.68579, "b": 577.0736083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9779444336891174, "cells": [{"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}]}, "text": "7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination."}, {"label": "list_item", "id": 15, "page_no": 27, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 136.31875610351562, "t": 583.98193359375, "r": 510.0397, "b": 606.4796752929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9764688014984131, "cells": [{"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. One way to run batch deployment to predict or score is to create and run a batch deployment job."}, {"label": "list_item", "id": 16, "page_no": 27, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.13897705078125, "t": 612.574951171875, "r": 270.12857, "b": 623.031005859375, "coord_origin": "TOPLEFT"}, "confidence": 0.946601152420044, "cells": [{"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}]}, "text": "9. Provide an input data type:"}, {"label": "list_item", "id": 17, "page_no": 27, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 150.43360900878906, "t": 630.0905151367188, "r": 374.55621, "b": 640.5849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9528450965881348, "cells": [{"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}]}, "text": "a. Inline data for entering a JSON format payload."}, {"label": "list_item", "id": 18, "page_no": 27, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 150.56649780273438, "t": 646.7203369140625, "r": 492.32922, "b": 656.7977294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529765248298645, "cells": [{"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}]}, "text": "b. Select Data asset , click Select data source , and then specify your asset."}, {"label": "list_item", "id": 19, "page_no": 27, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 136.80202, "t": 664.13916015625, "r": 471.90997, "b": 674.3135986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9405826330184937, "cells": [{"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}]}, "text": "10.The output data type can be a new output file or a connected data asset."}, {"label": "list_item", "id": 20, "page_no": 27, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 136.80202, "t": 680.8577880859375, "r": 546.27057, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9651632308959961, "cells": [{"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}]}, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run."}, {"label": "list_item", "id": 21, "page_no": 27, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 136.71322631835938, "t": 709.8871459960938, "r": 531.22009, "b": 732.1051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9538568258285522, "cells": [{"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}]}, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL."}, {"label": "picture", "id": 22, "page_no": 27, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 64.01190948486328, "t": 107.36324310302734, "r": 542.310546875, "b": 311.54437255859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9792013168334961, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.25498962402344, "t": 70.68953704833984, "r": 537.35229, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8348162174224854, "cells": [{"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE."}, {"label": "caption", "id": 3, "page_no": 27, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17871856689453, "t": 314.66278076171875, "r": 459.9880999999999, "b": 324.0010986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9384534955024719, "cells": [{"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 27, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.43458557128906, "t": 336.796630859375, "r": 353.37115, "b": 346.91217041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.8770962953567505, "cells": [{"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the steps of the high-level process flow:"}, {"label": "list_item", "id": 5, "page_no": 27, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.8, "t": 354.0919494628906, "r": 524.74097, "b": 376.04498291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9748183488845825, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building."}, {"label": "list_item", "id": 6, "page_no": 27, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.05679321289062, "t": 382.5753173828125, "r": 542.98376, "b": 404.78073, "coord_origin": "TOPLEFT"}, "confidence": 0.9745410680770874, "cells": [{"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}]}, "text": "2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D."}, {"label": "list_item", "id": 7, "page_no": 27, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.27484130859375, "t": 411.98052978515625, "r": 545.74249, "b": 446.5281066894531, "coord_origin": "TOPLEFT"}, "confidence": 0.9805867671966553, "cells": [{"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}]}, "text": "3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository."}, {"label": "list_item", "id": 8, "page_no": 27, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.03822326660156, "t": 452.6906433105469, "r": 468.55477999999994, "b": 463.2380676269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9558380842208862, "cells": [{"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}]}, "text": "4. Deploy the saved model into a deployment space for batch deployment."}, {"label": "list_item", "id": 9, "page_no": 27, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.39476013183594, "t": 470.06390380859375, "r": 417.28256, "b": 480.09649658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9519129395484924, "cells": [{"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create a batch deployment by using any of these interfaces:"}, {"label": "list_item", "id": 10, "page_no": 27, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 150.49728393554688, "t": 486.6347961425781, "r": 460.12939, "b": 496.88531494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9560188055038452, "cells": [{"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}]}, "text": "a. Watson Studio user interface from an Analytics deployment space."}, {"label": "list_item", "id": 11, "page_no": 27, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.5271759033203, "t": 503.9242248535156, "r": 251.68962, "b": 514.2030639648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9418551921844482, "cells": [{"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}]}, "text": "b. WML Python client."}, {"label": "list_item", "id": 12, "page_no": 27, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.59584045410156, "t": 520.1580810546875, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}, "confidence": 0.9270838499069214, "cells": [{"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}]}, "text": "c. WML REST APIs."}, {"label": "list_item", "id": 13, "page_no": 27, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 136.3202667236328, "t": 537.8785400390625, "r": 418.50659, "b": 548.1995849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9545198678970337, "cells": [{"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}]}, "text": "6. A hardware configuration can be chosen for the deployment."}, {"label": "list_item", "id": 14, "page_no": 27, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.2103271484375, "t": 554.7404174804688, "r": 545.68579, "b": 577.0736083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9779444336891174, "cells": [{"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}]}, "text": "7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination."}, {"label": "list_item", "id": 15, "page_no": 27, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 136.31875610351562, "t": 583.98193359375, "r": 510.0397, "b": 606.4796752929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9764688014984131, "cells": [{"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. One way to run batch deployment to predict or score is to create and run a batch deployment job."}, {"label": "list_item", "id": 16, "page_no": 27, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.13897705078125, "t": 612.574951171875, "r": 270.12857, "b": 623.031005859375, "coord_origin": "TOPLEFT"}, "confidence": 0.946601152420044, "cells": [{"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}]}, "text": "9. Provide an input data type:"}, {"label": "list_item", "id": 17, "page_no": 27, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 150.43360900878906, "t": 630.0905151367188, "r": 374.55621, "b": 640.5849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9528450965881348, "cells": [{"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}]}, "text": "a. Inline data for entering a JSON format payload."}, {"label": "list_item", "id": 18, "page_no": 27, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 150.56649780273438, "t": 646.7203369140625, "r": 492.32922, "b": 656.7977294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529765248298645, "cells": [{"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}]}, "text": "b. Select Data asset , click Select data source , and then specify your asset."}, {"label": "list_item", "id": 19, "page_no": 27, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 136.80202, "t": 664.13916015625, "r": 471.90997, "b": 674.3135986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9405826330184937, "cells": [{"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}]}, "text": "10.The output data type can be a new output file or a connected data asset."}, {"label": "list_item", "id": 20, "page_no": 27, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 136.80202, "t": 680.8577880859375, "r": 546.27057, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9651632308959961, "cells": [{"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}]}, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run."}, {"label": "list_item", "id": 21, "page_no": 27, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 136.71322631835938, "t": 709.8871459960938, "r": 531.22009, "b": 732.1051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9538568258285522, "cells": [{"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}]}, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL."}, {"label": "picture", "id": 22, "page_no": 27, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 64.01190948486328, "t": 107.36324310302734, "r": 542.310546875, "b": 311.54437255859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9792013168334961, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.89773941040039, "t": 754.3994140625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9172815680503845, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21942138671875, "t": 754.7265625, "r": 267.0744, "b": 764.1185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9594259858131409, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 28, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.5003051757812, "t": 754.198486328125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9135285019874573, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 64.4560546875, "t": 70.49922180175781, "r": 124.18352508544922, "b": 83.58580017089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9539816975593567, "cells": [{"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.6417999267578, "t": 96.69087219238281, "r": 532.96588, "b": 131.15280151367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9826104044914246, "cells": [{"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.6079559326172, "t": 137.87742614746094, "r": 374.51035, "b": 148.40980529785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9520530700683594, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.4309844970703, "t": 154.66566467285156, "r": 508.50623, "b": 165.0898895263672, "coord_origin": "TOPLEFT"}, "confidence": 0.9581583142280579, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6011199951172, "t": 171.30601501464844, "r": 533.53381, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9762634634971619, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.69216918945312, "t": 220.6259307861328, "r": 482.53705, "b": 237.16929626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9682862162590027, "cells": [{"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.27346801757812, "t": 253.316650390625, "r": 545.72473, "b": 275.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9791228771209717, "cells": [{"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.0217742919922, "t": 287.9417419433594, "r": 547.27057, "b": 333.9791259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871094226837158, "cells": [{"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.3080596923828, "t": 345.2879943847656, "r": 525.16229, "b": 367.7480773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9762709140777588, "cells": [{"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 64.39527893066406, "t": 621.308349609375, "r": 244.8438262939453, "b": 630.6195678710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9493957161903381, "cells": [{"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.10833740234375, "t": 643.45068359375, "r": 547.25574, "b": 725.360573, "coord_origin": "TOPLEFT"}, "confidence": 0.9856446981430054, "cells": [{"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "picture", "bbox": {"l": 63.826560974121094, "t": 381.7112731933594, "r": 539.9069213867188, "b": 618.51806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9848758578300476, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5003051757812, "t": 754.198486328125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9135285019874573, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "section_header", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.4560546875, "t": 70.49922180175781, "r": 124.18352508544922, "b": 83.58580017089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9539816975593567, "cells": [{"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6417999267578, "t": 96.69087219238281, "r": 532.96588, "b": 131.15280151367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9826104044914246, "cells": [{"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages:"}, {"label": "list_item", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6079559326172, "t": 137.87742614746094, "r": 374.51035, "b": 148.40980529785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9520530700683594, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No Impact to SLAs and the batch process window."}, {"label": "list_item", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.4309844970703, "t": 154.66566467285156, "r": 508.50623, "b": 165.0898895263672, "coord_origin": "TOPLEFT"}, "confidence": 0.9581583142280579, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs."}, {"label": "list_item", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6011199951172, "t": 171.30601501464844, "r": 533.53381, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9762634634971619, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring."}, {"label": "section_header", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.69216918945312, "t": 220.6259307861328, "r": 482.53705, "b": 237.16929626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9682862162590027, "cells": [{"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 4: Remaining Useful Life of an aircraft engine"}, {"label": "text", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.27346801757812, "t": 253.316650390625, "r": 545.72473, "b": 275.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9791228771209717, "cells": [{"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems."}, {"label": "text", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0217742919922, "t": 287.9417419433594, "r": 547.27057, "b": 333.9791259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871094226837158, "cells": [{"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}]}, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime."}, {"label": "text", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.3080596923828, "t": 345.2879943847656, "r": 525.16229, "b": 367.7480773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9762709140777588, "cells": [{"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z."}, {"label": "caption", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.39527893066406, "t": 621.308349609375, "r": 244.8438262939453, "b": 630.6195678710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9493957161903381, "cells": [{"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 Inferencing architecture on IBM Z"}, {"label": "text", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.10833740234375, "t": 643.45068359375, "r": 547.25574, "b": 725.360573, "coord_origin": "TOPLEFT"}, "confidence": 0.9856446981430054, "cells": [{"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}]}, "text": "Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model\u2019s life."}, {"label": "picture", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 63.826560974121094, "t": 381.7112731933594, "r": 539.9069213867188, "b": 618.51806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9848758578300476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.4560546875, "t": 70.49922180175781, "r": 124.18352508544922, "b": 83.58580017089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9539816975593567, "cells": [{"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6417999267578, "t": 96.69087219238281, "r": 532.96588, "b": 131.15280151367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9826104044914246, "cells": [{"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages:"}, {"label": "list_item", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6079559326172, "t": 137.87742614746094, "r": 374.51035, "b": 148.40980529785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9520530700683594, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No Impact to SLAs and the batch process window."}, {"label": "list_item", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.4309844970703, "t": 154.66566467285156, "r": 508.50623, "b": 165.0898895263672, "coord_origin": "TOPLEFT"}, "confidence": 0.9581583142280579, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs."}, {"label": "list_item", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6011199951172, "t": 171.30601501464844, "r": 533.53381, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9762634634971619, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring."}, {"label": "section_header", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.69216918945312, "t": 220.6259307861328, "r": 482.53705, "b": 237.16929626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9682862162590027, "cells": [{"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 4: Remaining Useful Life of an aircraft engine"}, {"label": "text", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.27346801757812, "t": 253.316650390625, "r": 545.72473, "b": 275.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9791228771209717, "cells": [{"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems."}, {"label": "text", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0217742919922, "t": 287.9417419433594, "r": 547.27057, "b": 333.9791259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871094226837158, "cells": [{"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}]}, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime."}, {"label": "text", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.3080596923828, "t": 345.2879943847656, "r": 525.16229, "b": 367.7480773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9762709140777588, "cells": [{"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z."}, {"label": "caption", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.39527893066406, "t": 621.308349609375, "r": 244.8438262939453, "b": 630.6195678710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9493957161903381, "cells": [{"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 Inferencing architecture on IBM Z"}, {"label": "text", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.10833740234375, "t": 643.45068359375, "r": 547.25574, "b": 725.360573, "coord_origin": "TOPLEFT"}, "confidence": 0.9856446981430054, "cells": [{"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}]}, "text": "Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model\u2019s life."}, {"label": "picture", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 63.826560974121094, "t": 381.7112731933594, "r": 539.9069213867188, "b": 618.51806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9848758578300476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5003051757812, "t": 754.198486328125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9135285019874573, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 29, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85002517700195, "t": 754.3954467773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155879020690918, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.15624237060547, "t": 754.7210083007812, "r": 267.0744, "b": 764.1427612304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9536111354827881, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.91494750976562, "t": 70.69358825683594, "r": 547.28241, "b": 176.9809112548828, "coord_origin": "TOPLEFT"}, "confidence": 0.9882624745368958, "cells": [{"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.84686279296875, "t": 188.6097869873047, "r": 545.17706, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9868529438972473, "cells": [{"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.91741943359375, "t": 246.65235900878906, "r": 547.21289, "b": 281.0306701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9854286313056946, "cells": [{"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.88528442382812, "t": 292.6196594238281, "r": 547.30829, "b": 339.16351318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9867450594902039, "cells": [{"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.9976348876953, "t": 350.63482666015625, "r": 547.28247, "b": 420.8690185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9884775280952454, "cells": [{"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7574462890625, "t": 432.6813049316406, "r": 547.32422, "b": 478.8412170410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9873866438865662, "cells": [{"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.12620544433594, "t": 490.4873046875, "r": 547.27454, "b": 537.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881239533424377, "cells": [{"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.40904235839844, "t": 548.6136474609375, "r": 521.20435, "b": 570.9915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9769964814186096, "cells": [{"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85002517700195, "t": 754.3954467773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155879020690918, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.15624237060547, "t": 754.7210083007812, "r": 267.0744, "b": 764.1427612304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9536111354827881, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91494750976562, "t": 70.69358825683594, "r": 547.28241, "b": 176.9809112548828, "coord_origin": "TOPLEFT"}, "confidence": 0.9882624745368958, "cells": [{"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see \u201cUse case 3: Clearing and settlement\u201d on page 25."}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84686279296875, "t": 188.6097869873047, "r": 545.17706, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9868529438972473, "cells": [{"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.91741943359375, "t": 246.65235900878906, "r": 547.21289, "b": 281.0306701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9854286313056946, "cells": [{"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}]}, "text": "We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works."}, {"label": "text", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88528442382812, "t": 292.6196594238281, "r": 547.30829, "b": 339.16351318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9867450594902039, "cells": [{"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}]}, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator."}, {"label": "text", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9976348876953, "t": 350.63482666015625, "r": 547.28247, "b": 420.8690185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9884775280952454, "cells": [{"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}]}, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction."}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7574462890625, "t": 432.6813049316406, "r": 547.32422, "b": 478.8412170410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9873866438865662, "cells": [{"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}]}, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.12620544433594, "t": 490.4873046875, "r": 547.27454, "b": 537.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881239533424377, "cells": [{"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}]}, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.40904235839844, "t": 548.6136474609375, "r": 521.20435, "b": 570.9915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9769964814186096, "cells": [{"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application."}], "body": [{"label": "text", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91494750976562, "t": 70.69358825683594, "r": 547.28241, "b": 176.9809112548828, "coord_origin": "TOPLEFT"}, "confidence": 0.9882624745368958, "cells": [{"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see \u201cUse case 3: Clearing and settlement\u201d on page 25."}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84686279296875, "t": 188.6097869873047, "r": 545.17706, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9868529438972473, "cells": [{"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.91741943359375, "t": 246.65235900878906, "r": 547.21289, "b": 281.0306701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9854286313056946, "cells": [{"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}]}, "text": "We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works."}, {"label": "text", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88528442382812, "t": 292.6196594238281, "r": 547.30829, "b": 339.16351318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9867450594902039, "cells": [{"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}]}, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator."}, {"label": "text", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9976348876953, "t": 350.63482666015625, "r": 547.28247, "b": 420.8690185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9884775280952454, "cells": [{"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}]}, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction."}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7574462890625, "t": 432.6813049316406, "r": 547.32422, "b": 478.8412170410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9873866438865662, "cells": [{"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}]}, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.12620544433594, "t": 490.4873046875, "r": 547.27454, "b": 537.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881239533424377, "cells": [{"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}]}, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.40904235839844, "t": 548.6136474609375, "r": 521.20435, "b": 570.9915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9769964814186096, "cells": [{"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85002517700195, "t": 754.3954467773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155879020690918, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.15624237060547, "t": 754.7210083007812, "r": 267.0744, "b": 764.1427612304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9536111354827881, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 30, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.4804077148438, "t": 754.2535400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163533449172974, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.29751586914062, "t": 442.3620300292969, "r": 216.1868438720703, "b": 451.6481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9474461078643799, "cells": [{"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.26695251464844, "t": 464.0877685546875, "r": 501.7642200000001, "b": 485.9813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9469272494316101, "cells": [{"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.49343872070312, "t": 492.5340576171875, "r": 547.32031, "b": 526.9137573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9813073873519897, "cells": [{"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.57691955566406, "t": 534.0592041015625, "r": 491.3402699999999, "b": 544.2946166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9524359107017517, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.67471313476562, "t": 550.6901245117188, "r": 534.49988, "b": 572.9078979492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9742523431777954, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.61285400390625, "t": 579.9425659179688, "r": 547.2157, "b": 601.75977, "coord_origin": "TOPLEFT"}, "confidence": 0.9732432961463928, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.52349853515625, "t": 608.5234985351562, "r": 504.02917, "b": 631.1382446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.976965069770813, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 63.6925048828125, "t": 77.32726287841797, "r": 547.7992553710938, "b": 439.2281799316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9841210246086121, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4804077148438, "t": 754.2535400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163533449172974, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}, {"label": "caption", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.29751586914062, "t": 442.3620300292969, "r": 216.1868438720703, "b": 451.6481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9474461078643799, "cells": [{"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 In-depth architectural view"}, {"label": "text", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.26695251464844, "t": 464.0877685546875, "r": 501.7642200000001, "b": 485.9813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9469272494316101, "cells": [{"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, consider the following points while developing an AI-based predictive maintenance application:"}, {"label": "list_item", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.49343872070312, "t": 492.5340576171875, "r": 547.32031, "b": 526.9137573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9813073873519897, "cells": [{"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages."}, {"label": "list_item", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.57691955566406, "t": 534.0592041015625, "r": 491.3402699999999, "b": 544.2946166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9524359107017517, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The trustworthiness of the predicted output is important for critical use cases."}, {"label": "list_item", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.67471313476562, "t": 550.6901245117188, "r": 534.49988, "b": 572.9078979492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9742523431777954, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications."}, {"label": "list_item", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.61285400390625, "t": 579.9425659179688, "r": 547.2157, "b": 601.75977, "coord_origin": "TOPLEFT"}, "confidence": 0.9732432961463928, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available."}, {"label": "list_item", "id": 7, "page_no": 30, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52349853515625, "t": 608.5234985351562, "r": 504.02917, "b": 631.1382446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.976965069770813, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle."}, {"label": "picture", "id": 8, "page_no": 30, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.6925048828125, "t": 77.32726287841797, "r": 547.7992553710938, "b": 439.2281799316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9841210246086121, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.29751586914062, "t": 442.3620300292969, "r": 216.1868438720703, "b": 451.6481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9474461078643799, "cells": [{"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 In-depth architectural view"}, {"label": "text", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.26695251464844, "t": 464.0877685546875, "r": 501.7642200000001, "b": 485.9813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9469272494316101, "cells": [{"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, consider the following points while developing an AI-based predictive maintenance application:"}, {"label": "list_item", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.49343872070312, "t": 492.5340576171875, "r": 547.32031, "b": 526.9137573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9813073873519897, "cells": [{"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages."}, {"label": "list_item", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.57691955566406, "t": 534.0592041015625, "r": 491.3402699999999, "b": 544.2946166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9524359107017517, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The trustworthiness of the predicted output is important for critical use cases."}, {"label": "list_item", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.67471313476562, "t": 550.6901245117188, "r": 534.49988, "b": 572.9078979492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9742523431777954, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications."}, {"label": "list_item", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.61285400390625, "t": 579.9425659179688, "r": 547.2157, "b": 601.75977, "coord_origin": "TOPLEFT"}, "confidence": 0.9732432961463928, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available."}, {"label": "list_item", "id": 7, "page_no": 30, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52349853515625, "t": 608.5234985351562, "r": 504.02917, "b": 631.1382446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.976965069770813, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle."}, {"label": "picture", "id": 8, "page_no": 30, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.6925048828125, "t": 77.32726287841797, "r": 547.7992553710938, "b": 439.2281799316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9841210246086121, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4804077148438, "t": 754.2535400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163533449172974, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}]}}, {"page_no": 31, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.11967468261719, "t": 754.4208984375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230456948280334, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.19580841064453, "t": 754.7359008789062, "r": 267.0744, "b": 764.1449584960938, "coord_origin": "TOPLEFT"}, "confidence": 0.956289529800415, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.292236328125, "t": 70.0931625366211, "r": 542.2594, "b": 105.00391387939453, "coord_origin": "TOPLEFT"}, "confidence": 0.9470060467720032, "cells": [{"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04208374023438, "t": 121.13082122802734, "r": 546.69891, "b": 179.73699951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872261881828308, "cells": [{"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.93234252929688, "t": 191.948974609375, "r": 547.31219, "b": 238.30877685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872615337371826, "cells": [{"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.01303100585938, "t": 249.5870361328125, "r": 533.34436, "b": 283.6994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848974347114563, "cells": [{"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.85812377929688, "t": 295.5922546386719, "r": 535.13025, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9812631607055664, "cells": [{"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.58500671386719, "t": 385.20379638671875, "r": 186.7186, "b": 398.5070495605469, "coord_origin": "TOPLEFT"}, "confidence": 0.9640207886695862, "cells": [{"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.78916931152344, "t": 411.3067932128906, "r": 547.25763, "b": 457.70117, "coord_origin": "TOPLEFT"}, "confidence": 0.9876371622085571, "cells": [{"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.95849609375, "t": 469.4918212890625, "r": 547.27753, "b": 527.93310546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9885361194610596, "cells": [{"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.81661987304688, "t": 540.0313110351562, "r": 547.23859, "b": 573.9750366210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9842253923416138, "cells": [{"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.16104125976562, "t": 586.1128540039062, "r": 541.76654, "b": 608.531982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9799899458885193, "cells": [{"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.49705505371094, "t": 627.67138671875, "r": 278.44431, "b": 641.0259399414062, "coord_origin": "TOPLEFT"}, "confidence": 0.961360514163971, "cells": [{"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9631805419922, "t": 654.0413208007812, "r": 547.22571, "b": 724.17529296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9874605536460876, "cells": [{"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11967468261719, "t": 754.4208984375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230456948280334, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.19580841064453, "t": 754.7359008789062, "r": 267.0744, "b": 764.1449584960938, "coord_origin": "TOPLEFT"}, "confidence": 0.956289529800415, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.292236328125, "t": 70.0931625366211, "r": 542.2594, "b": 105.00391387939453, "coord_origin": "TOPLEFT"}, "confidence": 0.9470060467720032, "cells": [{"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions for health prediction"}, {"label": "text", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04208374023438, "t": 121.13082122802734, "r": 546.69891, "b": 179.73699951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872261881828308, "cells": [{"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world."}, {"label": "text", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93234252929688, "t": 191.948974609375, "r": 547.31219, "b": 238.30877685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872615337371826, "cells": [{"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis."}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.01303100585938, "t": 249.5870361328125, "r": 533.34436, "b": 283.6994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848974347114563, "cells": [{"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}]}, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.85812377929688, "t": 295.5922546386719, "r": 535.13025, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9812631607055664, "cells": [{"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby\u2019s life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders."}, {"label": "section_header", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.58500671386719, "t": 385.20379638671875, "r": 186.7186, "b": 398.5070495605469, "coord_origin": "TOPLEFT"}, "confidence": 0.9640207886695862, "cells": [{"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78916931152344, "t": 411.3067932128906, "r": 547.25763, "b": 457.70117, "coord_origin": "TOPLEFT"}, "confidence": 0.9876371622085571, "cells": [{"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}]}, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected."}, {"label": "text", "id": 9, "page_no": 31, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.95849609375, "t": 469.4918212890625, "r": 547.27753, "b": 527.93310546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9885361194610596, "cells": [{"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}]}, "text": "There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and detect problems effectively."}, {"label": "text", "id": 10, "page_no": 31, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.81661987304688, "t": 540.0313110351562, "r": 547.23859, "b": 573.9750366210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9842253923416138, "cells": [{"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}]}, "text": "AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified."}, {"label": "text", "id": 11, "page_no": 31, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.16104125976562, "t": 586.1128540039062, "r": 541.76654, "b": 608.531982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9799899458885193, "cells": [{"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}]}, "text": "Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry."}, {"label": "section_header", "id": 12, "page_no": 31, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.49705505371094, "t": 627.67138671875, "r": 278.44431, "b": 641.0259399414062, "coord_origin": "TOPLEFT"}, "confidence": 0.961360514163971, "cells": [{"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analytics in real time"}, {"label": "text", "id": 13, "page_no": 31, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9631805419922, "t": 654.0413208007812, "r": 547.22571, "b": 724.17529296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9874605536460876, "cells": [{"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}]}, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems."}], "body": [{"label": "section_header", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.292236328125, "t": 70.0931625366211, "r": 542.2594, "b": 105.00391387939453, "coord_origin": "TOPLEFT"}, "confidence": 0.9470060467720032, "cells": [{"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions for health prediction"}, {"label": "text", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04208374023438, "t": 121.13082122802734, "r": 546.69891, "b": 179.73699951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872261881828308, "cells": [{"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world."}, {"label": "text", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93234252929688, "t": 191.948974609375, "r": 547.31219, "b": 238.30877685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872615337371826, "cells": [{"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis."}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.01303100585938, "t": 249.5870361328125, "r": 533.34436, "b": 283.6994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848974347114563, "cells": [{"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}]}, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.85812377929688, "t": 295.5922546386719, "r": 535.13025, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9812631607055664, "cells": [{"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby\u2019s life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders."}, {"label": "section_header", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.58500671386719, "t": 385.20379638671875, "r": 186.7186, "b": 398.5070495605469, "coord_origin": "TOPLEFT"}, "confidence": 0.9640207886695862, "cells": [{"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78916931152344, "t": 411.3067932128906, "r": 547.25763, "b": 457.70117, "coord_origin": "TOPLEFT"}, "confidence": 0.9876371622085571, "cells": [{"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}]}, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected."}, {"label": "text", "id": 9, "page_no": 31, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.95849609375, "t": 469.4918212890625, "r": 547.27753, "b": 527.93310546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9885361194610596, "cells": [{"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}]}, "text": "There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and detect problems effectively."}, {"label": "text", "id": 10, "page_no": 31, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.81661987304688, "t": 540.0313110351562, "r": 547.23859, "b": 573.9750366210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9842253923416138, "cells": [{"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}]}, "text": "AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified."}, {"label": "text", "id": 11, "page_no": 31, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.16104125976562, "t": 586.1128540039062, "r": 541.76654, "b": 608.531982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9799899458885193, "cells": [{"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}]}, "text": "Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry."}, {"label": "section_header", "id": 12, "page_no": 31, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.49705505371094, "t": 627.67138671875, "r": 278.44431, "b": 641.0259399414062, "coord_origin": "TOPLEFT"}, "confidence": 0.961360514163971, "cells": [{"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analytics in real time"}, {"label": "text", "id": 13, "page_no": 31, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9631805419922, "t": 654.0413208007812, "r": 547.22571, "b": 724.17529296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9874605536460876, "cells": [{"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}]}, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11967468261719, "t": 754.4208984375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230456948280334, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.19580841064453, "t": 754.7359008789062, "r": 267.0744, "b": 764.1449584960938, "coord_origin": "TOPLEFT"}, "confidence": 0.956289529800415, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 32, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.5228881835938, "t": 754.3223266601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9154198169708252, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 135.8349609375, "t": 70.61254119873047, "r": 540.15765, "b": 104.76904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9836795926094055, "cells": [{"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.0093536376953, "t": 116.78787994384766, "r": 542.94446, "b": 162.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9831726551055908, "cells": [{"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "picture", "bbox": {"l": 64.15681457519531, "t": 168.52747, "r": 542.2742309570312, "b": 410.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9696220755577087, "cells": [{"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 64.36393737792969, "t": 413.5631408691406, "r": 281.63330078125, "b": 422.616455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496315121650696, "cells": [{"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9974822998047, "t": 435.3909912109375, "r": 547.31128, "b": 517.7117309570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9883346557617188, "cells": [{"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.75706481933594, "t": 529.5070190429688, "r": 539.91718, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9881454706192017, "cells": [{"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.83775329589844, "t": 611.3679809570312, "r": 437.9595299999999, "b": 621.6543579101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9376599788665771, "cells": [{"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.53660583496094, "t": 627.9594116210938, "r": 546.68695, "b": 650.2847900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9733057618141174, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.43955993652344, "t": 657.3218994140625, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}, "confidence": 0.9471306204795837, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.51890563964844, "t": 673.9837036132812, "r": 543.45294, "b": 696.257805, "coord_origin": "TOPLEFT"}, "confidence": 0.9743932485580444, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.43861389160156, "t": 703.3480834960938, "r": 516.33087, "b": 713.6216430664062, "coord_origin": "TOPLEFT"}, "confidence": 0.9642981290817261, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5228881835938, "t": 754.3223266601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9154198169708252, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}, {"label": "text", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "text", "bbox": {"l": 135.8349609375, "t": 70.61254119873047, "r": 540.15765, "b": 104.76904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9836795926094055, "cells": [{"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time."}, {"label": "text", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0093536376953, "t": 116.78787994384766, "r": 542.94446, "b": 162.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9831726551055908, "cells": [{"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data."}, {"label": "picture", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.15681457519531, "t": 168.52747, "r": 542.2742309570312, "b": 410.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9696220755577087, "cells": [{"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.36393737792969, "t": 413.5631408691406, "r": 281.63330078125, "b": 422.616455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496315121650696, "cells": [{"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 Architecture for AI-powered video analytics"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9974822998047, "t": 435.3909912109375, "r": 547.31128, "b": 517.7117309570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9883346557617188, "cells": [{"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}]}, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant\u2019s body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture."}, {"label": "text", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.75706481933594, "t": 529.5070190429688, "r": 539.91718, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9881454706192017, "cells": [{"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}]}, "text": "When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant\u2019s health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means."}, {"label": "text", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83775329589844, "t": 611.3679809570312, "r": 437.9595299999999, "b": 621.6543579101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9376599788665771, "cells": [{"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}]}, "text": "We can leverage the following AI technology stack for this use case:"}, {"label": "list_item", "id": 8, "page_no": 32, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.53660583496094, "t": 627.9594116210938, "r": 546.68695, "b": 650.2847900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9733057618141174, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images."}, {"label": "list_item", "id": 9, "page_no": 32, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.43955993652344, "t": 657.3218994140625, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}, "confidence": 0.9471306204795837, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow."}, {"label": "list_item", "id": 10, "page_no": 32, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.51890563964844, "t": 673.9837036132812, "r": 543.45294, "b": 696.257805, "coord_origin": "TOPLEFT"}, "confidence": 0.9743932485580444, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation."}, {"label": "list_item", "id": 11, "page_no": 32, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.43861389160156, "t": 703.3480834960938, "r": 516.33087, "b": 713.6216430664062, "coord_origin": "TOPLEFT"}, "confidence": 0.9642981290817261, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OpenCV: A real-time computer vision library that helps perform image processing."}], "body": [{"label": "text", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "text", "bbox": {"l": 135.8349609375, "t": 70.61254119873047, "r": 540.15765, "b": 104.76904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9836795926094055, "cells": [{"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time."}, {"label": "text", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0093536376953, "t": 116.78787994384766, "r": 542.94446, "b": 162.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9831726551055908, "cells": [{"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data."}, {"label": "picture", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.15681457519531, "t": 168.52747, "r": 542.2742309570312, "b": 410.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9696220755577087, "cells": [{"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.36393737792969, "t": 413.5631408691406, "r": 281.63330078125, "b": 422.616455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496315121650696, "cells": [{"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 Architecture for AI-powered video analytics"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9974822998047, "t": 435.3909912109375, "r": 547.31128, "b": 517.7117309570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9883346557617188, "cells": [{"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}]}, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant\u2019s body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture."}, {"label": "text", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.75706481933594, "t": 529.5070190429688, "r": 539.91718, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9881454706192017, "cells": [{"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}]}, "text": "When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant\u2019s health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means."}, {"label": "text", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83775329589844, "t": 611.3679809570312, "r": 437.9595299999999, "b": 621.6543579101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9376599788665771, "cells": [{"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}]}, "text": "We can leverage the following AI technology stack for this use case:"}, {"label": "list_item", "id": 8, "page_no": 32, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.53660583496094, "t": 627.9594116210938, "r": 546.68695, "b": 650.2847900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9733057618141174, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images."}, {"label": "list_item", "id": 9, "page_no": 32, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.43955993652344, "t": 657.3218994140625, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}, "confidence": 0.9471306204795837, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow."}, {"label": "list_item", "id": 10, "page_no": 32, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.51890563964844, "t": 673.9837036132812, "r": 543.45294, "b": 696.257805, "coord_origin": "TOPLEFT"}, "confidence": 0.9743932485580444, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation."}, {"label": "list_item", "id": 11, "page_no": 32, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.43861389160156, "t": 703.3480834960938, "r": 516.33087, "b": 713.6216430664062, "coord_origin": "TOPLEFT"}, "confidence": 0.9642981290817261, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OpenCV: A real-time computer vision library that helps perform image processing."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5228881835938, "t": 754.3223266601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9154198169708252, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}]}}, {"page_no": 33, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.16203308105469, "t": 754.4970092773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9191343188285828, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.21607208251953, "t": 754.80419921875, "r": 267.0744, "b": 764.0835571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557995200157166, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.99948120117188, "t": 70.72982025146484, "r": 542.36017, "b": 104.7628173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9821197390556335, "cells": [{"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.3565673828125, "t": 132.1417236328125, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9596555233001709, "cells": [{"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6084747314453, "t": 164.60169982910156, "r": 547.23254, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9761157631874084, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.61322021484375, "t": 193.5091094970703, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.925189197063446, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7628173828125, "t": 210.79263305664062, "r": 518.55884, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.977351188659668, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.3540802001953, "t": 240.1075897216797, "r": 527.84058, "b": 261.9636535644531, "coord_origin": "TOPLEFT"}, "confidence": 0.9783041477203369, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.2523193359375, "t": 268.774658203125, "r": 539.96179, "b": 290.71991, "coord_origin": "TOPLEFT"}, "confidence": 0.976689338684082, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.19593811035156, "t": 297.4288330078125, "r": 547.26764, "b": 343.69916, "coord_origin": "TOPLEFT"}, "confidence": 0.9813570976257324, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 165.18856811523438, "t": 350.73284912109375, "r": 547.19281, "b": 372.73856, "coord_origin": "TOPLEFT"}, "confidence": 0.9013206958770752, "cells": [{"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.41288757324219, "t": 400.2530212402344, "r": 137.74366760253906, "b": 416.2667236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9588590264320374, "cells": [{"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.86285400390625, "t": 432.6907043457031, "r": 547.16486, "b": 538.8106079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9881507158279419, "cells": [{"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "section_header", "bbox": {"l": 64.06120300292969, "t": 558.3284301757812, "r": 114.58550262451172, "b": 571.36263, "coord_origin": "TOPLEFT"}, "confidence": 0.9354433417320251, "cells": [{"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.81004333496094, "t": 584.623046875, "r": 538.57349, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9726653099060059, "cells": [{"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.75830078125, "t": 618.4910888671875, "r": 547.24359, "b": 676.8506469726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9839816689491272, "cells": [{"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16203308105469, "t": 754.4970092773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9191343188285828, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21607208251953, "t": 754.80419921875, "r": 267.0744, "b": 764.0835571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557995200157166, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.99948120117188, "t": 70.72982025146484, "r": 542.36017, "b": 104.7628173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9821197390556335, "cells": [{"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions."}, {"label": "section_header", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3565673828125, "t": 132.1417236328125, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9596555233001709, "cells": [{"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Additional resources"}, {"label": "list_item", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6084747314453, "t": 164.60169982910156, "r": 547.23254, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9761157631874084, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z."}, {"label": "list_item", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.61322021484375, "t": 193.5091094970703, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.925189197063446, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Cloud Pak for Data Tutorials."}, {"label": "list_item", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7628173828125, "t": 210.79263305664062, "r": 518.55884, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.977351188659668, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE:"}, {"label": "list_item", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.3540802001953, "t": 240.1075897216797, "r": 527.84058, "b": 261.9636535644531, "coord_origin": "TOPLEFT"}, "confidence": 0.9783041477203369, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case."}, {"label": "list_item", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.2523193359375, "t": 268.774658203125, "r": 539.96179, "b": 290.71991, "coord_origin": "TOPLEFT"}, "confidence": 0.976689338684082, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}]}, "text": "-Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case."}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.19593811035156, "t": 297.4288330078125, "r": 547.26764, "b": 343.69916, "coord_origin": "TOPLEFT"}, "confidence": 0.9813570976257324, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case."}, {"label": "text", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "text", "bbox": {"l": 165.18856811523438, "t": 350.73284912109375, "r": 547.19281, "b": 372.73856, "coord_origin": "TOPLEFT"}, "confidence": 0.9013206958770752, "cells": [{"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}]}, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.41288757324219, "t": 400.2530212402344, "r": 137.74366760253906, "b": 416.2667236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9588590264320374, "cells": [{"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.86285400390625, "t": 432.6907043457031, "r": 547.16486, "b": 538.8106079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9881507158279419, "cells": [{"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "section_header", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.06120300292969, "t": 558.3284301757812, "r": 114.58550262451172, "b": 571.36263, "coord_origin": "TOPLEFT"}, "confidence": 0.9354433417320251, "cells": [{"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.81004333496094, "t": 584.623046875, "r": 538.57349, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9726653099060059, "cells": [{"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "This publication was produced by a team of specialists from around the world working with the IBM Redbooks team:"}, {"label": "text", "id": 15, "page_no": 33, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.75830078125, "t": 618.4910888671875, "r": 547.24359, "b": 676.8506469726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9839816689491272, "cells": [{"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management."}], "body": [{"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.99948120117188, "t": 70.72982025146484, "r": 542.36017, "b": 104.7628173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9821197390556335, "cells": [{"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions."}, {"label": "section_header", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3565673828125, "t": 132.1417236328125, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9596555233001709, "cells": [{"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Additional resources"}, {"label": "list_item", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6084747314453, "t": 164.60169982910156, "r": 547.23254, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9761157631874084, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z."}, {"label": "list_item", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.61322021484375, "t": 193.5091094970703, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.925189197063446, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Cloud Pak for Data Tutorials."}, {"label": "list_item", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7628173828125, "t": 210.79263305664062, "r": 518.55884, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.977351188659668, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE:"}, {"label": "list_item", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.3540802001953, "t": 240.1075897216797, "r": 527.84058, "b": 261.9636535644531, "coord_origin": "TOPLEFT"}, "confidence": 0.9783041477203369, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case."}, {"label": "list_item", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.2523193359375, "t": 268.774658203125, "r": 539.96179, "b": 290.71991, "coord_origin": "TOPLEFT"}, "confidence": 0.976689338684082, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}]}, "text": "-Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case."}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.19593811035156, "t": 297.4288330078125, "r": 547.26764, "b": 343.69916, "coord_origin": "TOPLEFT"}, "confidence": 0.9813570976257324, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case."}, {"label": "text", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "text", "bbox": {"l": 165.18856811523438, "t": 350.73284912109375, "r": 547.19281, "b": 372.73856, "coord_origin": "TOPLEFT"}, "confidence": 0.9013206958770752, "cells": [{"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}]}, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.41288757324219, "t": 400.2530212402344, "r": 137.74366760253906, "b": 416.2667236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9588590264320374, "cells": [{"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.86285400390625, "t": 432.6907043457031, "r": 547.16486, "b": 538.8106079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9881507158279419, "cells": [{"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "section_header", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.06120300292969, "t": 558.3284301757812, "r": 114.58550262451172, "b": 571.36263, "coord_origin": "TOPLEFT"}, "confidence": 0.9354433417320251, "cells": [{"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.81004333496094, "t": 584.623046875, "r": 538.57349, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9726653099060059, "cells": [{"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "This publication was produced by a team of specialists from around the world working with the IBM Redbooks team:"}, {"label": "text", "id": 15, "page_no": 33, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.75830078125, "t": 618.4910888671875, "r": 547.24359, "b": 676.8506469726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9839816689491272, "cells": [{"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16203308105469, "t": 754.4970092773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9191343188285828, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21607208251953, "t": 754.80419921875, "r": 267.0744, "b": 764.0835571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557995200157166, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 34, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.5333251953125, "t": 754.4071655273438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9167296290397644, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 136.0478515625, "t": 70.53443145751953, "r": 546.04022, "b": 140.83328247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9852789640426636, "cells": [{"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.68675231933594, "t": 152.5322265625, "r": 546.88873, "b": 222.97750854492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9867506623268127, "cells": [{"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7921600341797, "t": 234.6200714111328, "r": 547.2561, "b": 353.1026306152344, "coord_origin": "TOPLEFT"}, "confidence": 0.982275128364563, "cells": [{"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.95065307617188, "t": 364.7558288574219, "r": 432.83963000000006, "b": 374.9332580566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9391803741455078, "cells": [{"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.16671752929688, "t": 386.804443359375, "r": 314.3034973144531, "b": 408.9226379394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6201915740966797, "cells": [{"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.28025817871094, "t": 420.2625427246094, "r": 364.17230224609375, "b": 442.6965, "coord_origin": "TOPLEFT"}, "confidence": 0.6776076555252075, "cells": [{"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.87332153320312, "t": 454.5150146484375, "r": 537.76233, "b": 476.71588, "coord_origin": "TOPLEFT"}, "confidence": 0.9579671621322632, "cells": [{"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.67491912841797, "t": 496.37939453125, "r": 349.12164, "b": 509.6957702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9542936682701111, "cells": [{"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.876953125, "t": 522.6715698242188, "r": 547.34802, "b": 604.76054, "coord_origin": "TOPLEFT"}, "confidence": 0.9869086146354675, "cells": [{"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.39222717285156, "t": 616.6399536132812, "r": 547.34314, "b": 626.9110107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9211773872375488, "cells": [{"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.80099, "t": 634.2457275390625, "r": 301.6788, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.8940768241882324, "cells": [{"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5333251953125, "t": 754.4071655273438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9167296290397644, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}, {"label": "text", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "text", "bbox": {"l": 136.0478515625, "t": 70.53443145751953, "r": 546.04022, "b": 140.83328247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9852789640426636, "cells": [{"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.68675231933594, "t": 152.5322265625, "r": 546.88873, "b": 222.97750854492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9867506623268127, "cells": [{"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7921600341797, "t": 234.6200714111328, "r": 547.2561, "b": 353.1026306152344, "coord_origin": "TOPLEFT"}, "confidence": 0.982275128364563, "cells": [{"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization."}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95065307617188, "t": 364.7558288574219, "r": 432.83963000000006, "b": 374.9332580566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9391803741455078, "cells": [{"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.16671752929688, "t": 386.804443359375, "r": 314.3034973144531, "b": 408.9226379394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6201915740966797, "cells": [{"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}]}, "text": "Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center"}, {"label": "text", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28025817871094, "t": 420.2625427246094, "r": 364.17230224609375, "b": 442.6965, "coord_origin": "TOPLEFT"}, "confidence": 0.6776076555252075, "cells": [{"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}]}, "text": "Shin Kelly Yang, AI on IBM Z Product Management IBM US"}, {"label": "text", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87332153320312, "t": 454.5150146484375, "r": 537.76233, "b": 476.71588, "coord_origin": "TOPLEFT"}, "confidence": 0.9579671621322632, "cells": [{"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}]}, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM"}, {"label": "section_header", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.67491912841797, "t": 496.37939453125, "r": 349.12164, "b": 509.6957702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9542936682701111, "cells": [{"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.876953125, "t": 522.6715698242188, "r": 547.34802, "b": 604.76054, "coord_origin": "TOPLEFT"}, "confidence": 0.9869086146354675, "cells": [{"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.39222717285156, "t": 616.6399536132812, "r": 547.34314, "b": 626.9110107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9211773872375488, "cells": [{"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.80099, "t": 634.2457275390625, "r": 301.6788, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.8940768241882324, "cells": [{"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}], "body": [{"label": "text", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "text", "bbox": {"l": 136.0478515625, "t": 70.53443145751953, "r": 546.04022, "b": 140.83328247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9852789640426636, "cells": [{"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.68675231933594, "t": 152.5322265625, "r": 546.88873, "b": 222.97750854492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9867506623268127, "cells": [{"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7921600341797, "t": 234.6200714111328, "r": 547.2561, "b": 353.1026306152344, "coord_origin": "TOPLEFT"}, "confidence": 0.982275128364563, "cells": [{"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization."}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95065307617188, "t": 364.7558288574219, "r": 432.83963000000006, "b": 374.9332580566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9391803741455078, "cells": [{"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.16671752929688, "t": 386.804443359375, "r": 314.3034973144531, "b": 408.9226379394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6201915740966797, "cells": [{"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}]}, "text": "Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center"}, {"label": "text", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28025817871094, "t": 420.2625427246094, "r": 364.17230224609375, "b": 442.6965, "coord_origin": "TOPLEFT"}, "confidence": 0.6776076555252075, "cells": [{"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}]}, "text": "Shin Kelly Yang, AI on IBM Z Product Management IBM US"}, {"label": "text", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87332153320312, "t": 454.5150146484375, "r": 537.76233, "b": 476.71588, "coord_origin": "TOPLEFT"}, "confidence": 0.9579671621322632, "cells": [{"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}]}, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM"}, {"label": "section_header", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.67491912841797, "t": 496.37939453125, "r": 349.12164, "b": 509.6957702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9542936682701111, "cells": [{"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.876953125, "t": 522.6715698242188, "r": 547.34802, "b": 604.76054, "coord_origin": "TOPLEFT"}, "confidence": 0.9869086146354675, "cells": [{"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.39222717285156, "t": 616.6399536132812, "r": 547.34314, "b": 626.9110107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9211773872375488, "cells": [{"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.80099, "t": 634.2457275390625, "r": 301.6788, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.8940768241882324, "cells": [{"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5333251953125, "t": 754.4071655273438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9167296290397644, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}]}}, {"page_no": 35, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.23326110839844, "t": 754.4552612304688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9102703928947449, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27912139892578, "t": 754.7698974609375, "r": 267.0744, "b": 764.12158203125, "coord_origin": "TOPLEFT"}, "confidence": 0.950810968875885, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.4889907836914, "t": 70.36857604980469, "r": 270.48557, "b": 83.64260864257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9555448889732361, "cells": [{"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.56192016601562, "t": 96.5151596069336, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}, "confidence": 0.8996357917785645, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 150.71234130859375, "t": 114.1937255859375, "r": 391.07678, "b": 123.93498229980469, "coord_origin": "TOPLEFT"}, "confidence": 0.6805561184883118, "cells": [{"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.51414489746094, "t": 130.8223114013672, "r": 546.83832, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9532178640365601, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 150.69110107421875, "t": 159.39158630371094, "r": 451.35418701171875, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.676043689250946, "cells": [{"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.90457153320312, "t": 176.64987182617188, "r": 430.14783, "b": 187.12718200683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9175106287002563, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.6310272216797, "t": 193.73944091796875, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.7000716924667358, "cells": [{"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.23326110839844, "t": 754.4552612304688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9102703928947449, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27912139892578, "t": 754.7698974609375, "r": 267.0744, "b": 764.12158203125, "coord_origin": "TOPLEFT"}, "confidence": 0.950810968875885, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4889907836914, "t": 70.36857604980469, "r": 270.48557, "b": 83.64260864257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9555448889732361, "cells": [{"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.56192016601562, "t": 96.5151596069336, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}, "confidence": 0.8996357917785645, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on LinkedIn:"}, {"label": "text", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.71234130859375, "t": 114.1937255859375, "r": 391.07678, "b": 123.93498229980469, "coord_origin": "TOPLEFT"}, "confidence": 0.6805561184883118, "cells": [{"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51414489746094, "t": 130.8223114013672, "r": 546.83832, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9532178640365601, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "list_item", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 150.69110107421875, "t": 159.39158630371094, "r": 451.35418701171875, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.676043689250946, "cells": [{"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.90457153320312, "t": 176.64987182617188, "r": 430.14783, "b": 187.12718200683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9175106287002563, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.6310272216797, "t": 193.73944091796875, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.7000716924667358, "cells": [{"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "body": [{"label": "section_header", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4889907836914, "t": 70.36857604980469, "r": 270.48557, "b": 83.64260864257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9555448889732361, "cells": [{"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.56192016601562, "t": 96.5151596069336, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}, "confidence": 0.8996357917785645, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on LinkedIn:"}, {"label": "text", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.71234130859375, "t": 114.1937255859375, "r": 391.07678, "b": 123.93498229980469, "coord_origin": "TOPLEFT"}, "confidence": 0.6805561184883118, "cells": [{"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51414489746094, "t": 130.8223114013672, "r": 546.83832, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9532178640365601, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "list_item", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 150.69110107421875, "t": 159.39158630371094, "r": 451.35418701171875, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.676043689250946, "cells": [{"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.90457153320312, "t": 176.64987182617188, "r": 430.14783, "b": 187.12718200683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9175106287002563, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.6310272216797, "t": 193.73944091796875, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.7000716924667358, "cells": [{"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.23326110839844, "t": 754.4552612304688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9102703928947449, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27912139892578, "t": 754.7698974609375, "r": 267.0744, "b": 764.12158203125, "coord_origin": "TOPLEFT"}, "confidence": 0.950810968875885, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 36, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.60262680053711, "t": 754.6927490234375, "r": 180.32761, "b": 764.0509033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9509437084197998, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6251220703125, "t": 754.3717041015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9176149368286133, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.970703125, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9600573778152466, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.05133819580078, "t": 132.02426147460938, "r": 547.24548, "b": 162.26876831054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9850678443908691, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 64.02767944335938, "t": 172.017333984375, "r": 547.17969, "b": 232.43988037109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878805875778198, "cells": [{"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 64.14295196533203, "t": 241.84597778320312, "r": 547.35602, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9708325862884521, "cells": [{"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 64.09358215332031, "t": 271.9725036621094, "r": 535.31042, "b": 282.27099609375, "coord_origin": "TOPLEFT"}, "confidence": 0.90984046459198, "cells": [{"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 63.77083969116211, "t": 291.3708801269531, "r": 545.7674, "b": 342.25909423828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851772785186768, "cells": [{"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 63.76580810546875, "t": 352.0263977050781, "r": 547.24841, "b": 391.8179, "coord_origin": "TOPLEFT"}, "confidence": 0.9841977953910828, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 63.99868392944336, "t": 401.97637939453125, "r": 541.54132, "b": 431.9630432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9843890070915222, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 64.16744995117188, "t": 442.2430419921875, "r": 519.26678, "b": 462.4287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788233637809753, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 63.904296875, "t": 472.1893005371094, "r": 505.27103, "b": 492.3111572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9781931638717651, "cells": [{"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 64.10684204101562, "t": 502.1192626953125, "r": 547.24249, "b": 542.1983642578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9864881634712219, "cells": [{"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 64.23661041259766, "t": 552.1707153320312, "r": 544.68579, "b": 572.2598876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9780008792877197, "cells": [{"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 63.82798385620117, "t": 582.23291015625, "r": 547.01636, "b": 621.85406, "coord_origin": "TOPLEFT"}, "confidence": 0.981692910194397, "cells": [{"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.29706573486328, "t": 631.7528686523438, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}, "confidence": 0.8924005627632141, "cells": [{"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 63.95261001586914, "t": 651.9513549804688, "r": 547.35809, "b": 732.0111083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879701137542725, "cells": [{"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.60262680053711, "t": 754.6927490234375, "r": 180.32761, "b": 764.0509033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9509437084197998, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6251220703125, "t": 754.3717041015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9176149368286133, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}, {"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.970703125, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9600573778152466, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.05133819580078, "t": 132.02426147460938, "r": 547.24548, "b": 162.26876831054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9850678443908691, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.02767944335938, "t": 172.017333984375, "r": 547.17969, "b": 232.43988037109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878805875778198, "cells": [{"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.14295196533203, "t": 241.84597778320312, "r": 547.35602, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9708325862884521, "cells": [{"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.09358215332031, "t": 271.9725036621094, "r": 535.31042, "b": 282.27099609375, "coord_origin": "TOPLEFT"}, "confidence": 0.90984046459198, "cells": [{"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US"}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.77083969116211, "t": 291.3708801269531, "r": 545.7674, "b": 342.25909423828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851772785186768, "cells": [{"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.76580810546875, "t": 352.0263977050781, "r": 547.24841, "b": 391.8179, "coord_origin": "TOPLEFT"}, "confidence": 0.9841977953910828, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 63.99868392944336, "t": 401.97637939453125, "r": 541.54132, "b": 431.9630432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9843890070915222, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.16744995117188, "t": 442.2430419921875, "r": 519.26678, "b": 462.4287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788233637809753, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 63.904296875, "t": 472.1893005371094, "r": 505.27103, "b": 492.3111572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9781931638717651, "cells": [{"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}]}, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.10684204101562, "t": 502.1192626953125, "r": 547.24249, "b": 542.1983642578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9864881634712219, "cells": [{"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "text", "bbox": {"l": 64.23661041259766, "t": 552.1707153320312, "r": 544.68579, "b": 572.2598876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9780008792877197, "cells": [{"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}]}, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only."}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.82798385620117, "t": 582.23291015625, "r": 547.01636, "b": 621.85406, "coord_origin": "TOPLEFT"}, "confidence": 0.981692910194397, "cells": [{"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental."}, {"label": "section_header", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.29706573486328, "t": 631.7528686523438, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}, "confidence": 0.8924005627632141, "cells": [{"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 63.95261001586914, "t": 651.9513549804688, "r": 547.35809, "b": 732.0111083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879701137542725, "cells": [{"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs."}], "body": [{"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.970703125, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9600573778152466, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.05133819580078, "t": 132.02426147460938, "r": 547.24548, "b": 162.26876831054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9850678443908691, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.02767944335938, "t": 172.017333984375, "r": 547.17969, "b": 232.43988037109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878805875778198, "cells": [{"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.14295196533203, "t": 241.84597778320312, "r": 547.35602, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9708325862884521, "cells": [{"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.09358215332031, "t": 271.9725036621094, "r": 535.31042, "b": 282.27099609375, "coord_origin": "TOPLEFT"}, "confidence": 0.90984046459198, "cells": [{"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US"}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.77083969116211, "t": 291.3708801269531, "r": 545.7674, "b": 342.25909423828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851772785186768, "cells": [{"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.76580810546875, "t": 352.0263977050781, "r": 547.24841, "b": 391.8179, "coord_origin": "TOPLEFT"}, "confidence": 0.9841977953910828, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 63.99868392944336, "t": 401.97637939453125, "r": 541.54132, "b": 431.9630432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9843890070915222, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.16744995117188, "t": 442.2430419921875, "r": 519.26678, "b": 462.4287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788233637809753, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 63.904296875, "t": 472.1893005371094, "r": 505.27103, "b": 492.3111572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9781931638717651, "cells": [{"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}]}, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.10684204101562, "t": 502.1192626953125, "r": 547.24249, "b": 542.1983642578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9864881634712219, "cells": [{"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "text", "bbox": {"l": 64.23661041259766, "t": 552.1707153320312, "r": 544.68579, "b": 572.2598876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9780008792877197, "cells": [{"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}]}, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only."}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.82798385620117, "t": 582.23291015625, "r": 547.01636, "b": 621.85406, "coord_origin": "TOPLEFT"}, "confidence": 0.981692910194397, "cells": [{"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental."}, {"label": "section_header", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.29706573486328, "t": 631.7528686523438, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}, "confidence": 0.8924005627632141, "cells": [{"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 63.95261001586914, "t": 651.9513549804688, "r": 547.35809, "b": 732.0111083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879701137542725, "cells": [{"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.60262680053711, "t": 754.6927490234375, "r": 180.32761, "b": 764.0509033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9509437084197998, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6251220703125, "t": 754.3717041015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9176149368286133, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}]}}, {"page_no": 37, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.26212310791016, "t": 755.4874267578125, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160765409469604, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35021209716797, "t": 755.8494262695312, "r": 267.0744, "b": 765.4060668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9523178339004517, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.03144836425781, "t": 70.1122817993164, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.954963743686676, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.0931396484375, "t": 102.72844696044922, "r": 547.23431, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9848971366882324, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 63.78811264038086, "t": 152.59286499023438, "r": 547.24146, "b": 172.8232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9603025913238525, "cells": [{"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 75.599998, "t": 181.60858154296875, "r": 99.15697479248047, "b": 190.86298, "coord_origin": "TOPLEFT"}, "confidence": 0.8173197507858276, "cells": [{"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 75.599998, "t": 203.4119110107422, "r": 144.71075439453125, "b": 212.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.8817703127861023, "cells": [{"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 75.599998, "t": 214.50650024414062, "r": 124.25857543945312, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8559992909431458, "cells": [{"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 75.47257232666016, "t": 224.76895141601562, "r": 142.73785400390625, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.874781608581543, "cells": [{"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 75.599998, "t": 235.86727905273438, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8794353008270264, "cells": [{"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 235.9648895263672, "t": 181.54017639160156, "r": 292.5691833496094, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8140993118286133, "cells": [{"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 235.9771270751953, "t": 191.93496704101562, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}, "confidence": 0.8634824752807617, "cells": [{"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 235.92138671875, "t": 203.60043334960938, "r": 272.8687744140625, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8542282581329346, "cells": [{"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 235.9377899169922, "t": 214.2160186767578, "r": 294.80047607421875, "b": 224.3423614501953, "coord_origin": "TOPLEFT"}, "confidence": 0.861255943775177, "cells": [{"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 235.86184692382812, "t": 225.51539611816406, "r": 290.5615539550781, "b": 234.899658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.8668359518051147, "cells": [{"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 236.06265258789062, "t": 236.30458068847656, "r": 283.79803466796875, "b": 245.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.8743909001350403, "cells": [{"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 396.7199401855469, "t": 181.80523681640625, "r": 464.44384765625, "b": 191.1903533935547, "coord_origin": "TOPLEFT"}, "confidence": 0.6504887342453003, "cells": [{"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 396.71099853515625, "t": 192.41983032226562, "r": 452.03265380859375, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7500287890434265, "cells": [{"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 396.258544921875, "t": 203.52040100097656, "r": 451.70428466796875, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7123883366584778, "cells": [{"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "text", "bbox": {"l": 396.62286376953125, "t": 214.1708984375, "r": 424.4446716308594, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.730349063873291, "cells": [{"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 396.6561584472656, "t": 225.23277282714844, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}, "confidence": 0.7374036312103271, "cells": [{"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "text", "bbox": {"l": 64.08106994628906, "t": 258.01312255859375, "r": 312.00525, "b": 268.16949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345569014549255, "cells": [{"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "text", "bbox": {"l": 64.17213439941406, "t": 277.27313232421875, "r": 528.68494, "b": 298.1844787597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9759830832481384, "cells": [{"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "text", "bbox": {"l": 63.988487243652344, "t": 307.5063171386719, "r": 541.68878, "b": 327.7742919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9722592234611511, "cells": [{"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "text", "bbox": {"l": 64.36927795410156, "t": 337.3686218261719, "r": 531.98065, "b": 357.74011, "coord_origin": "TOPLEFT"}, "confidence": 0.9669205546379089, "cells": [{"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "text", "bbox": {"l": 64.39899444580078, "t": 367.4486083984375, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}, "confidence": 0.9511570930480957, "cells": [{"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}]}, {"id": 26, "label": "text", "bbox": {"l": 64.1666259765625, "t": 387.39398193359375, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}, "confidence": 0.9543401598930359, "cells": [{"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.26212310791016, "t": 755.4874267578125, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160765409469604, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35021209716797, "t": 755.8494262695312, "r": 267.0744, "b": 765.4060668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9523178339004517, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03144836425781, "t": 70.1122817993164, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.954963743686676, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.0931396484375, "t": 102.72844696044922, "r": 547.23431, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9848971366882324, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.78811264038086, "t": 152.59286499023438, "r": 547.24146, "b": 172.8232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9603025913238525, "cells": [{"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.599998, "t": 181.60858154296875, "r": 99.15697479248047, "b": 190.86298, "coord_origin": "TOPLEFT"}, "confidence": 0.8173197507858276, "cells": [{"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Db2fi IBMfi"}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.599998, "t": 203.4119110107422, "r": 144.71075439453125, "b": 212.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.8817703127861023, "cells": [{"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Blockchainfi"}, {"label": "text", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.599998, "t": 214.50650024414062, "r": 124.25857543945312, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8559992909431458, "cells": [{"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloudfi IBM Clou"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 75.47257232666016, "t": 224.76895141601562, "r": 142.73785400390625, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.874781608581543, "cells": [{"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}]}, "text": "d Pakfi"}, {"label": "text", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "text", "bbox": {"l": 75.599998, "t": 235.86727905273438, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8794353008270264, "cells": [{"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Telum\u2122"}, {"label": "text", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "text", "bbox": {"l": 235.9648895263672, "t": 181.54017639160156, "r": 292.5691833496094, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8140993118286133, "cells": [{"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Watsonfi"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 235.9771270751953, "t": 191.93496704101562, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}, "confidence": 0.8634824752807617, "cells": [{"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16\u2122"}, {"label": "text", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "text", "bbox": {"l": 235.92138671875, "t": 203.60043334960938, "r": 272.8687744140625, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8542282581329346, "cells": [{"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Instanafi"}, {"label": "text", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "text", "bbox": {"l": 235.9377899169922, "t": 214.2160186767578, "r": 294.80047607421875, "b": 224.3423614501953, "coord_origin": "TOPLEFT"}, "confidence": 0.861255943775177, "cells": [{"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}]}, "text": "Open Libertyfi"}, {"label": "text", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "text", "bbox": {"l": 235.86184692382812, "t": 225.51539611816406, "r": 290.5615539550781, "b": 234.899658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.8668359518051147, "cells": [{"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}]}, "text": "OpenPagesfi"}, {"label": "text", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "text", "bbox": {"l": 236.06265258789062, "t": 236.30458068847656, "r": 283.79803466796875, "b": 245.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.8743909001350403, "cells": [{"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 396.7199401855469, "t": 181.80523681640625, "r": 464.44384765625, "b": 191.1903533935547, "coord_origin": "TOPLEFT"}, "confidence": 0.6504887342453003, "cells": [{"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi Turbon"}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 396.71099853515625, "t": 192.41983032226562, "r": 452.03265380859375, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7500287890434265, "cells": [{"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}]}, "text": "omicfi"}, {"label": "text", "id": 18, "page_no": 37, "cluster": {"id": 18, "label": "text", "bbox": {"l": 396.258544921875, "t": 203.52040100097656, "r": 451.70428466796875, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7123883366584778, "cells": [{"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}]}, "text": "WebSpherefi"}, {"label": "text", "id": 19, "page_no": 37, "cluster": {"id": 19, "label": "text", "bbox": {"l": 396.62286376953125, "t": 214.1708984375, "r": 424.4446716308594, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.730349063873291, "cells": [{"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}]}, "text": "z/OSfi"}, {"label": "text", "id": 20, "page_no": 37, "cluster": {"id": 20, "label": "text", "bbox": {"l": 396.6561584472656, "t": 225.23277282714844, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}, "confidence": 0.7374036312103271, "cells": [{"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}]}, "text": "z16\u2122"}, {"label": "text", "id": 21, "page_no": 37, "cluster": {"id": 21, "label": "text", "bbox": {"l": 64.08106994628906, "t": 258.01312255859375, "r": 312.00525, "b": 268.16949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345569014549255, "cells": [{"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 22, "page_no": 37, "cluster": {"id": 22, "label": "text", "bbox": {"l": 64.17213439941406, "t": 277.27313232421875, "r": 528.68494, "b": 298.1844787597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9759830832481384, "cells": [{"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}]}, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 23, "page_no": 37, "cluster": {"id": 23, "label": "text", "bbox": {"l": 63.988487243652344, "t": 307.5063171386719, "r": 541.68878, "b": 327.7742919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9722592234611511, "cells": [{"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis."}, {"label": "text", "id": 24, "page_no": 37, "cluster": {"id": 24, "label": "text", "bbox": {"l": 64.36927795410156, "t": 337.3686218261719, "r": 531.98065, "b": 357.74011, "coord_origin": "TOPLEFT"}, "confidence": 0.9669205546379089, "cells": [{"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}]}, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 25, "page_no": 37, "cluster": {"id": 25, "label": "text", "bbox": {"l": 64.39899444580078, "t": 367.4486083984375, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}, "confidence": 0.9511570930480957, "cells": [{"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}]}, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries."}, {"label": "text", "id": 26, "page_no": 37, "cluster": {"id": 26, "label": "text", "bbox": {"l": 64.1666259765625, "t": 387.39398193359375, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}, "confidence": 0.9543401598930359, "cells": [{"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}], "body": [{"label": "section_header", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03144836425781, "t": 70.1122817993164, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.954963743686676, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.0931396484375, "t": 102.72844696044922, "r": 547.23431, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9848971366882324, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.78811264038086, "t": 152.59286499023438, "r": 547.24146, "b": 172.8232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9603025913238525, "cells": [{"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.599998, "t": 181.60858154296875, "r": 99.15697479248047, "b": 190.86298, "coord_origin": "TOPLEFT"}, "confidence": 0.8173197507858276, "cells": [{"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Db2fi IBMfi"}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.599998, "t": 203.4119110107422, "r": 144.71075439453125, "b": 212.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.8817703127861023, "cells": [{"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Blockchainfi"}, {"label": "text", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.599998, "t": 214.50650024414062, "r": 124.25857543945312, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8559992909431458, "cells": [{"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloudfi IBM Clou"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 75.47257232666016, "t": 224.76895141601562, "r": 142.73785400390625, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.874781608581543, "cells": [{"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}]}, "text": "d Pakfi"}, {"label": "text", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "text", "bbox": {"l": 75.599998, "t": 235.86727905273438, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8794353008270264, "cells": [{"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Telum\u2122"}, {"label": "text", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "text", "bbox": {"l": 235.9648895263672, "t": 181.54017639160156, "r": 292.5691833496094, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8140993118286133, "cells": [{"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Watsonfi"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 235.9771270751953, "t": 191.93496704101562, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}, "confidence": 0.8634824752807617, "cells": [{"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16\u2122"}, {"label": "text", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "text", "bbox": {"l": 235.92138671875, "t": 203.60043334960938, "r": 272.8687744140625, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8542282581329346, "cells": [{"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Instanafi"}, {"label": "text", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "text", "bbox": {"l": 235.9377899169922, "t": 214.2160186767578, "r": 294.80047607421875, "b": 224.3423614501953, "coord_origin": "TOPLEFT"}, "confidence": 0.861255943775177, "cells": [{"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}]}, "text": "Open Libertyfi"}, {"label": "text", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "text", "bbox": {"l": 235.86184692382812, "t": 225.51539611816406, "r": 290.5615539550781, "b": 234.899658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.8668359518051147, "cells": [{"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}]}, "text": "OpenPagesfi"}, {"label": "text", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "text", "bbox": {"l": 236.06265258789062, "t": 236.30458068847656, "r": 283.79803466796875, "b": 245.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.8743909001350403, "cells": [{"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 396.7199401855469, "t": 181.80523681640625, "r": 464.44384765625, "b": 191.1903533935547, "coord_origin": "TOPLEFT"}, "confidence": 0.6504887342453003, "cells": [{"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi Turbon"}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 396.71099853515625, "t": 192.41983032226562, "r": 452.03265380859375, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7500287890434265, "cells": [{"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}]}, "text": "omicfi"}, {"label": "text", "id": 18, "page_no": 37, "cluster": {"id": 18, "label": "text", "bbox": {"l": 396.258544921875, "t": 203.52040100097656, "r": 451.70428466796875, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7123883366584778, "cells": [{"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}]}, "text": "WebSpherefi"}, {"label": "text", "id": 19, "page_no": 37, "cluster": {"id": 19, "label": "text", "bbox": {"l": 396.62286376953125, "t": 214.1708984375, "r": 424.4446716308594, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.730349063873291, "cells": [{"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}]}, "text": "z/OSfi"}, {"label": "text", "id": 20, "page_no": 37, "cluster": {"id": 20, "label": "text", "bbox": {"l": 396.6561584472656, "t": 225.23277282714844, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}, "confidence": 0.7374036312103271, "cells": [{"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}]}, "text": "z16\u2122"}, {"label": "text", "id": 21, "page_no": 37, "cluster": {"id": 21, "label": "text", "bbox": {"l": 64.08106994628906, "t": 258.01312255859375, "r": 312.00525, "b": 268.16949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345569014549255, "cells": [{"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 22, "page_no": 37, "cluster": {"id": 22, "label": "text", "bbox": {"l": 64.17213439941406, "t": 277.27313232421875, "r": 528.68494, "b": 298.1844787597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9759830832481384, "cells": [{"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}]}, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 23, "page_no": 37, "cluster": {"id": 23, "label": "text", "bbox": {"l": 63.988487243652344, "t": 307.5063171386719, "r": 541.68878, "b": 327.7742919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9722592234611511, "cells": [{"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis."}, {"label": "text", "id": 24, "page_no": 37, "cluster": {"id": 24, "label": "text", "bbox": {"l": 64.36927795410156, "t": 337.3686218261719, "r": 531.98065, "b": 357.74011, "coord_origin": "TOPLEFT"}, "confidence": 0.9669205546379089, "cells": [{"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}]}, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 25, "page_no": 37, "cluster": {"id": 25, "label": "text", "bbox": {"l": 64.39899444580078, "t": 367.4486083984375, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}, "confidence": 0.9511570930480957, "cells": [{"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}]}, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries."}, {"label": "text", "id": 26, "page_no": 37, "cluster": {"id": 26, "label": "text", "bbox": {"l": 64.1666259765625, "t": 387.39398193359375, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}, "confidence": 0.9543401598930359, "cells": [{"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.26212310791016, "t": 755.4874267578125, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160765409469604, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35021209716797, "t": 755.8494262695312, "r": 267.0744, "b": 765.4060668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9523178339004517, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 38, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 39, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 433.6951904296875, "t": 736.6339721679688, "r": 572.0396728515625, "b": 772.838566, "coord_origin": "TOPLEFT"}, "confidence": 0.9196886420249939, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 497.23223876953125, "t": 692.6136474609375, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}, "confidence": 0.7631505131721497, "cells": [{"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 482.8758239746094, "t": 132.7060089111328, "r": 564.6472778320312, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.6413159966468811, "cells": [{"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 495.9403076171875, "t": 111.2182388305664, "r": 564.1664428710938, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7024716138839722, "cells": [{"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 475.4501647949219, "t": 44.3557243347168, "r": 565.7938232421875, "b": 79.389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9275028109550476, "cells": []}, {"id": 6, "label": "picture", "bbox": {"l": 42.63053512573242, "t": 749.2789306640625, "r": 68.95333862304688, "b": 776.0442504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.8069466352462769, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 433.6951904296875, "t": 736.6339721679688, "r": 572.0396728515625, "b": 772.838566, "coord_origin": "TOPLEFT"}, "confidence": 0.9196886420249939, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 497.23223876953125, "t": 692.6136474609375, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}, "confidence": 0.7631505131721497, "cells": [{"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}]}, "text": "Printed in U.S.A."}, {"label": "text", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}, {"label": "text", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "text", "bbox": {"l": 482.8758239746094, "t": 132.7060089111328, "r": 564.6472778320312, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.6413159966468811, "cells": [{"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ISBN 0738461067"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 495.9403076171875, "t": 111.2182388305664, "r": 564.1664428710938, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7024716138839722, "cells": [{"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5695-00"}, {"label": "picture", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 475.4501647949219, "t": 44.3557243347168, "r": 565.7938232421875, "b": 79.389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9275028109550476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 42.63053512573242, "t": 749.2789306640625, "r": 68.95333862304688, "b": 776.0442504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.8069466352462769, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "picture", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 433.6951904296875, "t": 736.6339721679688, "r": 572.0396728515625, "b": 772.838566, "coord_origin": "TOPLEFT"}, "confidence": 0.9196886420249939, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}, {"label": "text", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "text", "bbox": {"l": 482.8758239746094, "t": 132.7060089111328, "r": 564.6472778320312, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.6413159966468811, "cells": [{"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ISBN 0738461067"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 495.9403076171875, "t": 111.2182388305664, "r": 564.1664428710938, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7024716138839722, "cells": [{"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5695-00"}, {"label": "picture", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 475.4501647949219, "t": 44.3557243347168, "r": 565.7938232421875, "b": 79.389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9275028109550476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 42.63053512573242, "t": 749.2789306640625, "r": 68.95333862304688, "b": 776.0442504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.8069466352462769, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 497.23223876953125, "t": 692.6136474609375, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}, "confidence": 0.7631505131721497, "cells": [{"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}]}, "text": "Printed in U.S.A."}]}}] \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110.doctags.txt b/tests/data/groundtruth/docling_v2/redp5110.doctags.txt deleted file mode 100644 index 0fb69c7b..00000000 --- a/tests/data/groundtruth/docling_v2/redp5110.doctags.txt +++ /dev/null @@ -1,1883 +0,0 @@ - -Front cover -
- -
-Row and Column Access Control Support in IBM DB2 for i -Implement roles and separation of duties -Leverage row permissions on the database -Protect columns by defining column masks -Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan -Redpaper -
- -
-International Technical Support Organization -Row and Column Access Control Support in IBM DB2 for i -November 2014 -Note: Before using this information and the product it supports, read the information in "Notices" on page vii. -First Edition (November 2014) -This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1). -Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. -Contents - - -Notices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii -Trademarks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii -DB2 for i Center of Excellence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix -Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi -Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi -Now you can become a published author, too!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii -Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii -Stay connected to IBM Redbooks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv -Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 -1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 -1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 -1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 -1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 -1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .5 -Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 -2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 -2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .8 -2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .8 -2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .9 -2.1.4 Database Information function: QIBM_DB_SYSMON. . . . . . . . . . . . . . . . . . . . . . 9 -2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .9 -2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 -2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .10 -2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 -Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 -3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .14 -3.1.1 Row permission and column mask definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 -3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 -3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 -3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 -3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 -3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .21 -. . . . . . . . . . . . . . . . . . . . . . . . 22 -3.5 SELECT, INSERT, and UPDATE behavior with RCAC -3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .23 -3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .23 -3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 -3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 -3.6.5 Defining and creating column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 -3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 -3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 -3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .32 -
- - -Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .37 -4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .38 -4.2 Description of the users roles and responsibilities. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 -4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 -4.3.1 Reviewing the tables that are used in this example. . . . . . . . . . . . . . . . . . . . . . . 42 -4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group. . 47 -4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .50 -4.3.4 Creating the CUSTOMER_LOGIN_ID global variable. . . . . . . . . . . . . . . . . . . . . 52 -4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 -4.3.6 Defining and creating column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 -4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .60 -4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 -4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 -4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 -Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 -Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 -5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81 -5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 -5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .82 -82 -5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100 -83 -Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . 89 90 -6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -6.2.1 Effects when RCAC is defined on the source table6.2.1 Effects when RCAC is defined on the source table -88 -6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 -6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 -6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 -6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96 -6.4 Monitoring, analyzing, and debugging with RCAC97 -. . . . . . . . . . . . . . . . . . . . . . . . . . . .Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 -6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99 -6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .102 -6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 -105 -6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -6.6105 -107 -6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 -108 -109 -109 -113 -111 -Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . . -
- - -7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 -7.1.4 Regenerating. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 -7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .115 -7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 -7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 -7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 -Chapter 8. Designing and planning for success. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 -8.1 Implementing RCAC with good design and proper planning. . . . . . . . . . . . . . . . . . . 120 -8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120 -Appendix A. Database definitions for the RCAC banking example. . . . . . . . . . . . . . 121 -Related publications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 -Other publications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 -Online resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 -Help from IBM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 -
-Notices -This information was developed for products and services offered in the U.S.A. -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: -IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A. -The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. -IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. -Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment. -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. -COPYRIGHT LICENSE: -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. -Trademarks -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or ™), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml -The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: -AS/400fi -DB2fi -DRDAfi -IBMfi -Power Systems™ -Redbooksfi -Redpaper™ -Redbooks (log o) fi System -ifi -The following terms are trademarks of other companies: -Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. -Other company, product, or service names may be trademarks or service marks of others. -
- -
-DB2 for i Center of Excellence -Solution Brief IBM Systems Lab Services and Training -
- -
-Highlights -GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -
- -
-Power Services -DB2 for i Center of Excellence -Expert help to achieve your business requirements -We build confident, satisfied clients -No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. -Because no one else is IBM. -With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. -Who we are, some of what we do -Global CoE engagements cover topics including: -r Database performance and scalability -r Advanced SQL knowledge and skills transfer -r Business intelligence and analytics -r DB2 Web Query -r Query/400 modernization for better reporting and analysis capabilities -r Database modernization and re-engineering -r Data-centric architecture and design -r Extremely large database and overcoming limits to growth -r ISV education and enablement -What you can expect -Depending on the engagement, our team of consultants offer: -r Briefings, consulting and guidance on demand -r Illumination of the DB2 for i capabilities and leadership to exploit them -r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation -r Configuration of systems, operating system and products to fully leverage database capabilities -Key client benefits -T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes. -For more information -Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit: -ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -
- -
-© Copyright IBM Corporation 2013 -IBM Corporation Route 100 Somers, NY 10589 -Produced in the United States of America March 2013 -IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at www.ibm.com/legal/ copytrade.shtml . -This document is current as of the initial date of publication and may be changed by IBM at any time. -Not all offerings are available in every country in which IBM operates. -
- -
-Please Recycle -QLS12392-USEN-00 -Preface -This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. -This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. -
- -
-
- -
-Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. -Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . -Authors -
- -
-
- -
-
- -
-
- -
-
- -
-Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i. -Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes. -Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services. -Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead "JDE on i" analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i. -Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems™ Lab Services organization. Doug's 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings. -
- -
-
- -
-Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36. -Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester. -Thanks to the following people for their contributions to this project: -Debra Landon -International Technical Support Organization, Rochester Center -Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development -Now you can become a published author, too! -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. -Find out more about the residency program, browse the residency index, and apply online at: -ibm.com /redbooks/residencies.html -Comments welcome -Your comments are important to us! -We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways: -GLYPH Use the online Contact us review Redbooks form found at: -ibm.com /redbooks -GLYPH Send your comments in an email to: -redbooks@us.ibm.com -GLYPH Mail your comments to: -IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400 -Stay connected to IBM Redbooks -GLYPH Find us on Facebook: -http://www.facebook.com/IBMRedbooks -GLYPH Follow us on Twitter: -http://twitter.com/ibmredbooks -GLYPH Look for us on LinkedIn: -http://www.linkedin.com/groups?home=&gid=2130806 -GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: -https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm -GLYPH Stay current on recent Redbooks publications with RSS Feeds: -http://www.redbooks.ibm.com/rss.html -
- -
-Chapter 1. -1 -Securing and protecting IBM DB2 data -Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. -Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. -This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: -GLYPH Security fundamentals -GLYPH Current state of IBM i security -GLYPH DB2 for i security controls -1.1 Security fundamentals -Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: -GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. -The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. -A security policy is what defines whether the system and its settings are secure (or not). -GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. -With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. -1.2 Current state of IBM i security -Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. -Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. -Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. -Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day. -Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces. -An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level. -1.3 DB2 for i security controls -As described in 1.2, "Current state of IBM i security" on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table. -As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table. -Figure 1-1 All-or-nothing access to the rows of a table -
- -Figure 1-1 All-or-nothing access to the rows of a table -
-Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. -1.3.1 Existing row and column control -Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. -Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. -Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. -Figure 1-2 Existing row and column controls -
- -Figure 1-2 Existing row and column controls -
-1.3.2 New controls: Row and Column Access Control -Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC). -The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place. -
- -
-Chapter 2. -2 -Roles and separation of duties -One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs. -To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks. -This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics: -GLYPH Roles -GLYPH Separation of duties -2.1 Roles -Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization's requirements for limiting access to data or separation of duties. -To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service. -Roles are divided among the following DB2 functions and their corresponding function usage IDs: -GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA -GLYPH Toolbox application server access: QIBM_DB_ZDA -GLYPH Database Administrator function: QIBM_DB_SQLADM -GLYPH Database Information function: QIBM_DB_SYSMON -GLYPH Security Administrator function: QIBM_DB_SECADM -2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA -The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. -2.1.2 Toolbox application server access: QIBM_DB_ZDA -The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console. -This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. -2.1.3 Database Administrator function: QIBM_DB_SQLADM -The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own. -The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization. -To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM. -Granting QIBM_DB_SQLADM function usage -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions. -2.1.4 Database Information function: QIBM_DB_SYSMON -The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties. -For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization. -Granting QIBM_DB_SYSMON function usage -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions. -2.1.5 Security Administrator function: QIBM_DB_SECADM -The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. -Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization. -Granting QIBM_DB_SECADM function usage -Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group. -2.1.6 Change Function Usage CL command -The following CL commands can be used to work with, display, or change function usage IDs: -GLYPH Work Function Usage ( WRKFCNUSG ) -GLYPH Change Function Usage ( CHGFCNUSG ) -GLYPH Display Function Usage ( DSPFCNUSG ) -For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: -CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) -2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view -The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view. -Table 2-1 FUNCTION_USAGE view - - - -Column nameData typeDescription -FUNCTION_IDVARCHAR(30)ID of the function. -USER_NAMEVARCHAR(10)Name of the user profile that has a usage setting for this function. -USAGEVARCHAR(7)Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. -USER_TYPEVARCHAR(5)Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. -
Table 2-1 FUNCTION_USAGE view
-To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. -Example 2-1 Query to determine who has authority to define and manage RCAC -SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name; -2.2 Separation of duties -Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. -For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. -In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. -QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. -QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. -A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. -Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. -Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority - - - -User action*JOBCTLQIBM_DB_SECADMQIBM_DB_SQLADMQIBM_DB_SYSMONNo Authority -SET CURRENT DEGREE (SQL statement)XX -CHGQRYA command targeting a different user's jobXX -STRDBMON or ENDDBMON commands targeting a different user's jobXX -STRDBMON or ENDDBMON commands targeting a job that matches the current userXXXX -QUSRJOBI() API format 900 or System i Navigator's SQL Details for JobXXX -Visual Explain within Run SQL scriptsXXXX -Visual Explain outside of Run SQL scriptsXX -ANALYZE PLAN CACHE procedureXX -DUMP PLAN CACHE procedureXX -MODIFY PLAN CACHE procedureXX -MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)XX -CHANGE PLAN CACHE SIZE procedure (currently does not check authority)XX -
Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority
- - -User action*JOBCTLQIBM_DB_SECADMQIBM_DB_SQLADMQIBM_DB_SYSMONNo Authority -START PLAN CACHE EVENT MONITOR procedureXX -END PLAN CACHE EVENT MONITOR procedureXX -END ALL PLAN CACHE EVENT MONITORS procedureXX -Work with RCAC row permissions (Create, modify, or delete)X -Work with RCAC column masks (Create, modify, or delete)X -Change Object Owner ( CHGOBJOWN ) CL commandX -Change Object Primary Group ( CHGOBJPGP ) CL commandX -Grant Object Authority ( GRTOBJAUT ) CL commandX -Revoke Object Authority ( RVKOBJAUT ) CL commandX -Edit Object Authority ( EDTOBJAUT ) CL commandX -Display Object Authority ( DSPOBJAUT ) CL commandX -Work with Objects ( WRKOBJ ) CL commandX -Work with Libraries ( WRKLIB ) CL commandX -Add Authorization List Entry ( ADDAUTLE ) CL commandX -Change Authorization List Entry ( CHGAUTLE ) CL commandX -Remove Authorization List Entry ( RMVAUTLE ) CL commandX -Retrieve Authorization List Entry ( RTVAUTLE ) CL commandX -Display Authorization List ( DSPAUTL ) CL commandX -Display Authorization List Objects ( DSPAUTLOBJ ) CL commandX -Edit Authorization List ( EDTAUTL ) CL commandX -Work with Authorization Lists ( WRKAUTL ) CL commandX -
-
- -
-Chapter 3. -3 -Row and Column Access Control -This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example. -The following topics are covered in this chapter: -GLYPH Explanation of RCAC and the concept of access control -GLYPH Special registers and built-in global variables -GLYPH VERIFY_GROUP_FOR_USER function -GLYPH Establishing and controlling accessibility by using the RCAC rule text -GLYPH SELECT, INSERT, and UPDATE behavior with RCAC -GLYPH Human resources example -3.1 Explanation of RCAC and the concept of access control -RCAC limits data access to those users who have a business "need to know". RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called "IBM Advanced Data Security for i", also known as option 47 of IBM i 7.2. -In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms: -GLYPH Row permissions -GLYPH Column masks -Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements. -Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data. -RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic. -Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility. -3.1.1 Row permission and column mask definitions -The following sections define row permission and column masks. -Row permission -A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees. -The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules. -Figure 3-1 CREATE PERMISSION SQL statement -
- -The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement -
-Column mask -A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. -Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules. -Figure 3-2 CREATE MASK SQL statement -
- -Figure 3-2 CREATE MASK SQL statement -
-3.1.2 Enabling and activating RCAC -You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17. -Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table. -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. -Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements -
- -Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements -
-You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC. -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. -Figure 3-4 ALTER TABLE SQL statement -
- -Figure 3-4 ALTER TABLE SQL statement -
-When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set. -It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user's ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first. -Note: If a user does not have permission to access the row, the column mask logic is not invoked. -3.2 Special registers and built-in global variables -This section describes how you can use special registers and built-in global variables to implement RCAC. -3.2.1 Special registers -A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server. -IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers: -GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION . -GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128). -GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller's or the owner's user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner's authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128). -GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128). -In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text. -Table 3-1 summarizes these special registers and their values. -Table 3-1 Special registers and their corresponding values - - - -Special registerCorresponding value -USER or SESSION_USERThe effective user of the thread excluding adopted authority. -CURRENT_USERThe effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. -SYSTEM_USERThe authorization ID that initiated the connection. -
Table 3-1 Special registers and their corresponding values
-Figure 3-5 shows the difference in the special register values when an adopted authority is used: -GLYPH A user connects to the server using the user profile ALICE. -GLYPH USER and CURRENT USER initially have the same value of ALICE. -GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. -GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. -GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. -Figure 3-5 Special registers and adopted authority -
- -Figure 3-5 Special registers and adopted authority -
-3.2.2 Built-in global variables -Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. -IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. -Table 3-2 lists the nine built-in global variables. -Table 3-2 Built-in global variables - - - -Global variableTypeDescription -CLIENT_HOSTVARCHAR(255)Host name of the current client as returned by the system -CLIENT_IPADDRVARCHAR(128)IP address of the current client as returned by the system -CLIENT_PORTINTEGERPort used by the current client to communicate with the server -PACKAGE_NAMEVARCHAR(128)Name of the currently running package -PACKAGE_SCHEMAVARCHAR(128)Schema name of the currently running package -PACKAGE_VERSIONVARCHAR(64)Version identifier of the currently running package -ROUTINE_SCHEMAVARCHAR(128)Schema name of the currently running routine -ROUTINE_SPECIFIC_NAMEVARCHAR(128)Name of the currently running routine -ROUTINE_TYPECHAR(1)Type of the currently running routine -
Table 3-2 Built-in global variables
-3.3 VERIFY_GROUP_FOR_USER function -The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. -If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. -Here is an example of using the VERIFY_GROUP_FOR_USER function: -1. There are user profiles for MGR, JANE, JUDY, and TONY. -2. The user profile JANE specifies a group profile of MGR. -3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: -VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY') -3.4 Establishing and controlling accessibility by using the RCAC rule text -When defining a row permission or column mask, the "magic" of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine. -In the case of a row permission, the rule text is the "test" of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot. -In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value. -For a simple example of implementing row permissions and column masks, see 3.6, "Human resources example" on page 22. -In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause. -For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking. -For more information about what is permitted, see the "Database programming" topic of the IBM i 7.2 Knowledge Center, found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en -One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user's identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques. -More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1. -Example 3-1 Subquery that is used as part of the rule -DATE_MASTER D -D.BUSINESS_DAY = 'Y') -CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE -Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions. -3.5 SELECT, INSERT, and UPDATE behavior with RCAC -RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis. -Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you. -For more information and considerations about data movement in an RCAC environment, see Chapter 6, "Additional considerations" on page 85. -Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data. -3.6 Human resources example -This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users: -GLYPH Tax_Id information -GLYPH YEAR of the birth date of the employee (hiding the age of the employee) -In this example, there are four different types of users: -GLYPH Employees -GLYPH Managers -GLYPH Human Resources Manager -GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.) -The following sections describe step-by-step what is needed to be done to implement RCAC in this environment. -3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants -The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, "Security Administrator function: QIBM_DB_SECADM" on page 9). Complete the following steps: -1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority. -Example 3-2 Function ID required to implement RCAC -CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED) -2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3. -Example 3-3 Verifying what user profiles have authorization to implement RCAC -SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id ='QIBM_DB_SECADM' ORDER BY user_name; -3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database. -Figure 3-6 Result of the function ID query -3.6.2 Creating group profiles for the users and their roles -Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps: -1. In this example, there are three group profiles: --HR (Human Resource personnel) --MGR (Managers) --EMP (Employees) -These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles. -Example 3-4 Creating group profiles -CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group') -2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS). -Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile. -3.6.3 Demonstrating data access without RCAC -Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps: -1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table. -Example 3-5 Counting the number of employees -SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES; -The result of this query is shown in Figure 3-7, which is the total number of employees of the company. -Figure 3-7 Number of employees -
- -Figure 3-7 Number of employees -
-2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are. -Example 3-6 Displaying the information of the Employees -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES -The result of this query is shown in Figure 3-8. -Figure 3-8 List of employees without RCAC enabled -3.6.4 Defining and creating row permissions -Implement RCAC on the EMPLOYEES table by completing the following steps: -1. Start by defining a row permission. In this example, the rules to enforce include the following ones: --Human Resources employees can see all the rows. --Managers can see only information for the employees that they manage. --Employees can see only their own information. --Consultants are not allowed to see any rows in the table. -To implement this row permission, run the SQL statement that is shown in Example 3-7. -Example 3-7 Creating a permission for the EMPLOYEE table -CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ; -2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, "Enabling and activating RCAC" on page 16. -Figure 3-9 Row permissions that are shown in System i Navigator -
- -Figure 3-9 Row permissions that are shown in System i Navigator -
-3.6.5 Defining and creating column masks -Define the different masks for the columns that are sensitive by completing the following steps: -1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones: --Human Resources can see the entire date of birth of the employees. --Employees can see only their own date of birth. --Managers can see the date of birth of their employees masked with YEAR being 9999. -To implement this column mask, run the SQL statement that is shown in Example 3-8. -Example 3-8 Creation of a mask on the DATE_OF_BIRTH column -CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH -RETURN CASE -WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ; -2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones: --Human Resources can see the unmasked TAX_ID of the employees. --Employees can see only their own unmasked TAX_ID. --Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). --Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX. -To implement this column mask, run the SQL statement that is shown in Example 3-9. -Example 3-9 Creating a mask on the TAX_ID column -CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; -3. Figure 3-10 shows the masks that are created in the HR_SCHEMA. -Figure 3-10 Column masks shown in System i Navigator -
- -Figure 3-10 Column masks shown in System i Navigator -
-3.6.6 Activating RCAC -Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: -1. Run the SQL statements that are shown in Example 3-10. -Example 3-10 Activating RCAC on the EMPLOYEES table -/* Active Row Access Control (permissions) */ -/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; -*/ -2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . -Figure 3-11 Selecting the EMPLOYEES table from System i Navigator -
- -Figure 3-11 Selecting the EMPLOYEES table from System i Navigator -
-3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked. -Figure 3-12 RCAC enabled on the EMPLOYEES table -
- -Figure 3-12 RCAC enabled on the EMPLOYEES table -
-3.6.7 Demonstrating data access with RCAC -You are now ready to start testing RCAC with the four different users. Complete the following steps: -1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, "Demonstrating data access without RCAC" on page 24). -Example 3-11 EMPLOYEES count -SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES; -2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees). -Figure 3-13 Count of EMPLOYEES by HR -
- -Figure 3-13 Count of EMPLOYEES by HR -
-3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6. -Figure 3-14 Count of EMPLOYEES by a manager -
- -Figure 3-14 Count of EMPLOYEES by a manager -
-4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row). -Figure 3-15 Count of EMPLOYEES by an employee -
- -Figure 3-15 Count of EMPLOYEES by an employee -
-5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all. -Figure 3-16 Count of EMPLOYEES by a consultant -
- -Figure 3-16 Count of EMPLOYEES by a consultant -
-Does the result make sense? Yes, it does because RCAC is enabled. -6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, "Demonstrating data access without RCAC" on page 24. It is shown in Example 3-12. -Example 3-12 SELECT statement to test with the different users -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES -7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns. -Figure 3-17 SQL statement result by Human Resources user profile -8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns. -Figure 3-18 SQL statement result by Manager profile -9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all. -Figure 3-19 SQL statement result by an employee profile -10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company's employees. -Figure 3-20 SQL statement result by Consultant/DBE profile -3.6.8 Demonstrating data access with a view and RCAC -This section covers data access with a view and RCAC. Complete the following steps: -1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave. -Figure 3-21 Employees on leave -2. Example 3-13 shows the definition of the view. -Example 3-13 VIew of employees on leave -CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, -TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG ) -AS -SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, -ON_LEAVE_FLAG -FROM -HR_SCHEMA.EMPLOYEES -WHERE -ON_LEAVE_FLAG = 'Y'; -3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14: -Example 3-14 SQL statement for employees on leave -SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM -HR_SCHEMA.EMPLOYEES_ON_LEAVE; -4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22. -Figure 3-22 Employees on leave - Human Resources user -5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well. -Figure 3-23 Employee on leave - Manager of Field Reps user -6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave. -. -Figure 3-24 Employees on leave - employee user -
- -
-Chapter 4. -4 -Implementing Row and Column Access Control: Banking example -This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. -The following topics are covered in this chapter: -GLYPH Business requirements for the RCAC banking scenario -GLYPH Description of the users roles and responsibilities -GLYPH Implementation of RCAC -4.1 Business requirements for the RCAC banking scenario -As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application: -GLYPH CUSTOMERS -GLYPH ACCOUNTS -GLYPH TRANSACTIONS -RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values. -In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee's personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet. -Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile. -The customer's identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer's login value. This value is compared to the customer's login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table. -Applications that do not use the web interface do not have to be changed because the global variable is NULL by default. -A diagram of the internet banking architecture is shown in Figure 4-1: -GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested. -GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent). -GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent). -Figure 4-1 Internet banking example -
- -Figure 4-1 Internet banking example -
-4.2 Description of the users roles and responsibilities -During the requirements gathering phase, the following groups of users are identified and codified: -GLYPH SECURITY: Security officer and security administrators -GLYPH DBE: Database engineers -GLYPH ADMIN: Bank business administrators -GLYPH TELLER: Bank tellers -GLYPH CUSTOMER: Bank customers using the internet -GLYPH PUBLIC: Anyone not already in a group -Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example. -Figure 4-2 Rules for row and column access -
- -Figure 4-2 Rules for row and column access -
-The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table. -Figure 4-3 Column masks - - - -CUSTOMERSACCOUNTS -SECURITYNo RowsCUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_IDACCOUNT_NUMBER -DBEAll RowsCUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_IDACCOUNT NUMBER ACCOUNT_NUMBER -ADMINAll RowsNoneNone -TELLERAll RowsCUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _None -CUSTOMEROwn RowsNoneNone -PUBLICNo RowsCUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_IDACCOUNT_NUMBER -
Figure 4-3 Column masks
-For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur. -GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group. -GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group. -GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group. -GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group. -GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group. -GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed. -GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG. -4.3 Implementation of RCAC -Figure 4-4 shows the data model of the banking scenario that is used in this example. -Figure 4-4 Data model of the banking scenario -
- -Figure 4-4 Data model of the banking scenario -
-This section covers the following steps: -GLYPH Reviewing the tables that are used in this example -GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group -GLYPH Creating group profiles for the users and their roles -GLYPH Creating the CUSTOMER_LOGIN_ID global variable -GLYPH Defining and creating row permissions -GLYPH Defining and creating column masks -GLYPH Restricting the inserting and updating of masked data -GLYPH Activating row and column access control -GLYPH Reviewing row permissions -GLYPH Demonstrating data access with RCAC -GLYPH Query implementation with RCAC activated -4.3.1 Reviewing the tables that are used in this example -This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers. -Figure 4-5 Tables that are used in the banking example -
- -Figure 4-5 Tables that are used in the banking example -
-Note: Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. -To review the attributes of each table that is used in this banking example, complete the following steps: -1. Review the columns of each the tables through System i Navigator. Expand Database  named Database  Schemas  BANK_SCHEMA  Tables . -2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented. -Figure 4-6 CUSTOMERS table attributes -
- -Figure 4-6 CUSTOMERS table attributes -
-3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7. -Figure 4-7 Column definitions of the CUSTOMERS table -4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table. -Figure 4-8 Reviewing the constraints on the CUSTOMERS table -
- -Figure 4-8 Reviewing the constraints on the CUSTOMERS table -
-5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet. -Figure 4-9 ACCOUNTS table attributes -
- -Figure 4-9 ACCOUNTS table attributes -
-6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10. -Figure 4-10 Column definitions of the ACCOUNTS table -7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table. -Figure 4-11 Reviewing the constraints on the ACCOUNTS table -
- -Figure 4-11 Reviewing the constraints on the ACCOUNTS table -
-8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet. -Figure 4-12 TRANSACTIONS table attributes -
- -Figure 4-12 TRANSACTIONS table attributes -
-9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13. -Figure 4-13 Column definitions of the TRANSACTIONS table -10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table. -Figure 4-14 Reviewing the constraints on the TRANSACTIONS table -
- -Figure 4-14 Reviewing the constraints on the TRANSACTIONS table -
-Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario. -4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group -The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, "Roles" on page 8. In this example, the DBEs are users MCAIN and HBEDOYA. -Complete the following steps: -1. Right-click the database connection and select Application Administration , as shown in Figure 4-15. -Figure 4-15 Application administration -
- -Figure 4-15 Application administration -
-2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i  Database and select the function usage ID of Database Security Administrator . -Figure 4-16 Application administration for IBM i -
- -Figure 4-16 Application administration for IBM i -
-3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17. -Figure 4-17 Customizing the Database Security Administrator function usage ID -
- -Figure 4-17 Customizing the Database Security Administrator function usage ID -
-4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK . -Figure 4-18 Customize Access window -
- -Figure 4-18 Customize Access window -
-5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19. -Figure 4-19 Function usage ID Database Security Administrator customized -
- -Figure 4-19 Function usage ID Database Security Administrator customized -
-6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20. -Figure 4-20 Query to display user profiles with function usage ID for RCAC -
- -Figure 4-20 Query to display user profiles with function usage ID for RCAC -
-4.3.3 Creating group profiles for the users and their roles -The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, "Description of the users roles and responsibilities" on page 39. -Complete the following steps: -1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21. -Figure 4-21 Creating group profiles -
- -Figure 4-21 Creating group profiles -
-2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add . -Figure 4-22 shows adding user TQSPENCER to the TELLER group profile. -Figure 4-22 Creating group profiles and adding users -
- -Figure 4-22 Creating group profiles and adding users -
-3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups  Groups , as shown in Figure 4-23. -Figure 4-23 Newly created group profiles -
- -Figure 4-23 Newly created group profiles -
-4.3.4 Creating the CUSTOMER_LOGIN_ID global variable -In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, "Built-in global variables" on page 19. -Complete the following steps: -1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New  Global Variable , as shown in Figure 4-24. -Figure 4-24 Creating a global variable -
- -Figure 4-24 Creating a global variable -
-2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK . -Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID -
- -Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID -
-3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26. -Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable -
- -Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable -
-4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable. -Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable -
- -Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable -
-4.3.5 Defining and creating row permissions -You now ready to define the row permissions of the tables. Complete the following steps: -1. From the navigation pane of System i Navigator, click Schemas  BANK_SCHEMA , right-click Row Permissions , and select New  Row Permission , as shown in Figure 4-28. -Figure 4-28 Selecting new row permissions -
- -Figure 4-28 Selecting new row permissions -
-2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy: --User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows. --User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. --Any other user profile cannot see any rows at all. -Select the Enabled option. Click OK . -Figure 4-29 New row permissions on the CUSTOMERS table -
- -Figure 4-29 New row permissions on the CUSTOMERS table -
-3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy: --User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows. --User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. --Any other user profile cannot see any rows at all. -Select the Enabled option. Click OK . -Figure 4-30 New row permissions on the ACCOUNTS table -
- -Figure 4-30 New row permissions on the ACCOUNTS table -
-4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy: --User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows. --User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table. -Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored. --Any other user profile cannot see any rows at all. -Select the Enabled option. Click OK . -Figure 4-31 New row permissions on the TRANSACTIONS table -
- -Figure 4-31 New row permissions on the TRANSACTIONS table -
-5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled. -Figure 4-32 List of row permissions on BANK_SCHEMA -
- -Figure 4-32 List of row permissions on BANK_SCHEMA -
-4.3.6 Defining and creating column masks -This section defines the masks on the columns. Complete the following steps: -1. From the main navigation pane of System i Navigator, click Schemas  BANK_SCHEMA , right-click Column Masks , and select New  Column Mask , as shown in Figure 4-33. -Figure 4-33 Creating a column mask -
- -Figure 4-33 Creating a column mask -
-2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information: --Select the CUSTOMERS table on which to create the column mask. --Select the Column to mask; in this example, it is CUSTOMER_EMAIL. --Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****. -Select the Enabled option. Click OK . -Figure 4-34 Defining a column mask on the CUSTOMERS table -
- -Figure 4-34 Defining a column mask on the CUSTOMERS table -
-3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns: --MASK_DRIVERS_LICENSE_ON_CUSTOMERS --MASK_LOGIN_ID_ON_CUSTOMERS --MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS --MASK_ACCOUNT_NUMBER_ON_ACCOUNTS --MASK_SECURITY_QUESTION_ON_CUSTOMERS --MASK_TAX_ID_ON_CUSTOMERS -4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled. -Figure 4-35 List of column masks on BANK_SCHEMA -
- -Figure 4-35 List of column masks on BANK_SCHEMA -
-4.3.7 Restricting the inserting and updating of masked data -This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, "Avoiding propagation of masked data" on page 108. -Complete the following steps: -1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36 -Figure 4-36 Definition of the CUSTOMERS table -
- -Figure 4-36 Definition of the CUSTOMERS table -
-2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37. -Figure 4-37 Adding a check constraint -
- -Figure 4-37 Adding a check constraint -
-3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps: -a. Select the CUSTOMER_EMAIL column. -b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value. -c. Select the On update violation, preserve column value option and click OK . -Figure 4-38 Specifying a new check constraint on the CUSTOMERS table -
- -Figure 4-38 Specifying a new check constraint on the CUSTOMERS table -
-4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column. -Figure 4-39 Check constraint on the CUSTOMERS table -
- -Figure 4-39 Check constraint on the CUSTOMERS table -
-5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40. -Figure 4-40 List of check constraints on the CUSTOMERS table -
- -Figure 4-40 List of check constraints on the CUSTOMERS table -
-4.3.8 Activating row and column access control -You are now ready to activate RCAC on all three tables in this example. Complete the following steps: -1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK . -Figure 4-41 Enabling RCAC on the CUSTOMERS table -
- -Figure 4-41 Enabling RCAC on the CUSTOMERS table -
-2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK . -Figure 4-42 Enabling RCAC on ACCOUNTS -
- -Figure 4-42 Enabling RCAC on ACCOUNTS -
-3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK . -Figure 4-43 Enabling RCAC on TRANSACTIONS -
- -Figure 4-43 Enabling RCAC on TRANSACTIONS -
-4.3.9 Reviewing row permissions -This section displays all the row permissions after enabling RCAC. Complete the following steps: -1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission. -Figure 4-44 Row permissions after enabling RCAC -
- -Figure 4-44 Row permissions after enabling RCAC -
-2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45. -Figure 4-45 Selecting row permission definition -
- -Figure 4-45 Selecting row permission definition -
-3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied. -Figure 4-46 Search condition of the QIBM_DEFAULT row permission -
- -Figure 4-46 Search condition of the QIBM_DEFAULT row permission -
-4.3.10 Demonstrating data access with RCAC -You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER): -GLYPH A SELECT statement that returns the SESSION_USER. -GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table. -GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name: --c u s t o m e r _ i d --customer_name --customer_email --c u s t o m e r _ t a x _ i d --customer_drivers_license_number -Data access for a DBE user with RCAC -To test a DBE (MCAIN) user, complete the following steps: -1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user. -Figure 4-47 DBE session user -
- -Figure 4-47 DBE session user -
-2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48. -Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table -
- -Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table -
-3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked. -Figure 4-49 SQL statement that is run by the DBE user with masked columns -Data access for SECURITY user with RCAC -To test a SECURITY user, complete the following steps: -1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer. -Figure 4-50 SECURITY session user -
- -Figure 4-50 SECURITY session user -
-2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all. -Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table -
- -Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table -
-3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer. -Figure 4-52 SQL statement that is run by the SECURITY user - no results -
- -Figure 4-52 SQL statement that is run by the SECURITY user - no results -
-Data access for TELLER user with RCAC -To test a Teller (TQSPENCER) user, complete the following steps: -1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user. -Figure 4-53 TELLER session user -
- -Figure 4-53 TELLER session user -
-2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows. -Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table -
- -Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table -
-3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked. -Figure 4-55 SQL statement that is run by the TELLER user with masked columns -
- -Figure 4-55 SQL statement that is run by the TELLER user with masked columns -
-Data access for ADMIN user with RCAC -To test an ADMIN (VGLUCCHESS) user, complete the following steps: -1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user. -Figure 4-56 ADMIN session user -
- -Figure 4-56 ADMIN session user -
-2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows. -Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table -
- -Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table -
-3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns. -Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns -Data access for WEBUSER user with RCAC -To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps: -1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user. -Figure 4-59 WEBUSER session user -
- -Figure 4-59 WEBUSER session user -
-2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID. -Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID -
- -Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID -
-3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61. -Figure 4-61 Viewing the global variable value -
- -Figure 4-61 Viewing the global variable value -
-4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID. -Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table -
- -Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table -
-5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user's own row. -Figure 4-63 SQL statement that is run by WEBUSER - no masked columns -
- -Figure 4-63 SQL statement that is run by WEBUSER - no masked columns -
-Other examples of data access with RCAC -To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps: -1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts. -Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile -2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions. -Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile -3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table. -Figure 4-66 List of accounts and current balance by customer using a TELLER user profile -4.3.11 Query implementation with RCAC activated -This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer. -Complete the following steps: -1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing. -Figure 4-67 Visual Explain with no RCAC enabled -
- -Figure 4-67 Visual Explain with no RCAC enabled -
-2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. -Figure 4-68 Visual Explain with RCAC enabled -
- -Figure 4-68 Visual Explain with RCAC enabled -
-3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. -Figure 4-69 Index advice with no RCAC -
- -Figure 4-69 Index advice with no RCAC -
-4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, "Index advisor" on page 99. -Figure 4-70 Index advice with RCAC enabled -
- -Figure 4-70 Index advice with RCAC enabled -
-
- -
-Chapter 5. -5 -RCAC and non-SQL interfaces -A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF ). -This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter. -The following topics are covered in this chapter in this chapter: -GLYPH Unsupported interfaces -GLYPH Native query result differences -GLYPH Accidental updates with masked values -GLYPH System CL commands considerations -5.1 Unsupported interfaces -It is not possible to create a row permission or column mask on a distributed table or a program-described file. -After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message: -GLYPH A logical file with multiple formats if the open attempt requests more than one format. -GLYPH A table or query that specifies an ICU 2.6.1 sort sequence. -GLYPH A table with read triggers. -This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated. -For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1. -Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC. -5.2 Native query result differences -The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items: -GLYPH Query/400 -GLYPH QQQQRY API -GLYPH Open Query File ( OPNQRYF ) command -GLYPH Run Query ( RUNQRY ) command -GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view -Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default. -The following list documents some of the query output differences that can occur when native query requests are processed by CQE: -GLYPH Different ordering in the result set -GLYPH Different values for null columns or columns with errors -GLYPH Suppression of some mapping error messages -GLYPH Loss of RRN positioning capabilities -GLYPH Duplicate key processing behavior differences -GLYPH Missing key feedback -For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm -In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance. -Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces. -5.3 Accidental updates with masked values -The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access. -For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program's record buffer, as shown Figure 5-1. -In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value. -Figure 5-1 Accidental update with masked values scenario -
- -Figure 5-1 Accidental update with masked values scenario -
-Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values. -DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, "Check constraint solution" on page 108. -5.4 System CL commands considerations -As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC. -5.4.1 Create Duplicate Object (CRTDUPOBJ) command -The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL . -If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error. -When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object. -5.4.2 Copy File (CPYF) command -The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table. -When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command. -If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received. -5.4.3 Copy Library (CPYLIB) command -The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, "Create Duplicate Object (CRTDUPOBJ) command" on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL . -
- -
-Chapter 6. -Additional considerations -This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions: -GLYPH Timing of column masking -GLYPH Data movement -GLYPH Joins -GLYPH Views -GLYPH Materialized query tables -GLYPH Index advisor -GLYPH Monitoring, analysis, and debugging -GLYPH Performance and scalability -The following topics are covered in this chapter: -GLYPH Timing of column masking -GLYPH RCAC effects on data movement -GLYPH RCAC effects on joins -GLYPH Monitoring, analyzing, and debugging with RCAC -GLYPH Views, materialized query tables, and query rewrite with RCAC -GLYPH RCAC effects on performance and scalability -GLYPH Exclusive lock to implement RCAC (availability issues) -GLYPH Avoiding propagation of masked data -GLYPH Triggers and functions (SECURED) -GLYPH RCAC is only one part of the solution -6 -6.1 Timing of column masking -An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking. -An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values. -SELECT -CREDIT_CARD_NUMBER, -FROM -GROUP BY -CREDIT_CARD_NUMBER -ORDER BY -CREDIT_CARD_NUMBER; -Without RCAC Masking -With RCAC Masking - - -CREDIT CARD NUMBER _ _TOTAL -3785 0000 0000 1234233.50 -3785 1111 1111 1234105.10 -3785 2222 2222 1234300 00 300.00 -3785 3333 3333 12341,775.00 -5466 4444 4444 1234601.70 -5466 5555 5555 123437.80 -5466 6666 6666 1234490.45 -6011 7777 7777 12341005.00 -6011 8888 8888 1234750.33 -6011 9999 9999 000110.00 -
-Figure 6-1 Timing of column masking - - - -CREDIT CARD NUMBER _ _TOTAL -**** **** **** 1234233.50 -**** **** **** 1234105.10 -**** **** **** 1234300 00 300.00 -**** **** **** 12341,775.00 -**** **** **** 1234601.70 -**** **** **** 123437.80 -**** **** **** 1234490.45 -**** **** **** 1234 12341005.00 -**** **** **** 1234750.33 -**** **** **** 000110.00 -
Figure 6-1 Timing of column masking
-SUM(AMOUNT) AS TOTAL TRANSACTIONS -Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query's final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2. -Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask. -Figure 6-2 Masking differences between Fieldproc and RCAC -
- -Figure 6-2 Masking differences between Fieldproc and RCAC -
-6.2 RCAC effects on data movement -As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss. -Figure 6-3 RCAC and data movement -
- -Figure 6-3 RCAC and data movement -
-The "user" that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization's object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC. -Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data. -This section covers in detail the following three examples: -GLYPH Effects when RCAC is defined on the source table -GLYPH Effects when RCAC is defined on the target table -GLYPH Effects when RCAC is defined on both source and target tables -6.2.1 Effects when RCAC is defined on the source table -Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table. -Example 6-1 INSERT INTO TARGET statement -INSERT INTO TARGET (SELECT * FROM SOURCE); -For example, given a "source" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4. -Figure 6-4 RCAC effects on data movement from SOURCE -
- -Figure 6-4 RCAC effects on data movement from SOURCE -
-6.2.2 Effects when RCAC is defined on the target table -Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table. -Example 6-2 INSERT INTO TARGET statement -INSERT INTO TARGET (SELECT * FROM SOURCE); -Given a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the "target", and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table's permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read. -Figure 6-5 RCAC effects on data movement on TARGET -
- -Figure 6-5 RCAC effects on data movement on TARGET -
-6.2.3 Effects when RCAC is defined on both source and target tables -Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables. -Example 6-3 INSERT INTO TARGET statement -INSERT INTO TARGET (SELECT * FROM SOURCE); -Given a "source" table and a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned. -Although the source rows where NAME <> 'CAIN' do satisfy the target table's permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data. -Figure 6-6 RCAC effects on data movement on SOURCE and TARGET -
- -Figure 6-6 RCAC effects on data movement on SOURCE and TARGET -
-6.3 RCAC effects on joins -As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled. -Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation. -As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see. -Figure 6-7 Set A and set B with row permissions -
- -Figure 6-7 Set A and set B with row permissions -
-6.3.1 Inner joins -Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8. -Figure 6-8 Inner join without RCAC permission -
- -Figure 6-8 Inner join without RCAC permission -
-Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9. -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. -Figure 6-9 Inner join with RCAC permission -
- -Figure 6-9 Inner join with RCAC permission -
-6.3.2 Outer joins -Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default. -Figure 6-10 Outer join without RCAC permission -
- -Figure 6-10 Outer join without RCAC permission -
-Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11. -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. -Figure 6-11 Outer join with RCAC permission -
- -Figure 6-11 Outer join with RCAC permission -
-6.3.3 Exception joins -Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default. -Figure 6-12 Exception join without RCAC permission -
- -Figure 6-12 Exception join without RCAC permission -
-Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. -Figure 6-13 Exception join with RCAC permission -
- -Figure 6-13 Exception join with RCAC permission -
-6.4 Monitoring, analyzing, and debugging with RCAC -It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques. -The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences: -GLYPH The underlying data access plan can be different and more complex based on the rule text. -GLYPH The database results can be reduced or modified based on the rule text and user profile. -GLYPH The run time of the request can be affected either positively or negatively based on the rule text. -GLYPH For high-level language record level access, query plans must be considered, and not just program code. -During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different. -RCAC is designed and implemented to be transparent to the user. It is possible for user "Mike" and user "Hernando" to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user "Mike" and user "Hernando" have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query. -When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the "variables" the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different. -To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of "database engineer" becomes even more important. -6.4.1 Query monitoring and analysis tools -When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor. -Figure 6-14 shows how Visual Explain externalizes RCAC. -Figure 6-14 Visual Explain indicating that RCAC is applied -
- -Figure 6-14 Visual Explain indicating that RCAC is applied -
-Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary . -Figure 6-15 SQL Performance Monitor -
- -Figure 6-15 SQL Performance Monitor -
-Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied. -Figure 6-16 SQL Performance Monitor indicating that RCAC is applied -
- -Figure 6-16 SQL Performance Monitor indicating that RCAC is applied -
-Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized. -Figure 6-17 SQL Performance Monitor showing statements and RCAC -
- -Figure 6-17 SQL Performance Monitor showing statements and RCAC -
-When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer's policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows: -WHERE CUSTOMER_TAX_ID = '123-45-7890' -The literal value of '123-45-7890' is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure. -The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain. -6.4.2 Index advisor -Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point. -The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised. -For example, the query that is shown in Figure 6-18 produces index advice for the user's predicate and the RCAC predicate. -Figure 6-18 Index advice and RCAC -
- -Figure 6-18 Index advice and RCAC -
-In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text. -Figure 6-19 Index advisor based on the RCAC rule -
- -Figure 6-19 Index advisor based on the RCAC rule -
-For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at: -http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies -6.4.3 Metadata using catalogs -To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively. -Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view. -Figure 6-20 RCAC and catalogs -The SYSCONTROLS catalog view contains the following columns: -GLYPH COLUMN_NAME -GLYPH CONTROL_TYPE -GLYPH CREATE_TIME -GLYPH ENABLE -GLYPH ENFORCED -GLYPH ASP_NUMBER -GLYPH IMPLICIT -GLYPH LABEL -GLYPH LAST_ALTERED -GLYPH LONG_COMMENT -GLYPH RCAC_NAME -GLYPH RCAC_OWNER -GLYPH RCAC_SCHEMA -GLYPH RULETEXT -GLYPH SYSTEM_COLUMN_NAME -GLYPH SYSTEM_TABLE_NAME -GLYPH SYSTEM_TABLE_SCHEMA -GLYPH TABLE_NAME -GLYPH TABLE_SCHEMA -GLYPH TBCORRELATION -The SYSCONTROLSDEP catalog view contains the following columns: -GLYPH COLUMN_NAME -GLYPH CONTROL_TYPE -GLYPH IASP_NUMBER -GLYPH OBJECT_NAME -GLYPH OBJECT_SCHEMA -GLYPH OBJECT_TYPE -GLYPH PARM_SIGNATURE -GLYPH RCAC_NAME -GLYPH RCAC_SCHEMA -GLYPH SYSTEM_TABLE_NAME -GLYPH SYSTEM_TABLE_SCHEMA -For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en -6.5 Views, materialized query tables, and query rewrite with RCAC -This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table. -6.5.1 Views -Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query. -Figure 6-21 View definition and user query -
- -Figure 6-21 View definition and user query -
-What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22. -Figure 6-22 Query rewrite with RCAC -
- -Figure 6-22 Query rewrite with RCAC -
-6.5.2 Materialized query tables -When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data. -Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried. -When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks. -The following example illustrates this scenario: -1. Create schema and tables: -CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER); -2. Create a row permission that allows the employees to see only rows from the region they work in: -/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE; -3. Create an MQT to summarize sales by location: --- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; -4. Populate the MQT (permission is not applied): -/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT -The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission: -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; -5. Create an MQT to summarize by region and location: --- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; -6. Populate the Region_location_Sales_MQT (permission not applied): -/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT -The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission: -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; -This example has the following additional implications: -GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables. -GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results. -GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT. -6.5.3 Query rewrite -Query rewrite is a technique that the optimizer can use to change the original request to improve performance. -For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1. -As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC. -6.6 RCAC effects on performance and scalability -As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a "query", and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user's query, much like a query referencing a view. -For native record level access, this RCAC "query" is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user's permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned. -A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original "random read" request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of "not found" if the user is not entitled to any of the records. -For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the "next record" in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23. -Figure 6-23 Native record access with no RCAC -
- -Figure 6-23 Native record access with no RCAC -
-Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24. -Figure 6-24 Native record level access with RCAC -
- -Figure 6-24 Native record level access with RCAC -
-After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended. -6.7 Exclusive lock to implement RCAC (availability issues) -When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC. -Consider the following scenarios: -GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table: --Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data. --Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data. --Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data. --Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data. -The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table. -GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table. -GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message: -SQ20471] INSERT or UPDATE does not satisfy row permissions. -To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission. -6.8 Avoiding propagation of masked data -Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control. -For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error: -INSERT INTO TABLE1 SELECT * FROM TABLE2 -The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint. -There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger. -6.8.1 Check constraint solution -One way to prevent this problem is to define a check constraint. -As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements. -In the Example 6-4, the mask is defined to return a value of 'XXX-XX-nnnn' for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value. -Example 6-4 Check constraint to avoid masked data -CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn -ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value. -6.8.2 Before trigger solution -The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5. -Example 6-5 Before trigger to avoid masked data -CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END -6.9 Triggers and functions (SECURED) -There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see. -6.9.1 Triggers -Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission. -Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over. -Example 6-6 Trigger SECURED -/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END -6.9.2 Functions -Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7. -Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED -The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure. -Consider the following examples: -GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1. -MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED. -NOT SECURED is the default on the create function unless SECURED is explicitly selected. -This same rule applies for any function that might be invoked with a masked column specified as an argument. -GLYPH Table2 column SSN has a column mask that is defined on it. -SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute. -6.10 RCAC is only one part of the solution -When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges. -Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files. -Figure 6-25 Object-level security and RCAC permissions -
- -Figure 6-25 Object-level security and RCAC permissions -
-To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test. -The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver. -Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements. -The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of "restricting access to data", and "needing access to data". -
- -
-Chapter 7. -7 -Row and Column Access Control management -After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered. -The following topics are covered in this chapter: -GLYPH Managing row permissions and column masks -GLYPH Managing tables with row permissions and column masks -GLYPH Monitoring and auditing function usage -7.1 Managing row permissions and column masks -This section focuses on the management of the RCAC row permissions and column masks. -7.1.1 Source management -The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions. -If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table. -7.1.2 Modifying definitions -After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition. -This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process. -7.1.3 Turning on and off -As described in 3.1.2, "Enabling and activating RCAC" on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table. -Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages. -7.1.4 Regenerating -DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects. -For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table. -Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error. -7.2 Managing tables with row permissions and column masks -This section examines the object management considerations after RCAC is added to a DB2 table. -7.2.1 Save and restore -Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC. -Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging. -For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, "Regenerating" on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (… SELECT C.CUSTOMER_ID FROM CUSTOMERS C …). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1. -Figure 7-1 Restoring tables to different schemas -
- -Figure 7-1 Restoring tables to different schemas -
-The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the "Schema qualify names for objects" and select the "OR REPLACE clause", and then run the generated script. -7.2.2 Table migration -There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes. -The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing. -Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas. -7.3 Monitoring and auditing function usage -While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events. -The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization's data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed. -A new journal entry type of "AX" for journal entry code "T" (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents: -GLYPH IBM i Version 7.2 Journal Management Guide , found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en -GLYPH IBM i Version 7.2 Security Reference Guide , found at: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en -
- -
-Chapter 8. -Designing and planning for success -Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing. -The following topics are covered in this chapter: -GLYPH Implementing RCAC with good design and proper planning -GLYPH DB2 for i Center of Excellence -8 -8.1 Implementing RCAC with good design and proper planning -By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i. -RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility. -This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read. -This paper has described the following pervasive power and advantages of RCAC: -GLYPH Access can be controlled through simple or sophisticated logic. -GLYPH Virtually no application changes are required. -GLYPH The implementation of the access policy is part of the DB2 data access layer. -GLYPH Table data is protected regardless of the interface that is used. -GLYPH No user is inherently exempted from the access control policies. -GLYPH Groups of users can share policies and permissions. -A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance. -With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown. -8.2 DB2 for i Center of Excellence -To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design. -If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com . -
- -
-Appendix A. -Database definitions for the RCAC banking example -This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, "Implementing Row and Column Access Control: Banking example" on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example. -Example A-1 DDL script to implement the RCAC banking example -/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , -A -CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); -ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 -THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; -CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */ -Related publications -The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper. -Other publications -These publications are relevant as further information sources: -GLYPH IBM DB2 for i indexing methods and strategies white paper: -http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies -GLYPH IBM i Memo to Users Version 7.2 : -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm -GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide : -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en -GLYPH IBM i Version 7.2 Journal Management Guide : -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en -GLYPH IBM i Version 7.2 Security Reference Guide : -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en -Online resources -These websites are relevant as further information sources: -GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center: -http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en -GLYPH Identity Theft Resource Center -http://www.idtheftcenter.org -GLYPH Ponemon Institute -http://www.ponemon.org/ -Help from IBM -IBM Support and downloads -ibm.com /support -IBM Global Services -ibm.com /services -Back cover -Row and Column Access Control Support in IBM DB2 for i -Implement roles and separation of duties -Leverage row permissions on the database -Protect columns by defining column masks -This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. -
- -
-
- -
-INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION -BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE -IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. -For more information: ibm.com /redbooks -
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110.json b/tests/data/groundtruth/docling_v2/redp5110.json deleted file mode 100644 index 88fb1014..00000000 --- a/tests/data/groundtruth/docling_v2/redp5110.json +++ /dev/null @@ -1 +0,0 @@ -{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "redp5110", "origin": {"mimetype": "application/pdf", "binary_hash": 4337232093025561302, "filename": "redp5110.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}, {"cref": "#/pictures/0"}, {"cref": "#/texts/1"}, {"cref": "#/texts/2"}, {"cref": "#/texts/3"}, {"cref": "#/texts/4"}, {"cref": "#/texts/5"}, {"cref": "#/texts/6"}, {"cref": "#/texts/7"}, {"cref": "#/pictures/1"}, {"cref": "#/texts/8"}, {"cref": "#/texts/9"}, {"cref": "#/texts/10"}, {"cref": "#/texts/11"}, {"cref": "#/texts/12"}, {"cref": "#/texts/13"}, {"cref": "#/texts/14"}, {"cref": "#/texts/15"}, {"cref": "#/texts/16"}, {"cref": "#/texts/17"}, {"cref": "#/tables/0"}, {"cref": "#/texts/18"}, {"cref": "#/texts/19"}, {"cref": "#/texts/20"}, {"cref": "#/texts/21"}, {"cref": "#/tables/1"}, {"cref": "#/tables/2"}, {"cref": "#/texts/22"}, {"cref": "#/texts/23"}, {"cref": "#/texts/24"}, {"cref": "#/texts/25"}, {"cref": "#/texts/26"}, {"cref": "#/texts/27"}, {"cref": "#/texts/28"}, {"cref": "#/texts/29"}, {"cref": "#/texts/30"}, {"cref": "#/texts/31"}, {"cref": "#/texts/32"}, {"cref": "#/texts/33"}, {"cref": "#/texts/34"}, {"cref": "#/texts/35"}, {"cref": "#/texts/36"}, {"cref": "#/texts/37"}, {"cref": "#/texts/38"}, {"cref": "#/texts/39"}, {"cref": "#/texts/40"}, {"cref": "#/texts/41"}, {"cref": "#/texts/42"}, {"cref": "#/texts/43"}, {"cref": "#/texts/44"}, {"cref": "#/texts/45"}, {"cref": "#/texts/46"}, {"cref": "#/texts/47"}, {"cref": "#/texts/48"}, {"cref": "#/texts/49"}, {"cref": "#/texts/50"}, {"cref": "#/texts/51"}, {"cref": "#/texts/52"}, {"cref": "#/texts/53"}, {"cref": "#/texts/54"}, {"cref": "#/texts/55"}, {"cref": "#/texts/56"}, {"cref": "#/texts/57"}, {"cref": "#/texts/58"}, {"cref": "#/pictures/2"}, {"cref": "#/texts/59"}, {"cref": "#/texts/60"}, {"cref": "#/pictures/3"}, {"cref": "#/texts/61"}, {"cref": "#/groups/0"}, {"cref": "#/pictures/4"}, {"cref": "#/texts/66"}, {"cref": "#/texts/67"}, {"cref": "#/texts/68"}, {"cref": "#/texts/69"}, {"cref": "#/texts/70"}, {"cref": "#/texts/71"}, {"cref": "#/texts/72"}, {"cref": "#/texts/73"}, {"cref": "#/texts/74"}, {"cref": "#/groups/1"}, {"cref": "#/texts/84"}, {"cref": "#/texts/85"}, {"cref": "#/groups/2"}, {"cref": "#/texts/90"}, {"cref": "#/texts/91"}, {"cref": "#/texts/92"}, {"cref": "#/texts/93"}, {"cref": "#/texts/94"}, {"cref": "#/pictures/5"}, {"cref": "#/texts/95"}, {"cref": "#/texts/96"}, {"cref": "#/texts/97"}, {"cref": "#/texts/98"}, {"cref": "#/texts/99"}, {"cref": "#/texts/100"}, {"cref": "#/pictures/6"}, {"cref": "#/texts/101"}, {"cref": "#/texts/102"}, {"cref": "#/texts/103"}, {"cref": "#/texts/104"}, {"cref": "#/texts/105"}, {"cref": "#/texts/106"}, {"cref": "#/pictures/7"}, {"cref": "#/pictures/8"}, {"cref": "#/texts/107"}, {"cref": "#/texts/108"}, {"cref": "#/texts/109"}, {"cref": "#/texts/110"}, {"cref": "#/texts/111"}, {"cref": "#/texts/112"}, {"cref": "#/texts/113"}, {"cref": "#/pictures/9"}, {"cref": "#/pictures/10"}, {"cref": "#/pictures/11"}, {"cref": "#/pictures/12"}, {"cref": "#/pictures/13"}, {"cref": "#/texts/114"}, {"cref": "#/texts/115"}, {"cref": "#/texts/116"}, {"cref": "#/texts/117"}, {"cref": "#/texts/118"}, {"cref": "#/pictures/14"}, {"cref": "#/pictures/15"}, {"cref": "#/texts/119"}, {"cref": "#/texts/120"}, {"cref": "#/texts/121"}, {"cref": "#/texts/122"}, {"cref": "#/texts/123"}, {"cref": "#/texts/124"}, {"cref": "#/texts/125"}, {"cref": "#/texts/126"}, {"cref": "#/texts/127"}, {"cref": "#/texts/128"}, {"cref": "#/texts/129"}, {"cref": "#/texts/130"}, {"cref": "#/texts/131"}, {"cref": "#/groups/3"}, {"cref": "#/texts/133"}, {"cref": "#/texts/134"}, {"cref": "#/texts/135"}, {"cref": "#/texts/136"}, {"cref": "#/texts/137"}, {"cref": "#/groups/4"}, {"cref": "#/texts/139"}, {"cref": "#/groups/5"}, {"cref": "#/texts/141"}, {"cref": "#/texts/142"}, {"cref": "#/groups/6"}, {"cref": "#/texts/144"}, {"cref": "#/groups/7"}, {"cref": "#/texts/146"}, {"cref": "#/groups/8"}, {"cref": "#/texts/148"}, {"cref": "#/groups/9"}, {"cref": "#/texts/150"}, {"cref": "#/groups/10"}, {"cref": "#/texts/152"}, {"cref": "#/pictures/16"}, {"cref": "#/texts/153"}, {"cref": "#/texts/154"}, {"cref": "#/texts/155"}, {"cref": "#/texts/156"}, {"cref": "#/texts/157"}, {"cref": "#/texts/158"}, {"cref": "#/groups/11"}, {"cref": "#/texts/162"}, {"cref": "#/texts/163"}, {"cref": "#/texts/164"}, {"cref": "#/texts/165"}, {"cref": "#/texts/166"}, {"cref": "#/texts/167"}, {"cref": "#/groups/12"}, {"cref": "#/texts/170"}, {"cref": "#/groups/13"}, {"cref": "#/texts/172"}, {"cref": "#/texts/173"}, {"cref": "#/texts/174"}, {"cref": "#/texts/175"}, {"cref": "#/texts/176"}, {"cref": "#/texts/177"}, {"cref": "#/texts/178"}, {"cref": "#/texts/179"}, {"cref": "#/texts/180"}, {"cref": "#/texts/181"}, {"cref": "#/texts/182"}, {"cref": "#/texts/183"}, {"cref": "#/texts/184"}, {"cref": "#/texts/185"}, {"cref": "#/pictures/17"}, {"cref": "#/texts/186"}, {"cref": "#/texts/187"}, {"cref": "#/texts/188"}, {"cref": "#/texts/189"}, {"cref": "#/texts/190"}, {"cref": "#/texts/191"}, {"cref": "#/texts/192"}, {"cref": "#/texts/193"}, {"cref": "#/texts/194"}, {"cref": "#/texts/195"}, {"cref": "#/pictures/18"}, {"cref": "#/texts/196"}, {"cref": "#/texts/197"}, {"cref": "#/texts/198"}, {"cref": "#/texts/199"}, {"cref": "#/texts/200"}, {"cref": "#/texts/201"}, {"cref": "#/texts/202"}, {"cref": "#/pictures/19"}, {"cref": "#/texts/203"}, {"cref": "#/texts/204"}, {"cref": "#/texts/205"}, {"cref": "#/texts/206"}, {"cref": "#/texts/207"}, {"cref": "#/texts/208"}, {"cref": "#/groups/14"}, {"cref": "#/texts/211"}, {"cref": "#/texts/212"}, {"cref": "#/texts/213"}, {"cref": "#/texts/214"}, {"cref": "#/texts/215"}, {"cref": "#/texts/216"}, {"cref": "#/groups/15"}, {"cref": "#/texts/222"}, {"cref": "#/texts/223"}, {"cref": "#/texts/224"}, {"cref": "#/texts/225"}, {"cref": "#/texts/226"}, {"cref": "#/texts/227"}, {"cref": "#/texts/228"}, {"cref": "#/texts/229"}, {"cref": "#/texts/230"}, {"cref": "#/texts/231"}, {"cref": "#/texts/232"}, {"cref": "#/texts/233"}, {"cref": "#/texts/234"}, {"cref": "#/texts/235"}, {"cref": "#/texts/236"}, {"cref": "#/texts/237"}, {"cref": "#/texts/238"}, {"cref": "#/texts/239"}, {"cref": "#/texts/240"}, {"cref": "#/texts/241"}, {"cref": "#/texts/242"}, {"cref": "#/texts/243"}, {"cref": "#/texts/244"}, {"cref": "#/texts/245"}, {"cref": "#/texts/246"}, {"cref": "#/texts/247"}, {"cref": "#/texts/248"}, {"cref": "#/texts/249"}, {"cref": "#/texts/250"}, {"cref": "#/groups/16"}, {"cref": "#/texts/254"}, {"cref": "#/texts/255"}, {"cref": "#/texts/256"}, {"cref": "#/texts/257"}, {"cref": "#/texts/258"}, {"cref": "#/tables/3"}, {"cref": "#/texts/259"}, {"cref": "#/texts/260"}, {"cref": "#/texts/261"}, {"cref": "#/texts/262"}, {"cref": "#/texts/263"}, {"cref": "#/texts/264"}, {"cref": "#/texts/265"}, {"cref": "#/texts/266"}, {"cref": "#/texts/267"}, {"cref": "#/texts/268"}, {"cref": "#/texts/269"}, {"cref": "#/texts/270"}, {"cref": "#/texts/271"}, {"cref": "#/texts/272"}, {"cref": "#/tables/4"}, {"cref": "#/texts/273"}, {"cref": "#/texts/274"}, {"cref": "#/tables/5"}, {"cref": "#/texts/275"}, {"cref": "#/texts/276"}, {"cref": "#/pictures/20"}, {"cref": "#/texts/277"}, {"cref": "#/texts/278"}, {"cref": "#/texts/279"}, {"cref": "#/texts/280"}, {"cref": "#/texts/281"}, {"cref": "#/groups/17"}, {"cref": "#/texts/288"}, {"cref": "#/texts/289"}, {"cref": "#/texts/290"}, {"cref": "#/texts/291"}, {"cref": "#/texts/292"}, {"cref": "#/groups/18"}, {"cref": "#/texts/295"}, {"cref": "#/texts/296"}, {"cref": "#/texts/297"}, {"cref": "#/texts/298"}, {"cref": "#/texts/299"}, {"cref": "#/texts/300"}, {"cref": "#/texts/301"}, {"cref": "#/texts/302"}, {"cref": "#/texts/303"}, {"cref": "#/texts/304"}, {"cref": "#/texts/305"}, {"cref": "#/texts/306"}, {"cref": "#/pictures/21"}, {"cref": "#/texts/307"}, {"cref": "#/texts/308"}, {"cref": "#/texts/309"}, {"cref": "#/texts/310"}, {"cref": "#/texts/311"}, {"cref": "#/texts/312"}, {"cref": "#/texts/313"}, {"cref": "#/texts/314"}, {"cref": "#/pictures/22"}, {"cref": "#/texts/315"}, {"cref": "#/texts/316"}, {"cref": "#/texts/317"}, {"cref": "#/texts/318"}, {"cref": "#/texts/319"}, {"cref": "#/pictures/23"}, {"cref": "#/texts/320"}, {"cref": "#/texts/321"}, {"cref": "#/texts/322"}, {"cref": "#/pictures/24"}, {"cref": "#/texts/323"}, {"cref": "#/texts/324"}, {"cref": "#/texts/325"}, {"cref": "#/texts/326"}, {"cref": "#/texts/327"}, {"cref": "#/texts/328"}, {"cref": "#/texts/329"}, {"cref": "#/texts/330"}, {"cref": "#/texts/331"}, {"cref": "#/texts/332"}, {"cref": "#/texts/333"}, {"cref": "#/texts/334"}, {"cref": "#/groups/19"}, {"cref": "#/texts/339"}, {"cref": "#/texts/340"}, {"cref": "#/texts/341"}, {"cref": "#/tables/6"}, {"cref": "#/texts/342"}, {"cref": "#/groups/20"}, {"cref": "#/texts/348"}, {"cref": "#/pictures/25"}, {"cref": "#/texts/349"}, {"cref": "#/texts/350"}, {"cref": "#/texts/351"}, {"cref": "#/texts/352"}, {"cref": "#/texts/353"}, {"cref": "#/texts/354"}, {"cref": "#/texts/355"}, {"cref": "#/texts/356"}, {"cref": "#/texts/357"}, {"cref": "#/tables/7"}, {"cref": "#/texts/358"}, {"cref": "#/texts/359"}, {"cref": "#/texts/360"}, {"cref": "#/texts/361"}, {"cref": "#/groups/21"}, {"cref": "#/texts/365"}, {"cref": "#/texts/366"}, {"cref": "#/texts/367"}, {"cref": "#/texts/368"}, {"cref": "#/texts/369"}, {"cref": "#/texts/370"}, {"cref": "#/texts/371"}, {"cref": "#/texts/372"}, {"cref": "#/texts/373"}, {"cref": "#/texts/374"}, {"cref": "#/texts/375"}, {"cref": "#/texts/376"}, {"cref": "#/texts/377"}, {"cref": "#/texts/378"}, {"cref": "#/texts/379"}, {"cref": "#/texts/380"}, {"cref": "#/texts/381"}, {"cref": "#/texts/382"}, {"cref": "#/texts/383"}, {"cref": "#/texts/384"}, {"cref": "#/texts/385"}, {"cref": "#/texts/386"}, {"cref": "#/texts/387"}, {"cref": "#/texts/388"}, {"cref": "#/texts/389"}, {"cref": "#/texts/390"}, {"cref": "#/texts/391"}, {"cref": "#/texts/392"}, {"cref": "#/groups/22"}, {"cref": "#/texts/395"}, {"cref": "#/groups/23"}, {"cref": "#/texts/400"}, {"cref": "#/texts/401"}, {"cref": "#/texts/402"}, {"cref": "#/groups/24"}, {"cref": "#/texts/404"}, {"cref": "#/texts/405"}, {"cref": "#/groups/25"}, {"cref": "#/texts/407"}, {"cref": "#/texts/408"}, {"cref": "#/groups/26"}, {"cref": "#/texts/410"}, {"cref": "#/texts/411"}, {"cref": "#/texts/412"}, {"cref": "#/groups/27"}, {"cref": "#/texts/417"}, {"cref": "#/texts/418"}, {"cref": "#/texts/419"}, {"cref": "#/texts/420"}, {"cref": "#/texts/421"}, {"cref": "#/texts/422"}, {"cref": "#/texts/423"}, {"cref": "#/groups/28"}, {"cref": "#/texts/425"}, {"cref": "#/texts/426"}, {"cref": "#/texts/427"}, {"cref": "#/groups/29"}, {"cref": "#/texts/429"}, {"cref": "#/texts/430"}, {"cref": "#/texts/431"}, {"cref": "#/texts/432"}, {"cref": "#/pictures/26"}, {"cref": "#/groups/30"}, {"cref": "#/texts/434"}, {"cref": "#/texts/435"}, {"cref": "#/texts/436"}, {"cref": "#/texts/437"}, {"cref": "#/texts/438"}, {"cref": "#/texts/439"}, {"cref": "#/groups/31"}, {"cref": "#/texts/445"}, {"cref": "#/texts/446"}, {"cref": "#/texts/447"}, {"cref": "#/texts/448"}, {"cref": "#/texts/449"}, {"cref": "#/texts/450"}, {"cref": "#/texts/451"}, {"cref": "#/groups/32"}, {"cref": "#/texts/453"}, {"cref": "#/pictures/27"}, {"cref": "#/texts/454"}, {"cref": "#/texts/455"}, {"cref": "#/groups/33"}, {"cref": "#/texts/460"}, {"cref": "#/texts/461"}, {"cref": "#/texts/462"}, {"cref": "#/texts/463"}, {"cref": "#/texts/464"}, {"cref": "#/groups/34"}, {"cref": "#/texts/471"}, {"cref": "#/texts/472"}, {"cref": "#/texts/473"}, {"cref": "#/texts/474"}, {"cref": "#/groups/35"}, {"cref": "#/texts/476"}, {"cref": "#/pictures/28"}, {"cref": "#/texts/477"}, {"cref": "#/texts/478"}, {"cref": "#/groups/36"}, {"cref": "#/texts/480"}, {"cref": "#/groups/37"}, {"cref": "#/texts/482"}, {"cref": "#/texts/483"}, {"cref": "#/groups/38"}, {"cref": "#/texts/485"}, {"cref": "#/pictures/29"}, {"cref": "#/texts/486"}, {"cref": "#/texts/487"}, {"cref": "#/groups/39"}, {"cref": "#/texts/489"}, {"cref": "#/pictures/30"}, {"cref": "#/texts/490"}, {"cref": "#/texts/491"}, {"cref": "#/groups/40"}, {"cref": "#/texts/493"}, {"cref": "#/texts/494"}, {"cref": "#/groups/41"}, {"cref": "#/texts/496"}, {"cref": "#/pictures/31"}, {"cref": "#/groups/42"}, {"cref": "#/texts/498"}, {"cref": "#/pictures/32"}, {"cref": "#/texts/499"}, {"cref": "#/texts/500"}, {"cref": "#/texts/501"}, {"cref": "#/texts/502"}, {"cref": "#/groups/43"}, {"cref": "#/texts/504"}, {"cref": "#/pictures/33"}, {"cref": "#/groups/44"}, {"cref": "#/texts/506"}, {"cref": "#/pictures/34"}, {"cref": "#/texts/507"}, {"cref": "#/groups/45"}, {"cref": "#/texts/509"}, {"cref": "#/texts/510"}, {"cref": "#/groups/46"}, {"cref": "#/texts/512"}, {"cref": "#/groups/47"}, {"cref": "#/texts/514"}, {"cref": "#/groups/48"}, {"cref": "#/texts/516"}, {"cref": "#/texts/517"}, {"cref": "#/texts/518"}, {"cref": "#/texts/519"}, {"cref": "#/texts/520"}, {"cref": "#/groups/49"}, {"cref": "#/texts/522"}, {"cref": "#/texts/523"}, {"cref": "#/texts/524"}, {"cref": "#/groups/50"}, {"cref": "#/texts/526"}, {"cref": "#/groups/51"}, {"cref": "#/texts/528"}, {"cref": "#/texts/529"}, {"cref": "#/texts/530"}, {"cref": "#/texts/531"}, {"cref": "#/texts/532"}, {"cref": "#/texts/533"}, {"cref": "#/texts/534"}, {"cref": "#/texts/535"}, {"cref": "#/texts/536"}, {"cref": "#/texts/537"}, {"cref": "#/texts/538"}, {"cref": "#/texts/539"}, {"cref": "#/groups/52"}, {"cref": "#/texts/541"}, {"cref": "#/texts/542"}, {"cref": "#/texts/543"}, {"cref": "#/groups/53"}, {"cref": "#/texts/545"}, {"cref": "#/groups/54"}, {"cref": "#/texts/547"}, {"cref": "#/texts/548"}, {"cref": "#/texts/549"}, {"cref": "#/groups/55"}, {"cref": "#/texts/551"}, {"cref": "#/texts/552"}, {"cref": "#/texts/553"}, {"cref": "#/texts/554"}, {"cref": "#/texts/555"}, {"cref": "#/texts/556"}, {"cref": "#/pictures/35"}, {"cref": "#/texts/557"}, {"cref": "#/texts/558"}, {"cref": "#/texts/559"}, {"cref": "#/texts/560"}, {"cref": "#/texts/561"}, {"cref": "#/groups/56"}, {"cref": "#/texts/565"}, {"cref": "#/texts/566"}, {"cref": "#/texts/567"}, {"cref": "#/texts/568"}, {"cref": "#/groups/57"}, {"cref": "#/texts/572"}, {"cref": "#/texts/573"}, {"cref": "#/texts/574"}, {"cref": "#/texts/575"}, {"cref": "#/texts/576"}, {"cref": "#/texts/577"}, {"cref": "#/texts/578"}, {"cref": "#/texts/579"}, {"cref": "#/groups/58"}, {"cref": "#/texts/583"}, {"cref": "#/pictures/36"}, {"cref": "#/texts/584"}, {"cref": "#/texts/585"}, {"cref": "#/groups/59"}, {"cref": "#/texts/592"}, {"cref": "#/texts/593"}, {"cref": "#/texts/594"}, {"cref": "#/texts/595"}, {"cref": "#/texts/596"}, {"cref": "#/texts/597"}, {"cref": "#/pictures/37"}, {"cref": "#/texts/598"}, {"cref": "#/texts/599"}, {"cref": "#/tables/8"}, {"cref": "#/texts/600"}, {"cref": "#/groups/60"}, {"cref": "#/texts/608"}, {"cref": "#/texts/609"}, {"cref": "#/texts/610"}, {"cref": "#/texts/611"}, {"cref": "#/texts/612"}, {"cref": "#/pictures/38"}, {"cref": "#/texts/613"}, {"cref": "#/groups/61"}, {"cref": "#/texts/625"}, {"cref": "#/texts/626"}, {"cref": "#/texts/627"}, {"cref": "#/pictures/39"}, {"cref": "#/texts/628"}, {"cref": "#/texts/629"}, {"cref": "#/texts/630"}, {"cref": "#/texts/631"}, {"cref": "#/groups/62"}, {"cref": "#/texts/634"}, {"cref": "#/pictures/40"}, {"cref": "#/groups/63"}, {"cref": "#/texts/636"}, {"cref": "#/texts/637"}, {"cref": "#/texts/638"}, {"cref": "#/texts/639"}, {"cref": "#/texts/640"}, {"cref": "#/groups/64"}, {"cref": "#/texts/642"}, {"cref": "#/pictures/41"}, {"cref": "#/groups/65"}, {"cref": "#/texts/644"}, {"cref": "#/pictures/42"}, {"cref": "#/groups/66"}, {"cref": "#/texts/646"}, {"cref": "#/groups/67"}, {"cref": "#/texts/648"}, {"cref": "#/pictures/43"}, {"cref": "#/texts/649"}, {"cref": "#/texts/650"}, {"cref": "#/groups/68"}, {"cref": "#/texts/652"}, {"cref": "#/pictures/44"}, {"cref": "#/groups/69"}, {"cref": "#/texts/654"}, {"cref": "#/groups/70"}, {"cref": "#/texts/656"}, {"cref": "#/pictures/45"}, {"cref": "#/texts/657"}, {"cref": "#/texts/658"}, {"cref": "#/texts/659"}, {"cref": "#/texts/660"}, {"cref": "#/texts/661"}, {"cref": "#/texts/662"}, {"cref": "#/groups/71"}, {"cref": "#/texts/664"}, {"cref": "#/pictures/46"}, {"cref": "#/texts/665"}, {"cref": "#/texts/666"}, {"cref": "#/texts/667"}, {"cref": "#/texts/668"}, {"cref": "#/groups/72"}, {"cref": "#/texts/670"}, {"cref": "#/pictures/47"}, {"cref": "#/groups/73"}, {"cref": "#/texts/672"}, {"cref": "#/pictures/48"}, {"cref": "#/groups/74"}, {"cref": "#/texts/674"}, {"cref": "#/pictures/49"}, {"cref": "#/groups/75"}, {"cref": "#/texts/676"}, {"cref": "#/pictures/50"}, {"cref": "#/texts/677"}, {"cref": "#/texts/678"}, {"cref": "#/texts/679"}, {"cref": "#/texts/680"}, {"cref": "#/groups/76"}, {"cref": "#/texts/682"}, {"cref": "#/pictures/51"}, {"cref": "#/texts/683"}, {"cref": "#/texts/684"}, {"cref": "#/texts/685"}, {"cref": "#/groups/77"}, {"cref": "#/texts/687"}, {"cref": "#/pictures/52"}, {"cref": "#/groups/78"}, {"cref": "#/texts/689"}, {"cref": "#/texts/690"}, {"cref": "#/pictures/53"}, {"cref": "#/groups/79"}, {"cref": "#/texts/692"}, {"cref": "#/pictures/54"}, {"cref": "#/texts/693"}, {"cref": "#/texts/694"}, {"cref": "#/texts/695"}, {"cref": "#/texts/696"}, {"cref": "#/texts/697"}, {"cref": "#/groups/80"}, {"cref": "#/texts/699"}, {"cref": "#/pictures/55"}, {"cref": "#/groups/81"}, {"cref": "#/texts/701"}, {"cref": "#/pictures/56"}, {"cref": "#/texts/702"}, {"cref": "#/texts/703"}, {"cref": "#/groups/82"}, {"cref": "#/texts/705"}, {"cref": "#/pictures/57"}, {"cref": "#/groups/83"}, {"cref": "#/texts/707"}, {"cref": "#/pictures/58"}, {"cref": "#/texts/708"}, {"cref": "#/texts/709"}, {"cref": "#/texts/710"}, {"cref": "#/texts/711"}, {"cref": "#/groups/84"}, {"cref": "#/texts/713"}, {"cref": "#/pictures/59"}, {"cref": "#/texts/714"}, {"cref": "#/texts/715"}, {"cref": "#/groups/85"}, {"cref": "#/texts/720"}, {"cref": "#/texts/721"}, {"cref": "#/pictures/60"}, {"cref": "#/texts/722"}, {"cref": "#/texts/723"}, {"cref": "#/groups/86"}, {"cref": "#/texts/728"}, {"cref": "#/texts/729"}, {"cref": "#/pictures/61"}, {"cref": "#/texts/730"}, {"cref": "#/texts/731"}, {"cref": "#/groups/87"}, {"cref": "#/texts/735"}, {"cref": "#/groups/88"}, {"cref": "#/texts/737"}, {"cref": "#/texts/738"}, {"cref": "#/pictures/62"}, {"cref": "#/texts/739"}, {"cref": "#/texts/740"}, {"cref": "#/texts/741"}, {"cref": "#/texts/742"}, {"cref": "#/groups/89"}, {"cref": "#/texts/744"}, {"cref": "#/pictures/63"}, {"cref": "#/texts/745"}, {"cref": "#/texts/746"}, {"cref": "#/groups/90"}, {"cref": "#/texts/748"}, {"cref": "#/pictures/64"}, {"cref": "#/groups/91"}, {"cref": "#/texts/753"}, {"cref": "#/texts/754"}, {"cref": "#/pictures/65"}, {"cref": "#/groups/92"}, {"cref": "#/texts/762"}, {"cref": "#/texts/763"}, {"cref": "#/groups/93"}, {"cref": "#/texts/765"}, {"cref": "#/pictures/66"}, {"cref": "#/texts/766"}, {"cref": "#/texts/767"}, {"cref": "#/texts/768"}, {"cref": "#/groups/94"}, {"cref": "#/texts/770"}, {"cref": "#/pictures/67"}, {"cref": "#/groups/95"}, {"cref": "#/texts/772"}, {"cref": "#/pictures/68"}, {"cref": "#/texts/773"}, {"cref": "#/texts/774"}, {"cref": "#/groups/96"}, {"cref": "#/texts/779"}, {"cref": "#/pictures/69"}, {"cref": "#/texts/780"}, {"cref": "#/texts/781"}, {"cref": "#/groups/97"}, {"cref": "#/texts/783"}, {"cref": "#/pictures/70"}, {"cref": "#/groups/98"}, {"cref": "#/texts/785"}, {"cref": "#/pictures/71"}, {"cref": "#/texts/786"}, {"cref": "#/texts/787"}, {"cref": "#/texts/788"}, {"cref": "#/texts/789"}, {"cref": "#/groups/99"}, {"cref": "#/texts/791"}, {"cref": "#/pictures/72"}, {"cref": "#/groups/100"}, {"cref": "#/texts/793"}, {"cref": "#/pictures/73"}, {"cref": "#/texts/794"}, {"cref": "#/texts/795"}, {"cref": "#/groups/101"}, {"cref": "#/texts/797"}, {"cref": "#/pictures/74"}, {"cref": "#/texts/798"}, {"cref": "#/texts/799"}, {"cref": "#/groups/102"}, {"cref": "#/texts/801"}, {"cref": "#/pictures/75"}, {"cref": "#/texts/802"}, {"cref": "#/texts/803"}, {"cref": "#/groups/103"}, {"cref": "#/texts/805"}, {"cref": "#/pictures/76"}, {"cref": "#/groups/104"}, {"cref": "#/texts/807"}, {"cref": "#/pictures/77"}, {"cref": "#/texts/808"}, {"cref": "#/texts/809"}, {"cref": "#/texts/810"}, {"cref": "#/texts/811"}, {"cref": "#/groups/105"}, {"cref": "#/texts/820"}, {"cref": "#/texts/821"}, {"cref": "#/groups/106"}, {"cref": "#/texts/823"}, {"cref": "#/pictures/78"}, {"cref": "#/groups/107"}, {"cref": "#/texts/825"}, {"cref": "#/pictures/79"}, {"cref": "#/texts/826"}, {"cref": "#/texts/827"}, {"cref": "#/groups/108"}, {"cref": "#/texts/829"}, {"cref": "#/texts/830"}, {"cref": "#/texts/831"}, {"cref": "#/groups/109"}, {"cref": "#/texts/833"}, {"cref": "#/pictures/80"}, {"cref": "#/texts/834"}, {"cref": "#/texts/835"}, {"cref": "#/texts/836"}, {"cref": "#/texts/837"}, {"cref": "#/groups/110"}, {"cref": "#/texts/839"}, {"cref": "#/pictures/81"}, {"cref": "#/groups/111"}, {"cref": "#/texts/841"}, {"cref": "#/pictures/82"}, {"cref": "#/texts/842"}, {"cref": "#/texts/843"}, {"cref": "#/groups/112"}, {"cref": "#/texts/845"}, {"cref": "#/pictures/83"}, {"cref": "#/groups/113"}, {"cref": "#/texts/847"}, {"cref": "#/pictures/84"}, {"cref": "#/groups/114"}, {"cref": "#/texts/849"}, {"cref": "#/pictures/85"}, {"cref": "#/texts/850"}, {"cref": "#/texts/851"}, {"cref": "#/texts/852"}, {"cref": "#/texts/853"}, {"cref": "#/texts/854"}, {"cref": "#/texts/855"}, {"cref": "#/groups/115"}, {"cref": "#/texts/857"}, {"cref": "#/pictures/86"}, {"cref": "#/groups/116"}, {"cref": "#/texts/859"}, {"cref": "#/pictures/87"}, {"cref": "#/groups/117"}, {"cref": "#/texts/861"}, {"cref": "#/texts/862"}, {"cref": "#/texts/863"}, {"cref": "#/groups/118"}, {"cref": "#/texts/865"}, {"cref": "#/pictures/88"}, {"cref": "#/texts/866"}, {"cref": "#/texts/867"}, {"cref": "#/texts/868"}, {"cref": "#/texts/869"}, {"cref": "#/groups/119"}, {"cref": "#/texts/871"}, {"cref": "#/pictures/89"}, {"cref": "#/groups/120"}, {"cref": "#/texts/873"}, {"cref": "#/pictures/90"}, {"cref": "#/groups/121"}, {"cref": "#/texts/875"}, {"cref": "#/pictures/91"}, {"cref": "#/groups/122"}, {"cref": "#/texts/877"}, {"cref": "#/pictures/92"}, {"cref": "#/texts/878"}, {"cref": "#/texts/879"}, {"cref": "#/groups/123"}, {"cref": "#/texts/881"}, {"cref": "#/texts/882"}, {"cref": "#/texts/883"}, {"cref": "#/texts/884"}, {"cref": "#/texts/885"}, {"cref": "#/groups/124"}, {"cref": "#/texts/887"}, {"cref": "#/groups/125"}, {"cref": "#/texts/889"}, {"cref": "#/texts/890"}, {"cref": "#/texts/891"}, {"cref": "#/texts/892"}, {"cref": "#/texts/893"}, {"cref": "#/texts/894"}, {"cref": "#/texts/895"}, {"cref": "#/texts/896"}, {"cref": "#/groups/126"}, {"cref": "#/texts/898"}, {"cref": "#/pictures/93"}, {"cref": "#/groups/127"}, {"cref": "#/texts/900"}, {"cref": "#/pictures/94"}, {"cref": "#/groups/128"}, {"cref": "#/texts/902"}, {"cref": "#/pictures/95"}, {"cref": "#/texts/903"}, {"cref": "#/texts/904"}, {"cref": "#/groups/129"}, {"cref": "#/texts/906"}, {"cref": "#/pictures/96"}, {"cref": "#/texts/907"}, {"cref": "#/texts/908"}, {"cref": "#/pictures/97"}, {"cref": "#/texts/909"}, {"cref": "#/texts/910"}, {"cref": "#/texts/911"}, {"cref": "#/texts/912"}, {"cref": "#/texts/913"}, {"cref": "#/texts/914"}, {"cref": "#/groups/130"}, {"cref": "#/texts/919"}, {"cref": "#/texts/920"}, {"cref": "#/texts/921"}, {"cref": "#/texts/922"}, {"cref": "#/texts/923"}, {"cref": "#/groups/131"}, {"cref": "#/texts/927"}, {"cref": "#/texts/928"}, {"cref": "#/texts/929"}, {"cref": "#/texts/930"}, {"cref": "#/texts/931"}, {"cref": "#/groups/132"}, {"cref": "#/texts/937"}, {"cref": "#/texts/938"}, {"cref": "#/groups/133"}, {"cref": "#/texts/945"}, {"cref": "#/texts/946"}, {"cref": "#/texts/947"}, {"cref": "#/texts/948"}, {"cref": "#/texts/949"}, {"cref": "#/texts/950"}, {"cref": "#/texts/951"}, {"cref": "#/texts/952"}, {"cref": "#/texts/953"}, {"cref": "#/texts/954"}, {"cref": "#/texts/955"}, {"cref": "#/pictures/98"}, {"cref": "#/texts/956"}, {"cref": "#/texts/957"}, {"cref": "#/texts/958"}, {"cref": "#/texts/959"}, {"cref": "#/texts/960"}, {"cref": "#/texts/961"}, {"cref": "#/texts/962"}, {"cref": "#/texts/963"}, {"cref": "#/texts/964"}, {"cref": "#/texts/965"}, {"cref": "#/texts/966"}, {"cref": "#/texts/967"}, {"cref": "#/texts/968"}, {"cref": "#/texts/969"}, {"cref": "#/texts/970"}, {"cref": "#/texts/971"}, {"cref": "#/texts/972"}, {"cref": "#/texts/973"}, {"cref": "#/texts/974"}, {"cref": "#/texts/975"}, {"cref": "#/texts/976"}, {"cref": "#/texts/977"}, {"cref": "#/pictures/99"}, {"cref": "#/texts/978"}, {"cref": "#/texts/979"}, {"cref": "#/texts/980"}, {"cref": "#/groups/134"}, {"cref": "#/texts/989"}, {"cref": "#/groups/135"}, {"cref": "#/texts/1000"}, {"cref": "#/texts/1001"}, {"cref": "#/texts/1002"}, {"cref": "#/texts/1003"}, {"cref": "#/texts/1004"}, {"cref": "#/texts/1005"}, {"cref": "#/texts/1006"}, {"cref": "#/texts/1007"}, {"cref": "#/texts/1008"}, {"cref": "#/texts/1009"}, {"cref": "#/texts/1010"}, {"cref": "#/texts/1011"}, {"cref": "#/texts/1012"}, {"cref": "#/texts/1013"}, {"cref": "#/texts/1014"}, {"cref": "#/tables/9"}, {"cref": "#/texts/1015"}, {"cref": "#/tables/10"}, {"cref": "#/texts/1016"}, {"cref": "#/texts/1017"}, {"cref": "#/texts/1018"}, {"cref": "#/texts/1019"}, {"cref": "#/texts/1020"}, {"cref": "#/texts/1021"}, {"cref": "#/pictures/100"}, {"cref": "#/texts/1022"}, {"cref": "#/texts/1023"}, {"cref": "#/texts/1024"}, {"cref": "#/texts/1025"}, {"cref": "#/texts/1026"}, {"cref": "#/pictures/101"}, {"cref": "#/texts/1027"}, {"cref": "#/texts/1028"}, {"cref": "#/texts/1029"}, {"cref": "#/groups/136"}, {"cref": "#/texts/1033"}, {"cref": "#/texts/1034"}, {"cref": "#/texts/1035"}, {"cref": "#/texts/1036"}, {"cref": "#/texts/1037"}, {"cref": "#/texts/1038"}, {"cref": "#/texts/1039"}, {"cref": "#/texts/1040"}, {"cref": "#/pictures/102"}, {"cref": "#/texts/1041"}, {"cref": "#/texts/1042"}, {"cref": "#/texts/1043"}, {"cref": "#/texts/1044"}, {"cref": "#/texts/1045"}, {"cref": "#/texts/1046"}, {"cref": "#/texts/1047"}, {"cref": "#/texts/1048"}, {"cref": "#/texts/1049"}, {"cref": "#/texts/1050"}, {"cref": "#/pictures/103"}, {"cref": "#/texts/1051"}, {"cref": "#/texts/1052"}, {"cref": "#/texts/1053"}, {"cref": "#/texts/1054"}, {"cref": "#/texts/1055"}, {"cref": "#/texts/1056"}, {"cref": "#/texts/1057"}, {"cref": "#/pictures/104"}, {"cref": "#/texts/1058"}, {"cref": "#/texts/1059"}, {"cref": "#/texts/1060"}, {"cref": "#/texts/1061"}, {"cref": "#/texts/1062"}, {"cref": "#/texts/1063"}, {"cref": "#/texts/1064"}, {"cref": "#/texts/1065"}, {"cref": "#/texts/1066"}, {"cref": "#/pictures/105"}, {"cref": "#/texts/1067"}, {"cref": "#/texts/1068"}, {"cref": "#/texts/1069"}, {"cref": "#/pictures/106"}, {"cref": "#/texts/1070"}, {"cref": "#/texts/1071"}, {"cref": "#/texts/1072"}, {"cref": "#/pictures/107"}, {"cref": "#/texts/1073"}, {"cref": "#/texts/1074"}, {"cref": "#/texts/1075"}, {"cref": "#/texts/1076"}, {"cref": "#/texts/1077"}, {"cref": "#/pictures/108"}, {"cref": "#/texts/1078"}, {"cref": "#/texts/1079"}, {"cref": "#/texts/1080"}, {"cref": "#/texts/1081"}, {"cref": "#/texts/1082"}, {"cref": "#/pictures/109"}, {"cref": "#/texts/1083"}, {"cref": "#/texts/1084"}, {"cref": "#/texts/1085"}, {"cref": "#/texts/1086"}, {"cref": "#/texts/1087"}, {"cref": "#/pictures/110"}, {"cref": "#/texts/1088"}, {"cref": "#/texts/1089"}, {"cref": "#/pictures/111"}, {"cref": "#/texts/1090"}, {"cref": "#/texts/1091"}, {"cref": "#/texts/1092"}, {"cref": "#/texts/1093"}, {"cref": "#/texts/1094"}, {"cref": "#/groups/137"}, {"cref": "#/texts/1099"}, {"cref": "#/texts/1100"}, {"cref": "#/texts/1101"}, {"cref": "#/texts/1102"}, {"cref": "#/texts/1103"}, {"cref": "#/texts/1104"}, {"cref": "#/texts/1105"}, {"cref": "#/texts/1106"}, {"cref": "#/texts/1107"}, {"cref": "#/texts/1108"}, {"cref": "#/pictures/112"}, {"cref": "#/texts/1109"}, {"cref": "#/texts/1110"}, {"cref": "#/pictures/113"}, {"cref": "#/texts/1111"}, {"cref": "#/texts/1112"}, {"cref": "#/pictures/114"}, {"cref": "#/texts/1113"}, {"cref": "#/texts/1114"}, {"cref": "#/texts/1115"}, {"cref": "#/texts/1116"}, {"cref": "#/pictures/115"}, {"cref": "#/texts/1117"}, {"cref": "#/texts/1118"}, {"cref": "#/texts/1119"}, {"cref": "#/texts/1120"}, {"cref": "#/texts/1121"}, {"cref": "#/texts/1122"}, {"cref": "#/texts/1123"}, {"cref": "#/texts/1124"}, {"cref": "#/texts/1125"}, {"cref": "#/texts/1126"}, {"cref": "#/texts/1127"}, {"cref": "#/pictures/116"}, {"cref": "#/texts/1128"}, {"cref": "#/texts/1129"}, {"cref": "#/pictures/117"}, {"cref": "#/texts/1130"}, {"cref": "#/texts/1131"}, {"cref": "#/texts/1132"}, {"cref": "#/texts/1133"}, {"cref": "#/texts/1134"}, {"cref": "#/texts/1135"}, {"cref": "#/texts/1136"}, {"cref": "#/texts/1137"}, {"cref": "#/texts/1138"}, {"cref": "#/groups/138"}, {"cref": "#/texts/1159"}, {"cref": "#/groups/139"}, {"cref": "#/texts/1171"}, {"cref": "#/texts/1172"}, {"cref": "#/texts/1173"}, {"cref": "#/texts/1174"}, {"cref": "#/texts/1175"}, {"cref": "#/texts/1176"}, {"cref": "#/texts/1177"}, {"cref": "#/texts/1178"}, {"cref": "#/texts/1179"}, {"cref": "#/pictures/118"}, {"cref": "#/texts/1180"}, {"cref": "#/texts/1181"}, {"cref": "#/texts/1182"}, {"cref": "#/texts/1183"}, {"cref": "#/pictures/119"}, {"cref": "#/texts/1184"}, {"cref": "#/texts/1185"}, {"cref": "#/texts/1186"}, {"cref": "#/texts/1187"}, {"cref": "#/texts/1188"}, {"cref": "#/groups/140"}, {"cref": "#/texts/1190"}, {"cref": "#/texts/1191"}, {"cref": "#/texts/1192"}, {"cref": "#/texts/1193"}, {"cref": "#/texts/1194"}, {"cref": "#/groups/141"}, {"cref": "#/texts/1196"}, {"cref": "#/groups/142"}, {"cref": "#/texts/1198"}, {"cref": "#/groups/143"}, {"cref": "#/texts/1200"}, {"cref": "#/texts/1201"}, {"cref": "#/texts/1202"}, {"cref": "#/groups/144"}, {"cref": "#/texts/1204"}, {"cref": "#/groups/145"}, {"cref": "#/texts/1206"}, {"cref": "#/texts/1207"}, {"cref": "#/texts/1208"}, {"cref": "#/texts/1209"}, {"cref": "#/groups/146"}, {"cref": "#/texts/1213"}, {"cref": "#/texts/1214"}, {"cref": "#/texts/1215"}, {"cref": "#/texts/1216"}, {"cref": "#/texts/1217"}, {"cref": "#/texts/1218"}, {"cref": "#/texts/1219"}, {"cref": "#/texts/1220"}, {"cref": "#/texts/1221"}, {"cref": "#/texts/1222"}, {"cref": "#/texts/1223"}, {"cref": "#/texts/1224"}, {"cref": "#/texts/1225"}, {"cref": "#/texts/1226"}, {"cref": "#/pictures/120"}, {"cref": "#/texts/1227"}, {"cref": "#/texts/1228"}, {"cref": "#/pictures/121"}, {"cref": "#/texts/1229"}, {"cref": "#/texts/1230"}, {"cref": "#/texts/1231"}, {"cref": "#/texts/1232"}, {"cref": "#/groups/147"}, {"cref": "#/texts/1238"}, {"cref": "#/texts/1239"}, {"cref": "#/texts/1240"}, {"cref": "#/groups/148"}, {"cref": "#/texts/1243"}, {"cref": "#/texts/1244"}, {"cref": "#/texts/1245"}, {"cref": "#/texts/1246"}, {"cref": "#/texts/1247"}, {"cref": "#/texts/1248"}, {"cref": "#/texts/1249"}, {"cref": "#/texts/1250"}, {"cref": "#/texts/1251"}, {"cref": "#/texts/1252"}, {"cref": "#/texts/1253"}, {"cref": "#/texts/1254"}, {"cref": "#/texts/1255"}, {"cref": "#/texts/1256"}, {"cref": "#/texts/1257"}, {"cref": "#/texts/1258"}, {"cref": "#/texts/1259"}, {"cref": "#/texts/1260"}, {"cref": "#/texts/1261"}, {"cref": "#/texts/1262"}, {"cref": "#/texts/1263"}, {"cref": "#/texts/1264"}, {"cref": "#/texts/1265"}, {"cref": "#/texts/1266"}, {"cref": "#/texts/1267"}, {"cref": "#/texts/1268"}, {"cref": "#/texts/1269"}, {"cref": "#/texts/1270"}, {"cref": "#/texts/1271"}, {"cref": "#/texts/1272"}, {"cref": "#/texts/1273"}, {"cref": "#/texts/1274"}, {"cref": "#/texts/1275"}, {"cref": "#/texts/1276"}, {"cref": "#/texts/1277"}, {"cref": "#/texts/1278"}, {"cref": "#/texts/1279"}, {"cref": "#/groups/149"}, {"cref": "#/texts/1283"}, {"cref": "#/groups/150"}, {"cref": "#/texts/1286"}, {"cref": "#/texts/1287"}, {"cref": "#/texts/1288"}, {"cref": "#/texts/1289"}, {"cref": "#/pictures/122"}, {"cref": "#/texts/1290"}, {"cref": "#/texts/1291"}, {"cref": "#/texts/1292"}, {"cref": "#/texts/1293"}, {"cref": "#/texts/1294"}, {"cref": "#/texts/1295"}, {"cref": "#/texts/1296"}, {"cref": "#/texts/1297"}, {"cref": "#/pictures/123"}, {"cref": "#/texts/1298"}, {"cref": "#/texts/1299"}, {"cref": "#/texts/1300"}, {"cref": "#/texts/1301"}, {"cref": "#/texts/1302"}, {"cref": "#/groups/151"}, {"cref": "#/texts/1306"}, {"cref": "#/texts/1307"}, {"cref": "#/texts/1308"}, {"cref": "#/texts/1309"}, {"cref": "#/texts/1310"}, {"cref": "#/texts/1311"}, {"cref": "#/texts/1312"}, {"cref": "#/texts/1313"}, {"cref": "#/texts/1314"}, {"cref": "#/texts/1315"}, {"cref": "#/texts/1316"}, {"cref": "#/texts/1317"}, {"cref": "#/texts/1318"}, {"cref": "#/texts/1319"}, {"cref": "#/texts/1320"}, {"cref": "#/texts/1321"}, {"cref": "#/texts/1322"}, {"cref": "#/texts/1323"}, {"cref": "#/texts/1324"}, {"cref": "#/texts/1325"}, {"cref": "#/texts/1326"}, {"cref": "#/texts/1327"}, {"cref": "#/texts/1328"}, {"cref": "#/texts/1329"}, {"cref": "#/texts/1330"}, {"cref": "#/texts/1331"}, {"cref": "#/texts/1332"}, {"cref": "#/texts/1333"}, {"cref": "#/texts/1334"}, {"cref": "#/texts/1335"}, {"cref": "#/pictures/124"}, {"cref": "#/texts/1336"}, {"cref": "#/texts/1337"}, {"cref": "#/texts/1338"}, {"cref": "#/texts/1339"}, {"cref": "#/texts/1340"}, {"cref": "#/texts/1341"}, {"cref": "#/texts/1342"}, {"cref": "#/texts/1343"}, {"cref": "#/texts/1344"}, {"cref": "#/groups/152"}, {"cref": "#/texts/1349"}, {"cref": "#/texts/1350"}, {"cref": "#/texts/1351"}, {"cref": "#/texts/1352"}, {"cref": "#/pictures/125"}, {"cref": "#/texts/1353"}, {"cref": "#/texts/1354"}, {"cref": "#/texts/1355"}, {"cref": "#/texts/1356"}, {"cref": "#/groups/153"}, {"cref": "#/texts/1359"}, {"cref": "#/texts/1360"}, {"cref": "#/texts/1361"}, {"cref": "#/texts/1362"}, {"cref": "#/texts/1363"}, {"cref": "#/texts/1364"}, {"cref": "#/texts/1365"}, {"cref": "#/texts/1366"}, {"cref": "#/groups/154"}, {"cref": "#/texts/1373"}, {"cref": "#/texts/1374"}, {"cref": "#/texts/1375"}, {"cref": "#/texts/1376"}, {"cref": "#/texts/1377"}, {"cref": "#/texts/1378"}, {"cref": "#/texts/1379"}, {"cref": "#/pictures/126"}, {"cref": "#/texts/1380"}, {"cref": "#/texts/1381"}, {"cref": "#/texts/1382"}, {"cref": "#/texts/1383"}, {"cref": "#/texts/1384"}, {"cref": "#/texts/1385"}, {"cref": "#/texts/1386"}, {"cref": "#/texts/1387"}, {"cref": "#/texts/1388"}, {"cref": "#/texts/1389"}, {"cref": "#/texts/1390"}, {"cref": "#/texts/1391"}, {"cref": "#/texts/1392"}, {"cref": "#/texts/1393"}, {"cref": "#/texts/1394"}, {"cref": "#/texts/1395"}, {"cref": "#/texts/1396"}, {"cref": "#/texts/1397"}, {"cref": "#/texts/1398"}, {"cref": "#/texts/1399"}, {"cref": "#/texts/1400"}, {"cref": "#/texts/1401"}, {"cref": "#/texts/1402"}, {"cref": "#/texts/1403"}, {"cref": "#/texts/1404"}, {"cref": "#/texts/1405"}, {"cref": "#/groups/155"}, {"cref": "#/texts/1416"}, {"cref": "#/texts/1417"}, {"cref": "#/groups/156"}, {"cref": "#/texts/1424"}, {"cref": "#/texts/1425"}, {"cref": "#/texts/1426"}, {"cref": "#/texts/1427"}, {"cref": "#/texts/1428"}, {"cref": "#/texts/1429"}, {"cref": "#/texts/1430"}, {"cref": "#/texts/1431"}, {"cref": "#/texts/1432"}, {"cref": "#/texts/1433"}, {"cref": "#/texts/1434"}, {"cref": "#/texts/1435"}, {"cref": "#/texts/1436"}, {"cref": "#/texts/1437"}, {"cref": "#/texts/1438"}, {"cref": "#/texts/1439"}, {"cref": "#/texts/1440"}, {"cref": "#/pictures/127"}, {"cref": "#/pictures/128"}, {"cref": "#/texts/1441"}, {"cref": "#/texts/1442"}, {"cref": "#/texts/1443"}, {"cref": "#/texts/1444"}], "name": "_root_", "label": "unspecified"}, "groups": [{"self_ref": "#/groups/0", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/62"}, {"cref": "#/texts/63"}, {"cref": "#/texts/64"}, {"cref": "#/texts/65"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/1", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/75"}, {"cref": "#/texts/76"}, {"cref": "#/texts/77"}, {"cref": "#/texts/78"}, {"cref": "#/texts/79"}, {"cref": "#/texts/80"}, {"cref": "#/texts/81"}, {"cref": "#/texts/82"}, {"cref": "#/texts/83"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/2", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/86"}, {"cref": "#/texts/87"}, {"cref": "#/texts/88"}, {"cref": "#/texts/89"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/3", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/132"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/4", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/138"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/5", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/140"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/6", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/143"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/7", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/145"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/8", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/147"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/9", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/149"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/10", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/151"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/11", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/159"}, {"cref": "#/texts/160"}, {"cref": "#/texts/161"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/12", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/168"}, {"cref": "#/texts/169"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/13", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/171"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/14", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/209"}, {"cref": "#/texts/210"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/15", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/217"}, {"cref": "#/texts/218"}, {"cref": "#/texts/219"}, {"cref": "#/texts/220"}, {"cref": "#/texts/221"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/16", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/251"}, {"cref": "#/texts/252"}, {"cref": "#/texts/253"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/17", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/282"}, {"cref": "#/texts/283"}, {"cref": "#/texts/284"}, {"cref": "#/texts/285"}, {"cref": "#/texts/286"}, {"cref": "#/texts/287"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/18", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/293"}, {"cref": "#/texts/294"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/19", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/335"}, {"cref": "#/texts/336"}, {"cref": "#/texts/337"}, {"cref": "#/texts/338"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/20", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/343"}, {"cref": "#/texts/344"}, {"cref": "#/texts/345"}, {"cref": "#/texts/346"}, {"cref": "#/texts/347"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/21", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/362"}, {"cref": "#/texts/363"}, {"cref": "#/texts/364"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/22", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/393"}, {"cref": "#/texts/394"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/23", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/396"}, {"cref": "#/texts/397"}, {"cref": "#/texts/398"}, {"cref": "#/texts/399"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/24", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/403"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/25", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/406"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/26", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/409"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/27", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/413"}, {"cref": "#/texts/414"}, {"cref": "#/texts/415"}, {"cref": "#/texts/416"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/28", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/424"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/29", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/428"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/30", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/433"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/31", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/440"}, {"cref": "#/texts/441"}, {"cref": "#/texts/442"}, {"cref": "#/texts/443"}, {"cref": "#/texts/444"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/32", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/452"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/33", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/456"}, {"cref": "#/texts/457"}, {"cref": "#/texts/458"}, {"cref": "#/texts/459"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/34", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/465"}, {"cref": "#/texts/466"}, {"cref": "#/texts/467"}, {"cref": "#/texts/468"}, {"cref": "#/texts/469"}, {"cref": "#/texts/470"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/35", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/475"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/36", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/479"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/37", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/481"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/38", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/484"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/39", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/488"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/40", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/492"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/41", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/495"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/42", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/497"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/43", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/503"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/44", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/505"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/45", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/508"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/46", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/511"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/47", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/513"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/48", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/515"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/49", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/521"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/50", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/525"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/51", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/527"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/52", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/540"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/53", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/544"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/54", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/546"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/55", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/550"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/56", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/562"}, {"cref": "#/texts/563"}, {"cref": "#/texts/564"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/57", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/569"}, {"cref": "#/texts/570"}, {"cref": "#/texts/571"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/58", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/580"}, {"cref": "#/texts/581"}, {"cref": "#/texts/582"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/59", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/586"}, {"cref": "#/texts/587"}, {"cref": "#/texts/588"}, {"cref": "#/texts/589"}, {"cref": "#/texts/590"}, {"cref": "#/texts/591"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/60", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/601"}, {"cref": "#/texts/602"}, {"cref": "#/texts/603"}, {"cref": "#/texts/604"}, {"cref": "#/texts/605"}, {"cref": "#/texts/606"}, {"cref": "#/texts/607"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/61", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/614"}, {"cref": "#/texts/615"}, {"cref": "#/texts/616"}, {"cref": "#/texts/617"}, {"cref": "#/texts/618"}, {"cref": "#/texts/619"}, {"cref": "#/texts/620"}, {"cref": "#/texts/621"}, {"cref": "#/texts/622"}, {"cref": "#/texts/623"}, {"cref": "#/texts/624"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/62", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/632"}, {"cref": "#/texts/633"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/63", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/635"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/64", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/641"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/65", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/643"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/66", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/645"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/67", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/647"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/68", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/651"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/69", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/653"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/70", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/655"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/71", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/663"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/72", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/669"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/73", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/671"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/74", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/673"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/75", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/675"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/76", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/681"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/77", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/686"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/78", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/688"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/79", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/691"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/80", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/698"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/81", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/700"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/82", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/704"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/83", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/706"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/84", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/712"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/85", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/716"}, {"cref": "#/texts/717"}, {"cref": "#/texts/718"}, {"cref": "#/texts/719"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/86", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/724"}, {"cref": "#/texts/725"}, {"cref": "#/texts/726"}, {"cref": "#/texts/727"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/87", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/732"}, {"cref": "#/texts/733"}, {"cref": "#/texts/734"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/88", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/736"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/89", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/743"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/90", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/747"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/91", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/749"}, {"cref": "#/texts/750"}, {"cref": "#/texts/751"}, {"cref": "#/texts/752"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/92", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/755"}, {"cref": "#/texts/756"}, {"cref": "#/texts/757"}, {"cref": "#/texts/758"}, {"cref": "#/texts/759"}, {"cref": "#/texts/760"}, {"cref": "#/texts/761"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/93", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/764"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/94", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/769"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/95", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/771"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/96", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/775"}, {"cref": "#/texts/776"}, {"cref": "#/texts/777"}, {"cref": "#/texts/778"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/97", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/782"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/98", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/784"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/99", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/790"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/100", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/792"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/101", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/796"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/102", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/800"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/103", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/804"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/104", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/806"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/105", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/812"}, {"cref": "#/texts/813"}, {"cref": "#/texts/814"}, {"cref": "#/texts/815"}, {"cref": "#/texts/816"}, {"cref": "#/texts/817"}, {"cref": "#/texts/818"}, {"cref": "#/texts/819"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/106", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/822"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/107", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/824"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/108", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/828"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/109", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/832"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/110", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/838"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/111", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/840"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/112", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/844"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/113", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/846"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/114", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/848"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/115", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/856"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/116", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/858"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/117", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/860"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/118", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/864"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/119", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/870"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/120", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/872"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/121", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/874"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/122", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/876"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/123", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/880"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/124", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/886"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/125", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/888"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/126", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/897"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/127", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/899"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/128", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/901"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/129", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/905"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/130", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/915"}, {"cref": "#/texts/916"}, {"cref": "#/texts/917"}, {"cref": "#/texts/918"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/131", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/924"}, {"cref": "#/texts/925"}, {"cref": "#/texts/926"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/132", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/932"}, {"cref": "#/texts/933"}, {"cref": "#/texts/934"}, {"cref": "#/texts/935"}, {"cref": "#/texts/936"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/133", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/939"}, {"cref": "#/texts/940"}, {"cref": "#/texts/941"}, {"cref": "#/texts/942"}, {"cref": "#/texts/943"}, {"cref": "#/texts/944"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/134", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/981"}, {"cref": "#/texts/982"}, {"cref": "#/texts/983"}, {"cref": "#/texts/984"}, {"cref": "#/texts/985"}, {"cref": "#/texts/986"}, {"cref": "#/texts/987"}, {"cref": "#/texts/988"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/135", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/990"}, {"cref": "#/texts/991"}, {"cref": "#/texts/992"}, {"cref": "#/texts/993"}, {"cref": "#/texts/994"}, {"cref": "#/texts/995"}, {"cref": "#/texts/996"}, {"cref": "#/texts/997"}, {"cref": "#/texts/998"}, {"cref": "#/texts/999"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/136", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1030"}, {"cref": "#/texts/1031"}, {"cref": "#/texts/1032"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/137", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1095"}, {"cref": "#/texts/1096"}, {"cref": "#/texts/1097"}, {"cref": "#/texts/1098"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/138", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1139"}, {"cref": "#/texts/1140"}, {"cref": "#/texts/1141"}, {"cref": "#/texts/1142"}, {"cref": "#/texts/1143"}, {"cref": "#/texts/1144"}, {"cref": "#/texts/1145"}, {"cref": "#/texts/1146"}, {"cref": "#/texts/1147"}, {"cref": "#/texts/1148"}, {"cref": "#/texts/1149"}, {"cref": "#/texts/1150"}, {"cref": "#/texts/1151"}, {"cref": "#/texts/1152"}, {"cref": "#/texts/1153"}, {"cref": "#/texts/1154"}, {"cref": "#/texts/1155"}, {"cref": "#/texts/1156"}, {"cref": "#/texts/1157"}, {"cref": "#/texts/1158"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/139", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1160"}, {"cref": "#/texts/1161"}, {"cref": "#/texts/1162"}, {"cref": "#/texts/1163"}, {"cref": "#/texts/1164"}, {"cref": "#/texts/1165"}, {"cref": "#/texts/1166"}, {"cref": "#/texts/1167"}, {"cref": "#/texts/1168"}, {"cref": "#/texts/1169"}, {"cref": "#/texts/1170"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/140", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1189"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/141", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1195"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/142", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1197"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/143", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1199"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/144", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1203"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/145", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1205"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/146", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1210"}, {"cref": "#/texts/1211"}, {"cref": "#/texts/1212"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/147", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1233"}, {"cref": "#/texts/1234"}, {"cref": "#/texts/1235"}, {"cref": "#/texts/1236"}, {"cref": "#/texts/1237"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/148", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1241"}, {"cref": "#/texts/1242"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/149", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1280"}, {"cref": "#/texts/1281"}, {"cref": "#/texts/1282"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/150", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1284"}, {"cref": "#/texts/1285"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/151", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1303"}, {"cref": "#/texts/1304"}, {"cref": "#/texts/1305"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/152", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1345"}, {"cref": "#/texts/1346"}, {"cref": "#/texts/1347"}, {"cref": "#/texts/1348"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/153", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1357"}, {"cref": "#/texts/1358"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/154", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1367"}, {"cref": "#/texts/1368"}, {"cref": "#/texts/1369"}, {"cref": "#/texts/1370"}, {"cref": "#/texts/1371"}, {"cref": "#/texts/1372"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/155", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1406"}, {"cref": "#/texts/1407"}, {"cref": "#/texts/1408"}, {"cref": "#/texts/1409"}, {"cref": "#/texts/1410"}, {"cref": "#/texts/1411"}, {"cref": "#/texts/1412"}, {"cref": "#/texts/1413"}, {"cref": "#/texts/1414"}, {"cref": "#/texts/1415"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/156", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/1418"}, {"cref": "#/texts/1419"}, {"cref": "#/texts/1420"}, {"cref": "#/texts/1421"}, {"cref": "#/texts/1422"}, {"cref": "#/texts/1423"}], "name": "list", "label": "list"}], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 287.82000732421875, "t": 763.4519653320312, "r": 418.83355712890625, "b": 741.251953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Front cover", "text": "Front cover"}, {"self_ref": "#/texts/1", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 1, "bbox": {"l": 35.68840408325195, "t": 709.605712890625, "r": 584.6428833007812, "b": 625.594482421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i", "level": 1}, {"self_ref": "#/texts/2", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 35.0073127746582, "t": 497.2061767578125, "r": 216.00064086914062, "b": 466.4394226074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Implement roles and separation of duties", "text": "Implement roles and separation of duties"}, {"self_ref": "#/texts/3", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 34.56448745727539, "t": 443.0459289550781, "r": 202.45404052734375, "b": 412.4388732910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Leverage row permissions on the database", "text": "Leverage row permissions on the database"}, {"self_ref": "#/texts/4", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 35.171409606933594, "t": 389.3459167480469, "r": 195.27529907226562, "b": 358.4383239746094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Protect columns by defining column masks", "text": "Protect columns by defining column masks"}, {"self_ref": "#/texts/5", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 1, "bbox": {"l": 36.894657135009766, "t": 42.1337890625, "r": 164.45849609375, "b": 26.895000457763672, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "ibm.com /redbooks", "text": "ibm.com /redbooks"}, {"self_ref": "#/texts/6", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 497.0279846191406, "t": 218.1163330078125, "r": 581.8246459960938, "b": 92.828369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan", "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"self_ref": "#/texts/7", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 314.70001220703125, "t": 80.49143981933594, "r": 580.52001953125, "b": 18.227041244506836, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "Redpaper", "text": "Redpaper"}, {"self_ref": "#/texts/8", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 3, "bbox": {"l": 192.0, "t": 721.0047607421875, "r": 468.1595153808594, "b": 706.8116455078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "International Technical Support Organization", "text": "International Technical Support Organization", "level": 1}, {"self_ref": "#/texts/9", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 3, "bbox": {"l": 191.42994689941406, "t": 688.5792236328125, "r": 551.7711181640625, "b": 659.2655639648438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i", "level": 1}, {"self_ref": "#/texts/10", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 191.8452911376953, "t": 642.7902221679688, "r": 290.98956298828125, "b": 629.265869140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 13]}], "orig": "November 2014", "text": "November 2014"}, {"self_ref": "#/texts/11", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 3, "bbox": {"l": 479.1854553222656, "t": 38.04693603515625, "r": 547.263671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "REDP-5110-00", "text": "REDP-5110-00"}, {"self_ref": "#/texts/12", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 70.31981658935547, "t": 703.502685546875, "r": 511.2250671386719, "b": 680.7681884765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 111]}], "orig": "Note: Before using this information and the product it supports, read the information in \"Notices\" on page vii.", "text": "Note: Before using this information and the product it supports, read the information in \"Notices\" on page vii."}, {"self_ref": "#/texts/13", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 4, "bbox": {"l": 64.49017333984375, "t": 106.751953125, "r": 206.09754943847656, "b": 96.25506591796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "First Edition (November 2014)", "text": "First Edition (November 2014)", "level": 1}, {"self_ref": "#/texts/14", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 63.900901794433594, "t": 84.0731201171875, "r": 422.2424621582031, "b": 73.747314453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 80]}], "orig": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1)."}, {"self_ref": "#/texts/15", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 4, "bbox": {"l": 63.55229949951172, "t": 54.7935791015625, "r": 426.39117431640625, "b": 45.16082763671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "orig": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "text": "' Copyright International Business Machines Corporation 2014. All rights reserved."}, {"self_ref": "#/texts/16", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 64.10758972167969, "t": 44.3375244140625, "r": 547.2008666992188, "b": 23.57710075378418, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.", "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp."}, {"self_ref": "#/texts/17", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 5, "bbox": {"l": 64.6857681274414, "t": 718.98193359375, "r": 168.73440551757812, "b": 695.9519653320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "Contents", "text": "Contents", "level": 1}, {"self_ref": "#/texts/18", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 5, "bbox": {"l": 63.751060485839844, "t": 37.30303955078125, "r": 257.24334716796875, "b": 27.8984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/19", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 5, "bbox": {"l": 538.3257446289062, "t": 37.91693115234375, "r": 547.25927734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "iii", "text": "iii"}, {"self_ref": "#/texts/20", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 6, "bbox": {"l": 64.4805679321289, "t": 37.88385009765625, "r": 75.64199829101562, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "iv", "text": "iv"}, {"self_ref": "#/texts/21", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 6, "bbox": {"l": 90.44805145263672, "t": 37.39471435546875, "r": 331.7034606933594, "b": 28.0523681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/22", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 7, "bbox": {"l": 488.2200012207031, "t": 37.1326904296875, "r": 529.1115112304688, "b": 28.136999130249023, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "Contents", "text": "Contents"}, {"self_ref": "#/texts/23", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 7, "bbox": {"l": 540.8323974609375, "t": 37.15127944946289, "r": 547.3976440429688, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "v", "text": "v"}, {"self_ref": "#/texts/24", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 8, "bbox": {"l": 64.35196685791016, "t": 37.79052734375, "r": 75.64199829101562, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "vi", "text": "vi"}, {"self_ref": "#/texts/25", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 8, "bbox": {"l": 90.52510833740234, "t": 37.53863525390625, "r": 331.7355651855469, "b": 27.85345458984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/26", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 9, "bbox": {"l": 64.80000305175781, "t": 719.0535888671875, "r": 151.5048065185547, "b": 695.9519653320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Notices", "text": "Notices", "level": 1}, {"self_ref": "#/texts/27", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 63.85922622680664, "t": 660.0452880859375, "r": 413.7007141113281, "b": 650.037109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "This information was developed for products and services offered in the U.S.A.", "text": "This information was developed for products and services offered in the U.S.A."}, {"self_ref": "#/texts/28", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 64.08584594726562, "t": 640.2033081054688, "r": 547.235595703125, "b": 579.486572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 625]}], "orig": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service.", "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"self_ref": "#/texts/29", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 64.23300170898438, "t": 570.0869140625, "r": 547.2992553710938, "b": 540.159912109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:", "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"self_ref": "#/texts/30", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 64.32848358154297, "t": 540.1092529296875, "r": 489.1996154785156, "b": 529.6168212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 92]}], "orig": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A."}, {"self_ref": "#/texts/31", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 63.91102600097656, "t": 520.1630249023438, "r": 547.1917114257812, "b": 459.743408203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 541]}], "orig": "The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you.", "text": "The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"self_ref": "#/texts/32", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 63.85258865356445, "t": 449.9327087402344, "r": 547.2783813476562, "b": 410.14208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 345]}], "orig": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice.", "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"self_ref": "#/texts/33", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 64.01903533935547, "t": 400.0287780761719, "r": 539.7974243164062, "b": 369.8486633300781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 286]}], "orig": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk.", "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"self_ref": "#/texts/34", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 64.25189208984375, "t": 359.9352111816406, "r": 547.1986694335938, "b": 339.6141662597656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 135]}], "orig": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you.", "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you."}, {"self_ref": "#/texts/35", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 64.00050354003906, "t": 329.7486267089844, "r": 544.1587524414062, "b": 270.11480712890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 526]}], "orig": "Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment.", "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment."}, {"self_ref": "#/texts/36", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 64.13472747802734, "t": 259.93731689453125, "r": 547.231689453125, "b": 219.73095703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 408]}], "orig": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products.", "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"self_ref": "#/texts/37", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 63.89973449707031, "t": 209.7525634765625, "r": 545.7865600585938, "b": 169.85992431640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 359]}], "orig": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental.", "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental."}, {"self_ref": "#/texts/38", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 9, "bbox": {"l": 64.30471801757812, "t": 160.33880615234375, "r": 172.49951171875, "b": 150.16415405273438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "COPYRIGHT LICENSE:", "text": "COPYRIGHT LICENSE:", "level": 1}, {"self_ref": "#/texts/39", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 63.98580551147461, "t": 140.032958984375, "r": 547.2437744140625, "b": 79.4564208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 619]}], "orig": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs.", "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs."}, {"self_ref": "#/texts/40", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 9, "bbox": {"l": 63.6475715637207, "t": 37.2679443359375, "r": 257.24334716796875, "b": 27.83892822265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/41", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 9, "bbox": {"l": 535.3445434570312, "t": 37.6517333984375, "r": 547.250244140625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "vii", "text": "vii"}, {"self_ref": "#/texts/42", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 10, "bbox": {"l": 64.09756469726562, "t": 721.870849609375, "r": 154.14569091796875, "b": 706.0162963867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Trademarks", "text": "Trademarks", "level": 1}, {"self_ref": "#/texts/43", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 64.14087677001953, "t": 689.2691040039062, "r": 547.2604370117188, "b": 629.2591552734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 591]}], "orig": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml", "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml"}, {"self_ref": "#/texts/44", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 63.81353759765625, "t": 619.277587890625, "r": 546.6150512695312, "b": 599.2596435546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 133]}], "orig": "The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both:", "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both:"}, {"self_ref": "#/texts/45", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 75.01971435546875, "t": 591.0765380859375, "r": 112.14369201660156, "b": 581.1570434570312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "AS/400fi", "text": "AS/400fi"}, {"self_ref": "#/texts/46", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 75.20001220703125, "t": 580.0547485351562, "r": 100.03594970703125, "b": 570.1167602539062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 5]}], "orig": "DB2fi", "text": "DB2fi"}, {"self_ref": "#/texts/47", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 75.27558898925781, "t": 568.40380859375, "r": 107.95845794677734, "b": 559.1367797851562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 6]}], "orig": "DRDAfi", "text": "DRDAfi"}, {"self_ref": "#/texts/48", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 235.85794067382812, "t": 590.7225341796875, "r": 259.61248779296875, "b": 581.1571044921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 5]}], "orig": "IBMfi", "text": "IBMfi"}, {"self_ref": "#/texts/49", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 235.99562072753906, "t": 579.8333129882812, "r": 307.14569091796875, "b": 570.1168212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Power Systems\u2122", "text": "Power Systems\u2122"}, {"self_ref": "#/texts/50", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 236.1086883544922, "t": 568.2393798828125, "r": 283.57794189453125, "b": 559.1368408203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Redbooksfi", "text": "Redbooksfi"}, {"self_ref": "#/texts/51", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 396.9049377441406, "t": 590.8819580078125, "r": 445.7533874511719, "b": 581.1571655273438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 9]}], "orig": "Redpaper\u2122", "text": "Redpaper\u2122"}, {"self_ref": "#/texts/52", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 397.0493469238281, "t": 579.3828735351562, "r": 464.00567626953125, "b": 569.7461547851562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "Redbooks (log o) fi System", "text": "Redbooks (log o) fi System"}, {"self_ref": "#/texts/53", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 396.6751708984375, "t": 568.2816162109375, "r": 438.42291259765625, "b": 558.4414672851562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "ifi", "text": "ifi"}, {"self_ref": "#/texts/54", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 63.997196197509766, "t": 547.1436157226562, "r": 311.9006652832031, "b": 537.2783203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "The following terms are trademarks of other companies:", "text": "The following terms are trademarks of other companies:"}, {"self_ref": "#/texts/55", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 63.95560073852539, "t": 527.1810302734375, "r": 509.53704833984375, "b": 507.27880859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 117]}], "orig": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both.", "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both."}, {"self_ref": "#/texts/56", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 64.17562103271484, "t": 497.43646240234375, "r": 464.51568603515625, "b": 486.9937438964844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 86]}], "orig": "Other company, product, or service names may be trademarks or service marks of others.", "text": "Other company, product, or service names may be trademarks or service marks of others."}, {"self_ref": "#/texts/57", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 10, "bbox": {"l": 63.85106658935547, "t": 36.138671875, "r": 81.16200256347656, "b": 26.91827964782715, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 4]}], "orig": "viii", "text": "viii"}, {"self_ref": "#/texts/58", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 10, "bbox": {"l": 95.8013916015625, "t": 36.20538330078125, "r": 337.0337829589844, "b": 26.6639404296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/59", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 64.80000305175781, "t": 717.5160522460938, "r": 235.86239624023438, "b": 706.416015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "DB2 for i Center of Excellence", "text": "DB2 for i Center of Excellence"}, {"self_ref": "#/texts/60", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 93.67039489746094, "t": 654.3631591796875, "r": 233.99972534179688, "b": 636.66357421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Solution Brief IBM Systems Lab Services and Training", "text": "Solution Brief IBM Systems Lab Services and Training"}, {"self_ref": "#/texts/61", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 11, "bbox": {"l": 144.19781494140625, "t": 464.93798828125, "r": 188.74681091308594, "b": 454.64495849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Highlights", "text": "Highlights", "level": 1}, {"self_ref": "#/texts/62", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 144.4553985595703, "t": 447.962890625, "r": 242.87388610839844, "b": 433.3105773925781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 532]}], "orig": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/63", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 144.40879821777344, "t": 425.3538513183594, "r": 259.22869873046875, "b": 402.7626953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 876]}], "orig": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/64", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 144.23313903808594, "t": 394.8355407714844, "r": 249.8356170654297, "b": 379.6138916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 672]}], "orig": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/65", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 144.35208129882812, "t": 371.82550048828125, "r": 234.2516326904297, "b": 357.3323669433594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 613]}], "orig": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/66", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 460.8193359375, "t": 653.661376953125, "r": 506.26177978515625, "b": 646.5781860351562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Power Services", "text": "Power Services"}, {"self_ref": "#/texts/67", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 11, "bbox": {"l": 280.07391357421875, "t": 554.2871704101562, "r": 463.8094177246094, "b": 515.3794555664062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "DB2 for i Center of Excellence", "text": "DB2 for i Center of Excellence", "level": 1}, {"self_ref": "#/texts/68", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 279.51953125, "t": 514.842529296875, "r": 483.7276916503906, "b": 503.36505126953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "Expert help to achieve your business requirements", "text": "Expert help to achieve your business requirements"}, {"self_ref": "#/texts/69", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 11, "bbox": {"l": 279.468994140625, "t": 476.9213562011719, "r": 443.375732421875, "b": 467.1043395996094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "We build confident, satisfied clients", "text": "We build confident, satisfied clients", "level": 1}, {"self_ref": "#/texts/70", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 279.530517578125, "t": 464.73529052734375, "r": 488.1546630859375, "b": 446.4922790527344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you.", "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"self_ref": "#/texts/71", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 280.0453186035156, "t": 435.4290466308594, "r": 367.8602294921875, "b": 427.2699890136719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "Because no one else is IBM.", "text": "Because no one else is IBM."}, {"self_ref": "#/texts/72", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 279.70794677734375, "t": 415.73895263671875, "r": 500.321044921875, "b": 366.6907958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 318]}], "orig": "With combined experiences and direct access to development groups, we're the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions.", "text": "With combined experiences and direct access to development groups, we're the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"self_ref": "#/texts/73", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 11, "bbox": {"l": 279.6336669921875, "t": 354.8772277832031, "r": 435.1236572265625, "b": 345.1319274902344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Who we are, some of what we do", "text": "Who we are, some of what we do", "level": 1}, {"self_ref": "#/texts/74", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 279.4736328125, "t": 342.7397766113281, "r": 434.56317138671875, "b": 334.5338134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "Global CoE engagements cover topics including:", "text": "Global CoE engagements cover topics including:"}, {"self_ref": "#/texts/75", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.74200439453125, "t": 323.6339416503906, "r": 402.1675109863281, "b": 315.4241027832031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "r Database performance and scalability", "text": "r Database performance and scalability", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/76", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.7657165527344, "t": 313.35101318359375, "r": 424.9964599609375, "b": 305.21771240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "r Advanced SQL knowledge and skills transfer", "text": "r Advanced SQL knowledge and skills transfer", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/77", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.9660339355469, "t": 302.5164489746094, "r": 392.2996520996094, "b": 294.8087158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "r Business intelligence and analytics", "text": "r Business intelligence and analytics", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/78", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.9432067871094, "t": 292.4297180175781, "r": 339.94354248046875, "b": 284.7392272949219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "r DB2 Web Query", "text": "r DB2 Web Query", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/79", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.68328857421875, "t": 282.5703125, "r": 504.21795654296875, "b": 274.50201416015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "r Query/400 modernization for better reporting and analysis capabilities", "text": "r Query/400 modernization for better reporting and analysis capabilities", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/80", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.66998291015625, "t": 271.96844482421875, "r": 423.002197265625, "b": 263.96942138671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "r Database modernization and re-engineering", "text": "r Database modernization and re-engineering", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/81", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.7203674316406, "t": 262.03643798828125, "r": 400.07391357421875, "b": 254.12164306640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "r Data-centric architecture and design", "text": "r Data-centric architecture and design", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/82", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.7815856933594, "t": 252.1336669921875, "r": 467.2125549316406, "b": 244.1992645263672, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "r Extremely large database and overcoming limits to growth", "text": "r Extremely large database and overcoming limits to growth", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/83", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 279.89080810546875, "t": 241.97698974609375, "r": 382.3631591796875, "b": 234.0165557861328, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "r ISV education and enablement", "text": "r ISV education and enablement", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/84", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 12, "bbox": {"l": 93.356689453125, "t": 633.7283935546875, "r": 193.95431518554688, "b": 624.11572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "What you can expect", "text": "What you can expect", "level": 1}, {"self_ref": "#/texts/85", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 93.58877563476562, "t": 621.952392578125, "r": 283.61541748046875, "b": 614.1285400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "Depending on the engagement, our team of consultants offer:", "text": "Depending on the engagement, our team of consultants offer:"}, {"self_ref": "#/texts/86", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 12, "bbox": {"l": 93.6685562133789, "t": 602.1696166992188, "r": 243.1177520751953, "b": 593.9907836914062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "r Briefings, consulting and guidance on demand", "text": "r Briefings, consulting and guidance on demand", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/87", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 12, "bbox": {"l": 93.72789001464844, "t": 592.1357421875, "r": 282.7251281738281, "b": 574.0993041992188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "r Illumination of the DB2 for i capabilities and leadership to exploit them", "text": "r Illumination of the DB2 for i capabilities and leadership to exploit them", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/88", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 12, "bbox": {"l": 93.56942749023438, "t": 571.7151489257812, "r": 274.4058532714844, "b": 543.554443359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation", "text": "r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/89", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 12, "bbox": {"l": 93.60421752929688, "t": 541.5523681640625, "r": 285.813232421875, "b": 522.5653076171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "r Configuration of systems, operating system and products to fully leverage database capabilities", "text": "r Configuration of systems, operating system and products to fully leverage database capabilities", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/90", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 12, "bbox": {"l": 93.41441345214844, "t": 509.0904541015625, "r": 179.16822814941406, "b": 499.38623046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "Key client benefits", "text": "Key client benefits", "level": 1}, {"self_ref": "#/texts/91", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 93.23255920410156, "t": 503.74200439453125, "r": 282.49176025390625, "b": 438.4472961425781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 316]}], "orig": "T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes.", "text": "T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes."}, {"self_ref": "#/texts/92", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 12, "bbox": {"l": 93.40412902832031, "t": 426.29229736328125, "r": 192.24819946289062, "b": 416.9537353515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 20]}], "orig": "For more information", "text": "For more information", "level": 1}, {"self_ref": "#/texts/93", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 93.551025390625, "t": 415.04736328125, "r": 274.9092102050781, "b": 386.4068603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 165]}], "orig": "Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit:", "text": "Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit:"}, {"self_ref": "#/texts/94", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 93.61650085449219, "t": 374.6022033691406, "r": 216.61273193359375, "b": 367.145751953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 298]}], "orig": "ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"self_ref": "#/texts/95", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 309.5291748046875, "t": 583.289794921875, "r": 409.8566589355469, "b": 576.0010375976562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "orig": "\u00a9 Copyright IBM Corporation 2013", "text": "\u00a9 Copyright IBM Corporation 2013"}, {"self_ref": "#/texts/96", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 309.4497985839844, "t": 568.1546020507812, "r": 361.2178039550781, "b": 545.79736328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "IBM Corporation Route 100 Somers, NY 10589", "text": "IBM Corporation Route 100 Somers, NY 10589"}, {"self_ref": "#/texts/97", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 309.4351501464844, "t": 537.5772094726562, "r": 420.7811584472656, "b": 522.8818969726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Produced in the United States of America March 2013", "text": "Produced in the United States of America March 2013"}, {"self_ref": "#/texts/98", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 309.1927795410156, "t": 516.8470458984375, "r": 505.15802001953125, "b": 471.18280029296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 367]}], "orig": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \"Copyright and trademark information\" at www.ibm.com/legal/ copytrade.shtml .", "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \"Copyright and trademark information\" at www.ibm.com/legal/ copytrade.shtml ."}, {"self_ref": "#/texts/99", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 309.322998046875, "t": 464.77276611328125, "r": 500.2719421386719, "b": 450.140869140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 101]}], "orig": "This document is current as of the initial date of publication and may be changed by IBM at any time.", "text": "This document is current as of the initial date of publication and may be changed by IBM at any time."}, {"self_ref": "#/texts/100", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 309.2567138671875, "t": 444.02313232421875, "r": 494.2681884765625, "b": 436.7710266113281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "Not all offerings are available in every country in which IBM operates.", "text": "Not all offerings are available in every country in which IBM operates."}, {"self_ref": "#/texts/101", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 333.32159423828125, "t": 428.4759826660156, "r": 375.9523010253906, "b": 421.76727294921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Please Recycle", "text": "Please Recycle"}, {"self_ref": "#/texts/102", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 446.00567626953125, "t": 125.18218994140625, "r": 504.98651123046875, "b": 118.24281311035156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "orig": "QLS12392-USEN-00", "text": "QLS12392-USEN-00"}, {"self_ref": "#/texts/103", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 13, "bbox": {"l": 64.80000305175781, "t": 718.8968505859375, "r": 151.46160888671875, "b": 695.9519653320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Preface", "text": "Preface", "level": 1}, {"self_ref": "#/texts/104", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 135.75503540039062, "t": 660.085693359375, "r": 547.3082275390625, "b": 590.1392822265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 469]}], "orig": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"self_ref": "#/texts/105", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 135.94647216796875, "t": 577.9362182617188, "r": 546.4656982421875, "b": 531.8143310546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 309]}], "orig": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"self_ref": "#/texts/106", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 135.71319580078125, "t": 472.1881408691406, "r": 547.2366943359375, "b": 449.8482971191406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 172]}], "orig": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"self_ref": "#/texts/107", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 13, "bbox": {"l": 63.724002838134766, "t": 37.29620361328125, "r": 257.24334716796875, "b": 27.89178466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/108", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 13, "bbox": {"l": 538.058349609375, "t": 37.60198974609375, "r": 547.2503051757812, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "xi", "text": "xi"}, {"self_ref": "#/texts/109", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 262.6522521972656, "t": 417.312744140625, "r": 541.2507934570312, "b": 275.06854248046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 684]}], "orig": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office.", "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"self_ref": "#/texts/110", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 262.4736328125, "t": 265.49169921875, "r": 541.2737426757812, "b": 111.162841796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 726]}], "orig": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com .", "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"self_ref": "#/texts/111", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 13, "bbox": {"l": 64.22550201416016, "t": 504.8105773925781, "r": 125.36660766601562, "b": 488.9364013671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Authors", "text": "Authors", "level": 1}, {"self_ref": "#/texts/112", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 14, "bbox": {"l": 64.18641662597656, "t": 37.57574462890625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "xii", "text": "xii"}, {"self_ref": "#/texts/113", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 14, "bbox": {"l": 93.32842254638672, "t": 37.28607177734375, "r": 334.4214172363281, "b": 28.0654296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/114", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 262.9671630859375, "t": 715.4261474609375, "r": 541.2052612304688, "b": 656.8482666015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 271]}], "orig": "Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i.", "text": "Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i."}, {"self_ref": "#/texts/115", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 262.94354248046875, "t": 600.0166015625, "r": 541.171630859375, "b": 457.7811279296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 671]}], "orig": "Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes.", "text": "Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes."}, {"self_ref": "#/texts/116", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 262.7120666503906, "t": 447.94219970703125, "r": 541.3219604492188, "b": 341.8028259277344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 494]}], "orig": "Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services.", "text": "Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services."}, {"self_ref": "#/texts/117", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 262.76617431640625, "t": 329.9665832519531, "r": 541.2412719726562, "b": 187.7853546142578, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 702]}], "orig": "Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead \"JDE on i\" analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i.", "text": "Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead \"JDE on i\" analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i."}, {"self_ref": "#/texts/118", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 262.9361877441406, "t": 177.96636962890625, "r": 541.1943969726562, "b": 83.7471923828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 420]}], "orig": "Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems\u2122 Lab Services organization. Doug's 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings.", "text": "Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems\u2122 Lab Services organization. Doug's 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings."}, {"self_ref": "#/texts/119", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 262.7662658691406, "t": 715.326416015625, "r": 541.1551513671875, "b": 585.0075073242188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 608]}], "orig": "Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36.", "text": "Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36."}, {"self_ref": "#/texts/120", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 262.6918029785156, "t": 575.589111328125, "r": 541.2665405273438, "b": 481.3031005859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 436]}], "orig": "Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester.", "text": "Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester."}, {"self_ref": "#/texts/121", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 135.6240234375, "t": 453.2672119140625, "r": 432.1602478027344, "b": 443.1976013183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "Thanks to the following people for their contributions to this project:", "text": "Thanks to the following people for their contributions to this project:"}, {"self_ref": "#/texts/122", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 136.3055877685547, "t": 431.54791259765625, "r": 200.390869140625, "b": 421.29852294921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "Debra Landon", "text": "Debra Landon"}, {"self_ref": "#/texts/123", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 136.32855224609375, "t": 419.5627136230469, "r": 439.0932312011719, "b": 408.6701965332031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "International Technical Support Organization, Rochester Center", "text": "International Technical Support Organization, Rochester Center"}, {"self_ref": "#/texts/124", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 136.09214782714844, "t": 397.3418884277344, "r": 457.729736328125, "b": 375.0718078613281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development", "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development"}, {"self_ref": "#/texts/125", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 15, "bbox": {"l": 64.71363067626953, "t": 348.17987060546875, "r": 413.1525573730469, "b": 331.68011474609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "Now you can become a published author, too!", "text": "Now you can become a published author, too!", "level": 1}, {"self_ref": "#/texts/126", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 135.805419921875, "t": 315.3446960449219, "r": 547.232666015625, "b": 233.25941467285156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 551]}], "orig": "Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base.", "text": "Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"self_ref": "#/texts/127", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 136.59922790527344, "t": 221.3204345703125, "r": 546.8164672851562, "b": 210.92303466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "orig": "Find out more about the residency program, browse the residency index, and apply online at:", "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"self_ref": "#/texts/128", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 136.80001831054688, "t": 204.01422119140625, "r": 301.6778259277344, "b": 194.49908447265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "ibm.com /redbooks/residencies.html", "text": "ibm.com /redbooks/residencies.html"}, {"self_ref": "#/texts/129", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 15, "bbox": {"l": 64.52783966064453, "t": 166.65826416015625, "r": 219.43165588378906, "b": 151.01637268066406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "orig": "Comments welcome", "text": "Comments welcome", "level": 1}, {"self_ref": "#/texts/130", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 135.9565887451172, "t": 134.02044677734375, "r": 294.74969482421875, "b": 124.1328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "Your comments are important to us!", "text": "Your comments are important to us!"}, {"self_ref": "#/texts/131", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 135.8791961669922, "t": 112.6141357421875, "r": 547.25244140625, "b": 90.2786636352539, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 152]}], "orig": "We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways:", "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways:"}, {"self_ref": "#/texts/132", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 135.62045288085938, "t": 83.194091796875, "r": 412.55645751953125, "b": 73.23909759521484, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "GLYPH Use the online Contact us review Redbooks form found at:", "text": "GLYPH Use the online Contact us review Redbooks form found at:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/133", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 151.20013427734375, "t": 65.59039306640625, "r": 231.11917114257812, "b": 56.498329162597656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "ibm.com /redbooks", "text": "ibm.com /redbooks"}, {"self_ref": "#/texts/134", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 15, "bbox": {"l": 485.1000061035156, "t": 37.24951171875, "r": 520.88134765625, "b": 28.136999130249023, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Preface", "text": "Preface"}, {"self_ref": "#/texts/135", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 15, "bbox": {"l": 532.5994262695312, "t": 37.7366943359375, "r": 547.1934204101562, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 4]}], "orig": "xiii", "text": "xiii"}, {"self_ref": "#/texts/136", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 16, "bbox": {"l": 64.0907974243164, "t": 37.40447998046875, "r": 81.16200256347656, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "xiv", "text": "xiv"}, {"self_ref": "#/texts/137", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 16, "bbox": {"l": 95.71053314208984, "t": 37.3270263671875, "r": 337.0337829589844, "b": 28.02490234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/138", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 16, "bbox": {"l": 135.5431365966797, "t": 721.2905883789062, "r": 310.3739318847656, "b": 710.7161254882812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "GLYPH Send your comments in an email to:", "text": "GLYPH Send your comments in an email to:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/139", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 150.99362182617188, "t": 704.1723022460938, "r": 246.22007751464844, "b": 694.5873413085938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "redbooks@us.ibm.com", "text": "redbooks@us.ibm.com"}, {"self_ref": "#/texts/140", "parent": {"cref": "#/groups/5"}, "children": [], "label": "list_item", "prov": [{"page_no": 16, "bbox": {"l": 135.64413452148438, "t": 687.05322265625, "r": 254.27020263671875, "b": 677.0240478515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "GLYPH Mail your comments to:", "text": "GLYPH Mail your comments to:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/141", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 150.4449005126953, "t": 671.0802001953125, "r": 426.992431640625, "b": 624.0880126953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 134]}], "orig": "IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400", "text": "IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400"}, {"self_ref": "#/texts/142", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 16, "bbox": {"l": 64.44961547851562, "t": 597.390625, "r": 317.6510925292969, "b": 581.0363159179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Stay connected to IBM Redbooks", "text": "Stay connected to IBM Redbooks", "level": 1}, {"self_ref": "#/texts/143", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 16, "bbox": {"l": 135.58946228027344, "t": 564.1651611328125, "r": 246.8371124267578, "b": 554.25830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "GLYPH Find us on Facebook:", "text": "GLYPH Find us on Facebook:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/144", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 150.674072265625, "t": 547.1090087890625, "r": 326.0977478027344, "b": 537.0848388671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "http://www.facebook.com/IBMRedbooks", "text": "http://www.facebook.com/IBMRedbooks"}, {"self_ref": "#/texts/145", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 16, "bbox": {"l": 135.61866760253906, "t": 530.5045166015625, "r": 241.52239990234375, "b": 520.2987060546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "GLYPH Follow us on Twitter:", "text": "GLYPH Follow us on Twitter:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/146", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 150.70498657226562, "t": 513.2252197265625, "r": 301.0782165527344, "b": 503.5311279296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "http://twitter.com/ibmredbooks", "text": "http://twitter.com/ibmredbooks"}, {"self_ref": "#/texts/147", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 16, "bbox": {"l": 135.6381072998047, "t": 496.593017578125, "r": 257.426513671875, "b": 486.2793273925781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "GLYPH Look for us on LinkedIn:", "text": "GLYPH Look for us on LinkedIn:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/148", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 150.5355224609375, "t": 479.2994079589844, "r": 391.0767822265625, "b": 469.3290710449219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "http://www.linkedin.com/groups?home=&gid=2130806", "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"self_ref": "#/texts/149", "parent": {"cref": "#/groups/9"}, "children": [], "label": "list_item", "prov": [{"page_no": 16, "bbox": {"l": 135.53648376464844, "t": 461.9305419921875, "r": 546.2178955078125, "b": 439.63250732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 118]}], "orig": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:", "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/150", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 150.64300537109375, "t": 433.2305908203125, "r": 451.45623779296875, "b": 423.1323547363281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"self_ref": "#/texts/151", "parent": {"cref": "#/groups/10"}, "children": [], "label": "list_item", "prov": [{"page_no": 16, "bbox": {"l": 135.8739471435547, "t": 416.6739501953125, "r": 429.3480529785156, "b": 406.300537109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 76]}], "orig": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:", "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/152", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 150.6341552734375, "t": 399.0984802246094, "r": 331.0777282714844, "b": 389.47064208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "http://www.redbooks.ibm.com/rss.html", "text": "http://www.redbooks.ibm.com/rss.html"}, {"self_ref": "#/texts/153", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 1.", "text": "Chapter 1."}, {"self_ref": "#/texts/154", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 500.3999938964844, "t": 699.3392333984375, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/155", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 17, "bbox": {"l": 136.68006896972656, "t": 538.7101440429688, "r": 547.3047485351562, "b": 482.1217956542969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Securing and protecting IBM DB2 data", "text": "Securing and protecting IBM DB2 data", "level": 1}, {"self_ref": "#/texts/156", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 136.15219116210938, "t": 444.024658203125, "r": 547.2540283203125, "b": 361.62640380859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 648]}], "orig": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record.", "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"self_ref": "#/texts/157", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 136.05917358398438, "t": 349.8846435546875, "r": 527.206298828125, "b": 303.55853271484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 304]}], "orig": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement.", "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"self_ref": "#/texts/158", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 135.5961456298828, "t": 291.9596862792969, "r": 547.1551513671875, "b": 270.1002197265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:", "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"self_ref": "#/texts/159", "parent": {"cref": "#/groups/11"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.86915588378906, "t": 263.29638671875, "r": 250.23167419433594, "b": 252.9566650390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "GLYPH Security fundamentals", "text": "GLYPH Security fundamentals", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/160", "parent": {"cref": "#/groups/11"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.742431640625, "t": 251.2857666015625, "r": 282.98114013671875, "b": 240.626708984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "GLYPH Current state of IBM i security", "text": "GLYPH Current state of IBM i security", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/161", "parent": {"cref": "#/groups/11"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.86570739746094, "t": 239.55108642578125, "r": 264.8818664550781, "b": 229.06103515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "GLYPH DB2 for i security controls", "text": "GLYPH DB2 for i security controls", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/162", "parent": {"cref": "#/body"}, "children": [], "label": "footnote", "prov": [{"page_no": 17, "bbox": {"l": 135.7418975830078, "t": 75.71832275390625, "r": 258.362548828125, "b": 66.45916748046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "$^{1 }$http://www.idtheftcenter.org", "text": "$^{1 }$http://www.idtheftcenter.org"}, {"self_ref": "#/texts/163", "parent": {"cref": "#/body"}, "children": [], "label": "footnote", "prov": [{"page_no": 17, "bbox": {"l": 136.19522094726562, "t": 66.703857421875, "r": 234.42526245117188, "b": 56.73187255859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "$^{2 }$http://www.ponemon.org /", "text": "$^{2 }$http://www.ponemon.org /"}, {"self_ref": "#/texts/164", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 17, "bbox": {"l": 63.68400573730469, "t": 37.3408203125, "r": 257.24334716796875, "b": 27.85699462890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/165", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 17, "bbox": {"l": 541.2396240234375, "t": 37.7130126953125, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/166", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 18, "bbox": {"l": 64.33735656738281, "t": 718.60302734375, "r": 267.40582275390625, "b": 702.3842163085938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "1.1 Security fundamentals", "text": "1.1 Security fundamentals", "level": 1}, {"self_ref": "#/texts/167", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 136.23556518554688, "t": 685.97265625, "r": 545.0048217773438, "b": 664.178466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 133]}], "orig": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:", "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"self_ref": "#/texts/168", "parent": {"cref": "#/groups/12"}, "children": [], "label": "list_item", "prov": [{"page_no": 18, "bbox": {"l": 135.66490173339844, "t": 657.3309326171875, "r": 547.1642456054688, "b": 610.8453369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 361]}], "orig": "GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability.", "text": "GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/169", "parent": {"cref": "#/groups/12"}, "children": [], "label": "list_item", "prov": [{"page_no": 18, "bbox": {"l": 150.2132110595703, "t": 604.0206298828125, "r": 547.2608642578125, "b": 521.4625244140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 587]}], "orig": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured.", "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/170", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 150.1995086669922, "t": 515.2373657226562, "r": 541.9920043945312, "b": 504.9290466308594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 90]}], "orig": "A security policy is what defines whether the system and its settings are secure (or not).", "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"self_ref": "#/texts/171", "parent": {"cref": "#/groups/13"}, "children": [], "label": "list_item", "prov": [{"page_no": 18, "bbox": {"l": 135.4777374267578, "t": 498.18560791015625, "r": 547.1582641601562, "b": 415.4546203613281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 573]}], "orig": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets.", "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/172", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 135.90879821777344, "t": 403.87713623046875, "r": 535.3616943359375, "b": 381.6918640136719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 179]}], "orig": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i.", "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"self_ref": "#/texts/173", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 18, "bbox": {"l": 64.44733428955078, "t": 354.5881042480469, "r": 323.3839111328125, "b": 338.3087158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "1.2 Current state of IBM i security", "text": "1.2 Current state of IBM i security", "level": 1}, {"self_ref": "#/texts/174", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 136.1368408203125, "t": 322.23028564453125, "r": 547.3182373046875, "b": 275.52197265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 306]}], "orig": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE.", "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"self_ref": "#/texts/175", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 135.79974365234375, "t": 264.12274169921875, "r": 547.284423828125, "b": 206.1400604248047, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 405]}], "orig": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data.", "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data."}, {"self_ref": "#/texts/176", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 135.8997802734375, "t": 193.8753662109375, "r": 547.2832641601562, "b": 111.57879638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 640]}], "orig": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data.", "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}, {"self_ref": "#/texts/177", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 18, "bbox": {"l": 63.92394256591797, "t": 37.713134765625, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "2", "text": "2"}, {"self_ref": "#/texts/178", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 18, "bbox": {"l": 87.81553649902344, "t": 37.31463623046875, "r": 328.7253723144531, "b": 28.03179931640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/179", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 19, "bbox": {"l": 136.11676025390625, "t": 721.186279296875, "r": 546.4398193359375, "b": 626.8720092773438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 688]}], "orig": "Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day.", "text": "Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day."}, {"self_ref": "#/texts/180", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 19, "bbox": {"l": 135.7813262939453, "t": 615.1084594726562, "r": 547.2666015625, "b": 520.8560791015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 723]}], "orig": "Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces.", "text": "Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces."}, {"self_ref": "#/texts/181", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 19, "bbox": {"l": 135.8739471435547, "t": 509.3145446777344, "r": 546.2266235351562, "b": 462.8641662597656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 331]}], "orig": "An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level.", "text": "An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level."}, {"self_ref": "#/texts/182", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 19, "bbox": {"l": 64.80000305175781, "t": 435.8830261230469, "r": 295.2049255371094, "b": 419.7867126464844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "1.3 DB2 for i security controls", "text": "1.3 DB2 for i security controls", "level": 1}, {"self_ref": "#/texts/183", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 19, "bbox": {"l": 135.9359893798828, "t": 403.39501953125, "r": 547.1688842773438, "b": 333.2792053222656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 511]}], "orig": "As described in 1.2, \"Current state of IBM i security\" on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table.", "text": "As described in 1.2, \"Current state of IBM i security\" on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table."}, {"self_ref": "#/texts/184", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 19, "bbox": {"l": 135.52011108398438, "t": 321.39666748046875, "r": 466.3186340332031, "b": 311.0404052734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table."}, {"self_ref": "#/texts/185", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 19, "bbox": {"l": 135.93324279785156, "t": 89.82525634765625, "r": 354.8916015625, "b": 80.60284423828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "Figure 1-1 All-or-nothing access to the rows of a table", "text": "Figure 1-1 All-or-nothing access to the rows of a table"}, {"self_ref": "#/texts/186", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 19, "bbox": {"l": 328.2245788574219, "t": 37.203857421875, "r": 529.1063232421875, "b": 27.9105224609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Chapter 1. Securing and protecting IBM DB2 data", "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"self_ref": "#/texts/187", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 19, "bbox": {"l": 540.928466796875, "t": 37.6522216796875, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "3", "text": "3"}, {"self_ref": "#/texts/188", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 20, "bbox": {"l": 64.09014129638672, "t": 37.92034912109375, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "4", "text": "4"}, {"self_ref": "#/texts/189", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 20, "bbox": {"l": 87.84030151367188, "t": 37.3697509765625, "r": 328.7253723144531, "b": 28.01824951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/190", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 20, "bbox": {"l": 135.9996337890625, "t": 721.3639526367188, "r": 544.3033447265625, "b": 638.906982421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 589]}], "orig": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage.", "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"self_ref": "#/texts/191", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 20, "bbox": {"l": 64.4480209350586, "t": 619.7714233398438, "r": 301.4690246582031, "b": 606.2725830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "1.3.1 Existing row and column control", "text": "1.3.1 Existing row and column control", "level": 1}, {"self_ref": "#/texts/192", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 20, "bbox": {"l": 135.77957153320312, "t": 593.479248046875, "r": 541.5673828125, "b": 534.8919677734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 377]}], "orig": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator.", "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"self_ref": "#/texts/193", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 20, "bbox": {"l": 135.9119110107422, "t": 523.368896484375, "r": 547.4407958984375, "b": 477.10101318359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 340]}], "orig": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases.", "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"self_ref": "#/texts/194", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 20, "bbox": {"l": 136.0379638671875, "t": 465.39056396484375, "r": 547.232666015625, "b": 430.80120849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 247]}], "orig": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view.", "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"self_ref": "#/texts/195", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 20, "bbox": {"l": 136.23910522460938, "t": 101.11260986328125, "r": 317.073486328125, "b": 91.83807373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "Figure 1-2 Existing row and column controls", "text": "Figure 1-2 Existing row and column controls"}, {"self_ref": "#/texts/196", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 21, "bbox": {"l": 64.52648162841797, "t": 721.6258544921875, "r": 394.39227294921875, "b": 708.67724609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "1.3.2 New controls: Row and Column Access Control", "text": "1.3.2 New controls: Row and Column Access Control", "level": 1}, {"self_ref": "#/texts/197", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 21, "bbox": {"l": 136.02708435058594, "t": 695.4644165039062, "r": 539.9359130859375, "b": 648.8173828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 270]}], "orig": "Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC).", "text": "Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC)."}, {"self_ref": "#/texts/198", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 21, "bbox": {"l": 135.92579650878906, "t": 637.4297485351562, "r": 542.2587280273438, "b": 566.8125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 514]}], "orig": "The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place.", "text": "The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place."}, {"self_ref": "#/texts/199", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 21, "bbox": {"l": 328.2296447753906, "t": 37.23065185546875, "r": 529.1063232421875, "b": 27.9176025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Chapter 1. Securing and protecting IBM DB2 data", "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"self_ref": "#/texts/200", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 21, "bbox": {"l": 541.1834716796875, "t": 37.7110595703125, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "5", "text": "5"}, {"self_ref": "#/texts/201", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 22, "bbox": {"l": 64.46890258789062, "t": 37.845947265625, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "6", "text": "6"}, {"self_ref": "#/texts/202", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 22, "bbox": {"l": 87.84030151367188, "t": 37.47662353515625, "r": 328.78973388671875, "b": 27.92205810546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/203", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 23, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 2.", "text": "Chapter 2."}, {"self_ref": "#/texts/204", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 23, "bbox": {"l": 500.3999938964844, "t": 698.85400390625, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "2", "text": "2"}, {"self_ref": "#/texts/205", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 23, "bbox": {"l": 136.8000030517578, "t": 538.9207763671875, "r": 515.1311645507812, "b": 512.5958862304688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Roles and separation of duties", "text": "Roles and separation of duties", "level": 1}, {"self_ref": "#/texts/206", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 23, "bbox": {"l": 135.93650817871094, "t": 475.45037841796875, "r": 547.3323974609375, "b": 440.9854431152344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 266]}], "orig": "One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs.", "text": "One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs."}, {"self_ref": "#/texts/207", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 23, "bbox": {"l": 135.88510131835938, "t": 429.3551330566406, "r": 547.2574462890625, "b": 383.07965087890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 290]}], "orig": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks.", "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks."}, {"self_ref": "#/texts/208", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 23, "bbox": {"l": 135.7690887451172, "t": 371.40936279296875, "r": 547.2655029296875, "b": 349.0602722167969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics:", "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics:"}, {"self_ref": "#/texts/209", "parent": {"cref": "#/groups/14"}, "children": [], "label": "list_item", "prov": [{"page_no": 23, "bbox": {"l": 135.8439483642578, "t": 342.1582946777344, "r": 176.71270751953125, "b": 332.0804748535156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "GLYPH Roles", "text": "GLYPH Roles", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/210", "parent": {"cref": "#/groups/14"}, "children": [], "label": "list_item", "prov": [{"page_no": 23, "bbox": {"l": 135.7147674560547, "t": 329.8328552246094, "r": 239.9706268310547, "b": 319.5862121582031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "GLYPH Separation of duties", "text": "GLYPH Separation of duties", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/211", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 23, "bbox": {"l": 63.7032470703125, "t": 37.3309326171875, "r": 257.24334716796875, "b": 27.83447265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/212", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 23, "bbox": {"l": 540.8427734375, "t": 37.8079833984375, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "7", "text": "7"}, {"self_ref": "#/texts/213", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 24, "bbox": {"l": 64.00420379638672, "t": 718.5374755859375, "r": 139.42576599121094, "b": 702.8963012695312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 9]}], "orig": "2.1 Roles", "text": "2.1 Roles", "level": 1}, {"self_ref": "#/texts/214", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.84288024902344, "t": 686.0313720703125, "r": 547.2965087890625, "b": 615.6285400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 543]}], "orig": "Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization's requirements for limiting access to data or separation of duties.", "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization's requirements for limiting access to data or separation of duties."}, {"self_ref": "#/texts/215", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.82821655273438, "t": 604.0189819335938, "r": 547.2587890625, "b": 569.6303100585938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 282]}], "orig": "To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service.", "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service."}, {"self_ref": "#/texts/216", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 136.2572479248047, "t": 557.9967651367188, "r": 547.3123779296875, "b": 536.1390380859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 95]}], "orig": "Roles are divided among the following DB2 functions and their corresponding function usage IDs:", "text": "Roles are divided among the following DB2 functions and their corresponding function usage IDs:"}, {"self_ref": "#/texts/217", "parent": {"cref": "#/groups/15"}, "children": [], "label": "list_item", "prov": [{"page_no": 24, "bbox": {"l": 135.83023071289062, "t": 529.70947265625, "r": 474.0260009765625, "b": 519.1592407226562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "text": "GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/218", "parent": {"cref": "#/groups/15"}, "children": [], "label": "list_item", "prov": [{"page_no": 24, "bbox": {"l": 135.586669921875, "t": 517.5133056640625, "r": 376.04473876953125, "b": 507.1470642089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "GLYPH Toolbox application server access: QIBM_DB_ZDA", "text": "GLYPH Toolbox application server access: QIBM_DB_ZDA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/219", "parent": {"cref": "#/groups/15"}, "children": [], "label": "list_item", "prov": [{"page_no": 24, "bbox": {"l": 135.70936584472656, "t": 505.62322998046875, "r": 391.5639953613281, "b": 495.15960693359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "GLYPH Database Administrator function: QIBM_DB_SQLADM", "text": "GLYPH Database Administrator function: QIBM_DB_SQLADM", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/220", "parent": {"cref": "#/groups/15"}, "children": [], "label": "list_item", "prov": [{"page_no": 24, "bbox": {"l": 135.47157287597656, "t": 493.7165832519531, "r": 384.0774841308594, "b": 483.1597900390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "GLYPH Database Information function: QIBM_DB_SYSMON", "text": "GLYPH Database Information function: QIBM_DB_SYSMON", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/221", "parent": {"cref": "#/groups/15"}, "children": [], "label": "list_item", "prov": [{"page_no": 24, "bbox": {"l": 135.6302947998047, "t": 481.74273681640625, "r": 385.5570983886719, "b": 471.05413818359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "GLYPH Security Administrator function: QIBM_DB_SECADM", "text": "GLYPH Security Administrator function: QIBM_DB_SECADM", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/222", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 24, "bbox": {"l": 63.82975387573242, "t": 451.798095703125, "r": 501.0556335449219, "b": 438.3501281738281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA", "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA", "level": 1}, {"self_ref": "#/texts/223", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.88975524902344, "t": 425.7085266113281, "r": 547.2295532226562, "b": 366.8034362792969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 392]}], "orig": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups.", "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"self_ref": "#/texts/224", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.7061767578125, "t": 355.357421875, "r": 534.9490356445312, "b": 333.08551025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable.", "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}, {"self_ref": "#/texts/225", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 24, "bbox": {"l": 63.88609313964844, "t": 313.75762939453125, "r": 413.2720031738281, "b": 300.5189514160156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "2.1.2 Toolbox application server access: QIBM_DB_ZDA", "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA", "level": 1}, {"self_ref": "#/texts/226", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.62423706054688, "t": 287.4773864746094, "r": 543.151123046875, "b": 229.11941528320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 350]}], "orig": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console.", "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console."}, {"self_ref": "#/texts/227", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.72520446777344, "t": 217.471435546875, "r": 546.2078247070312, "b": 170.85626220703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 289]}], "orig": "This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups.", "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"self_ref": "#/texts/228", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.83445739746094, "t": 159.5340576171875, "r": 534.9490966796875, "b": 137.03271484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable.", "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}, {"self_ref": "#/texts/229", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 24, "bbox": {"l": 64.24457550048828, "t": 37.793212890625, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "8", "text": "8"}, {"self_ref": "#/texts/230", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 24, "bbox": {"l": 87.8071517944336, "t": 37.302001953125, "r": 328.7253723144531, "b": 28.02972412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/231", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 25, "bbox": {"l": 64.0216293334961, "t": 721.53125, "r": 433.47052001953125, "b": 708.67724609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "2.1.3 Database Administrator function: QIBM_DB_SQLADM", "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM", "level": 1}, {"self_ref": "#/texts/232", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.77142333984375, "t": 695.2532958984375, "r": 547.0184326171875, "b": 636.6917114257812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 363]}], "orig": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own.", "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own."}, {"self_ref": "#/texts/233", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.78330993652344, "t": 625.3063354492188, "r": 547.3245239257812, "b": 591.0904541015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 274]}], "orig": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization.", "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization."}, {"self_ref": "#/texts/234", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.86964416503906, "t": 579.1475830078125, "r": 541.2985229492188, "b": 532.985595703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 352]}], "orig": "To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "text": "To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM."}, {"self_ref": "#/texts/235", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 25, "bbox": {"l": 136.13877868652344, "t": 517.5679931640625, "r": 392.7084045410156, "b": 505.5359802246094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Granting QIBM_DB_SQLADM function usage", "text": "Granting QIBM_DB_SQLADM function usage", "level": 1}, {"self_ref": "#/texts/236", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 136.1097412109375, "t": 502.6596374511719, "r": 532.0657348632812, "b": 480.2784729003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 132]}], "orig": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions.", "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions."}, {"self_ref": "#/texts/237", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 25, "bbox": {"l": 64.01083374023438, "t": 460.90020751953125, "r": 419.47637939453125, "b": 447.6772766113281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "2.1.4 Database Information function: QIBM_DB_SYSMON", "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "level": 1}, {"self_ref": "#/texts/238", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.8494873046875, "t": 434.6439514160156, "r": 547.1928100585938, "b": 400.29864501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 190]}], "orig": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties.", "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties."}, {"self_ref": "#/texts/239", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 136.19979858398438, "t": 388.66790771484375, "r": 547.2994384765625, "b": 354.2794494628906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 229]}], "orig": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization.", "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization."}, {"self_ref": "#/texts/240", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 25, "bbox": {"l": 136.31793212890625, "t": 338.39239501953125, "r": 392.7384033203125, "b": 326.24853515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Granting QIBM_DB_SYSMON function usage", "text": "Granting QIBM_DB_SYSMON function usage", "level": 1}, {"self_ref": "#/texts/241", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 136.06344604492188, "t": 323.30474853515625, "r": 532.0657348632812, "b": 301.23870849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 129]}], "orig": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions.", "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions."}, {"self_ref": "#/texts/242", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 25, "bbox": {"l": 64.14019775390625, "t": 281.6142272949219, "r": 427.0501403808594, "b": 268.63739013671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "2.1.5 Security Administrator function: QIBM_DB_SECADM", "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM", "level": 1}, {"self_ref": "#/texts/243", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.73634338378906, "t": 255.36358642578125, "r": 538.3322143554688, "b": 209.25897216796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 290]}], "orig": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table.", "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"self_ref": "#/texts/244", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.88818359375, "t": 197.62176513671875, "r": 547.2896118164062, "b": 139.040283203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 380]}], "orig": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization.", "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization."}, {"self_ref": "#/texts/245", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 25, "bbox": {"l": 136.17408752441406, "t": 123.54425048828125, "r": 392.72161865234375, "b": 111.33062744140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Granting QIBM_DB_SECADM function usage", "text": "Granting QIBM_DB_SECADM function usage", "level": 1}, {"self_ref": "#/texts/246", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 136.1047821044922, "t": 108.106201171875, "r": 460.46807861328125, "b": 85.6243896484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 117]}], "orig": "Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group.", "text": "Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group."}, {"self_ref": "#/texts/247", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 25, "bbox": {"l": 360.4371643066406, "t": 37.116455078125, "r": 529.1567993164062, "b": 27.8848876953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "Chapter 2. Roles and separation of duties", "text": "Chapter 2. Roles and separation of duties"}, {"self_ref": "#/texts/248", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 25, "bbox": {"l": 540.8857421875, "t": 37.69683837890625, "r": 547.2386474609375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "9", "text": "9"}, {"self_ref": "#/texts/249", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 26, "bbox": {"l": 64.09011840820312, "t": 721.8206787109375, "r": 335.4955139160156, "b": 708.0057373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "2.1.6 Change Function Usage CL command", "text": "2.1.6 Change Function Usage CL command", "level": 1}, {"self_ref": "#/texts/250", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 135.83584594726562, "t": 695.3712768554688, "r": 547.284423828125, "b": 684.7753295898438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 90]}], "orig": "The following CL commands can be used to work with, display, or change function usage IDs:", "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"self_ref": "#/texts/251", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.6907196044922, "t": 678.259765625, "r": 301.5174865722656, "b": 667.4461669921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "GLYPH Work Function Usage ( WRKFCNUSG )", "text": "GLYPH Work Function Usage ( WRKFCNUSG )", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/252", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.7242889404297, "t": 666.0692138671875, "r": 313.39776611328125, "b": 655.3120727539062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "GLYPH Change Function Usage ( CHGFCNUSG )", "text": "GLYPH Change Function Usage ( CHGFCNUSG )", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/253", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.71124267578125, "t": 654.0370483398438, "r": 310.8171081542969, "b": 643.400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "GLYPH Display Function Usage ( DSPFCNUSG )", "text": "GLYPH Display Function Usage ( DSPFCNUSG )", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/254", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 136.30247497558594, "t": 632.781494140625, "r": 512.5380249023438, "b": 610.2994995117188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 126]}], "orig": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:", "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"self_ref": "#/texts/255", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 136.3306427001953, "t": 604.0092163085938, "r": 441.59686279296875, "b": 593.1199951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"self_ref": "#/texts/256", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 26, "bbox": {"l": 63.9356689453125, "t": 573.8617553710938, "r": 544.4754638671875, "b": 559.875732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "level": 1}, {"self_ref": "#/texts/257", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 135.84828186035156, "t": 547.4229736328125, "r": 519.5179443359375, "b": 525.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 130]}], "orig": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view.", "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"self_ref": "#/texts/258", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 26, "bbox": {"l": 136.8000030517578, "t": 513.490478515625, "r": 284.9328308105469, "b": 504.11700439453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Table 2-1 FUNCTION_USAGE view", "text": "Table 2-1 FUNCTION_USAGE view"}, {"self_ref": "#/texts/259", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 135.81077575683594, "t": 340.671142578125, "r": 547.2803955078125, "b": 318.2784729003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 112]}], "orig": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1.", "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"self_ref": "#/texts/260", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 26, "bbox": {"l": 136.28225708007812, "t": 306.23565673828125, "r": 462.98095703125, "b": 296.11798095703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "Example 2-1 Query to determine who has authority to define and manage RCAC", "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"self_ref": "#/texts/261", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 136.8000030517578, "t": 288.34197998046875, "r": 331.67730712890625, "b": 207.56837463378906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name;", "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name;"}, {"self_ref": "#/texts/262", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 26, "bbox": {"l": 64.18024444580078, "t": 172.6075439453125, "r": 249.59605407714844, "b": 156.3486328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "2.2 Separation of duties", "text": "2.2 Separation of duties", "level": 1}, {"self_ref": "#/texts/263", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 136.1588592529297, "t": 140.1129150390625, "r": 547.2234497070312, "b": 81.817626953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 463]}], "orig": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"self_ref": "#/texts/264", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 26, "bbox": {"l": 64.4488525390625, "t": 37.581298828125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "10", "text": "10"}, {"self_ref": "#/texts/265", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 26, "bbox": {"l": 93.35774993896484, "t": 37.31072998046875, "r": 334.4214172363281, "b": 28.04144287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/266", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.92747497558594, "t": 721.3446044921875, "r": 542.6943359375, "b": 650.9638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 516]}], "orig": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security.", "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security."}, {"self_ref": "#/texts/267", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 136.04833984375, "t": 639.4869384765625, "r": 547.303955078125, "b": 593.2598266601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table.", "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"self_ref": "#/texts/268", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 136.00685119628906, "t": 581.5885009765625, "r": 538.6507568359375, "b": 558.9195556640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 129]}], "orig": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group.", "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"self_ref": "#/texts/269", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.68702697753906, "t": 547.4618530273438, "r": 545.7960205078125, "b": 513.281005859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 204]}], "orig": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table.", "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"self_ref": "#/texts/270", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.86065673828125, "t": 501.3948669433594, "r": 539.80712890625, "b": 455.2619934082031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself.", "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"self_ref": "#/texts/271", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.7205352783203, "t": 443.39068603515625, "r": 543.067138671875, "b": 421.3023681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools.", "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"self_ref": "#/texts/272", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 27, "bbox": {"l": 64.80000305175781, "t": 409.4712829589844, "r": 392.4624328613281, "b": 399.74505615234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"self_ref": "#/texts/273", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 27, "bbox": {"l": 354.4815673828125, "t": 37.05841064453125, "r": 523.5407104492188, "b": 27.89447021484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "Chapter 2. Roles and separation of duties", "text": "Chapter 2. Roles and separation of duties"}, {"self_ref": "#/texts/274", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 27, "bbox": {"l": 536.0808715820312, "t": 37.7674560546875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "11", "text": "11"}, {"self_ref": "#/texts/275", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 28, "bbox": {"l": 64.58246612548828, "t": 37.58502197265625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "12", "text": "12"}, {"self_ref": "#/texts/276", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 28, "bbox": {"l": 93.4140625, "t": 37.4124755859375, "r": 334.4214172363281, "b": 27.99273681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/277", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 3.", "text": "Chapter 3."}, {"self_ref": "#/texts/278", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 500.3999938964844, "t": 698.8939819335938, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "3", "text": "3"}, {"self_ref": "#/texts/279", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 29, "bbox": {"l": 136.8000030517578, "t": 539.2265014648438, "r": 546.0291748046875, "b": 513.0821533203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Row and Column Access Control", "text": "Row and Column Access Control", "level": 1}, {"self_ref": "#/texts/280", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 135.7134552001953, "t": 475.3383483886719, "r": 536.1522827148438, "b": 453.0984802246094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 133]}], "orig": "This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example.", "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example."}, {"self_ref": "#/texts/281", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 136.12974548339844, "t": 441.3373107910156, "r": 347.4121398925781, "b": 431.07891845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "The following topics are covered in this chapter:", "text": "The following topics are covered in this chapter:"}, {"self_ref": "#/texts/282", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.65553283691406, "t": 424.01177978515625, "r": 397.1086730957031, "b": 413.7755432128906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 69]}], "orig": "GLYPH Explanation of RCAC and the concept of access control", "text": "GLYPH Explanation of RCAC and the concept of access control", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/283", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.7020721435547, "t": 411.87139892578125, "r": 348.458984375, "b": 401.86920166015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "GLYPH Special registers and built-in global variables", "text": "GLYPH Special registers and built-in global variables", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/284", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.77047729492188, "t": 400.1288146972656, "r": 327.0360107421875, "b": 389.711669921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "GLYPH VERIFY_GROUP_FOR_USER function", "text": "GLYPH VERIFY_GROUP_FOR_USER function", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/285", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.8464813232422, "t": 387.9523010253906, "r": 454.0877990722656, "b": 377.66046142578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 86]}], "orig": "GLYPH Establishing and controlling accessibility by using the RCAC rule text", "text": "GLYPH Establishing and controlling accessibility by using the RCAC rule text", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/286", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.77333068847656, "t": 376.19525146484375, "r": 385.73236083984375, "b": 365.84466552734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "GLYPH SELECT, INSERT, and UPDATE behavior with RCAC", "text": "GLYPH SELECT, INSERT, and UPDATE behavior with RCAC", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/287", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.60595703125, "t": 363.9985046386719, "r": 270.3636169433594, "b": 354.0252990722656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "GLYPH Human resources example", "text": "GLYPH Human resources example", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/288", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 29, "bbox": {"l": 63.7396240234375, "t": 37.2548828125, "r": 257.24334716796875, "b": 27.91595458984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/289", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 29, "bbox": {"l": 535.8259887695312, "t": 37.642333984375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "13", "text": "13"}, {"self_ref": "#/texts/290", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 30, "bbox": {"l": 64.3137435913086, "t": 718.4672241210938, "r": 518.7757568359375, "b": 702.7252807617188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "3.1 Explanation of RCAC and the concept of access control", "text": "3.1 Explanation of RCAC and the concept of access control", "level": 1}, {"self_ref": "#/texts/291", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 136.03993225097656, "t": 685.975341796875, "r": 547.24267578125, "b": 639.732177734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 340]}], "orig": "RCAC limits data access to those users who have a business \"need to know\". RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called \"IBM Advanced Data Security for i\", also known as option 47 of IBM i 7.2.", "text": "RCAC limits data access to those users who have a business \"need to know\". RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called \"IBM Advanced Data Security for i\", also known as option 47 of IBM i 7.2."}, {"self_ref": "#/texts/292", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 136.07485961914062, "t": 628.0799560546875, "r": 505.92376708984375, "b": 605.9139404296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 141]}], "orig": "In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms:", "text": "In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms:"}, {"self_ref": "#/texts/293", "parent": {"cref": "#/groups/18"}, "children": [], "label": "list_item", "prov": [{"page_no": 30, "bbox": {"l": 135.7504425048828, "t": 599.06494140625, "r": 227.34536743164062, "b": 589.1548461914062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "GLYPH Row permissions", "text": "GLYPH Row permissions", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/294", "parent": {"cref": "#/groups/18"}, "children": [], "label": "list_item", "prov": [{"page_no": 30, "bbox": {"l": 135.5780487060547, "t": 586.911865234375, "r": 217.25091552734375, "b": 577.1798095703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "GLYPH Column masks", "text": "GLYPH Column masks", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/295", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.8238983154297, "t": 565.3846435546875, "r": 547.2017822265625, "b": 507.16094970703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 419]}], "orig": "Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements.", "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements."}, {"self_ref": "#/texts/296", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 136.0462646484375, "t": 495.2445983886719, "r": 547.2973022460938, "b": 449.1419372558594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 270]}], "orig": "Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data.", "text": "Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data."}, {"self_ref": "#/texts/297", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 136.23114013671875, "t": 437.2736511230469, "r": 535.672119140625, "b": 390.89093017578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 331]}], "orig": "RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic.", "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic."}, {"self_ref": "#/texts/298", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 141.94046020507812, "t": 373.60089111328125, "r": 541.2496337890625, "b": 314.51959228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 438]}], "orig": "Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility.", "text": "Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility."}, {"self_ref": "#/texts/299", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 30, "bbox": {"l": 64.24093627929688, "t": 290.3779602050781, "r": 383.4799499511719, "b": 277.25274658203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "3.1.1 Row permission and column mask definitions", "text": "3.1.1 Row permission and column mask definitions", "level": 1}, {"self_ref": "#/texts/300", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.77207946777344, "t": 263.9635009765625, "r": 423.5354309082031, "b": 253.60382080078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "The following sections define row permission and column masks.", "text": "The following sections define row permission and column masks."}, {"self_ref": "#/texts/301", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 30, "bbox": {"l": 136.47561645507812, "t": 238.14508056640625, "r": 229.260009765625, "b": 226.1007080078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Row permission", "text": "Row permission", "level": 1}, {"self_ref": "#/texts/302", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.9830322265625, "t": 223.29058837890625, "r": 544.5714721679688, "b": 189.069091796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 261]}], "orig": "A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees.", "text": "A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees."}, {"self_ref": "#/texts/303", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 30, "bbox": {"l": 64.47321319580078, "t": 37.66790771484375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "14", "text": "14"}, {"self_ref": "#/texts/304", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 30, "bbox": {"l": 93.28377532958984, "t": 37.28033447265625, "r": 334.4214172363281, "b": 28.06536865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/305", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 31, "bbox": {"l": 135.73501586914062, "t": 721.5136108398438, "r": 528.7305908203125, "b": 699.0009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 135]}], "orig": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.", "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"self_ref": "#/texts/306", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 31, "bbox": {"l": 136.3166961669922, "t": 378.73248291015625, "r": 342.55548095703125, "b": 369.1156921386719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Figure 3-1 CREATE PERMISSION SQL statement", "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"self_ref": "#/texts/307", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 31, "bbox": {"l": 136.24984741210938, "t": 353.2656555175781, "r": 215.88082885742188, "b": 340.95599365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Column mask", "text": "Column mask", "level": 1}, {"self_ref": "#/texts/308", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 31, "bbox": {"l": 135.803466796875, "t": 338.0789489746094, "r": 542.7664794921875, "b": 291.6988525390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 297]}], "orig": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number.", "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"self_ref": "#/texts/309", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 31, "bbox": {"l": 344.5666809082031, "t": 37.281982421875, "r": 523.6016235351562, "b": 27.9176025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/310", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 31, "bbox": {"l": 536.0999755859375, "t": 37.689697265625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "15", "text": "15"}, {"self_ref": "#/texts/311", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 32, "bbox": {"l": 64.44506072998047, "t": 37.52349853515625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "16", "text": "16"}, {"self_ref": "#/texts/312", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 32, "bbox": {"l": 93.31855010986328, "t": 37.286865234375, "r": 334.4214172363281, "b": 28.0611572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/313", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 136.0411376953125, "t": 721.397216796875, "r": 546.5693359375, "b": 687.2786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 221]}], "orig": "Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules.", "text": "Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules."}, {"self_ref": "#/texts/314", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 32, "bbox": {"l": 135.94520568847656, "t": 375.34112548828125, "r": 311.8898620605469, "b": 365.6970520019531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Figure 3-2 CREATE MASK SQL statement", "text": "Figure 3-2 CREATE MASK SQL statement"}, {"self_ref": "#/texts/315", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 32, "bbox": {"l": 64.21709442138672, "t": 346.41973876953125, "r": 286.7970275878906, "b": 332.696044921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "3.1.2 Enabling and activating RCAC", "text": "3.1.2 Enabling and activating RCAC", "level": 1}, {"self_ref": "#/texts/316", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 135.47596740722656, "t": 320.0126953125, "r": 547.1828002929688, "b": 285.6659240722656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 184]}], "orig": "You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17.", "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17."}, {"self_ref": "#/texts/317", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 136.03172302246094, "t": 274.14324951171875, "r": 547.2286376953125, "b": 168.1006622314453, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 734]}], "orig": "Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table.", "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table."}, {"self_ref": "#/texts/318", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 142.643798828125, "t": 150.07513427734375, "r": 531.8515625, "b": 128.0260009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 120]}], "orig": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed.", "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}, {"self_ref": "#/texts/319", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 33, "bbox": {"l": 135.7609405517578, "t": 442.0717468261719, "r": 415.2347106933594, "b": 432.6983947753906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements"}, {"self_ref": "#/texts/320", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 33, "bbox": {"l": 135.8385467529297, "t": 416.132568359375, "r": 547.2994995117188, "b": 357.935546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 433]}], "orig": "You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC.", "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC."}, {"self_ref": "#/texts/321", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 33, "bbox": {"l": 142.42935180664062, "t": 339.9495849609375, "r": 531.8515625, "b": 317.7235412597656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 120]}], "orig": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed.", "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}, {"self_ref": "#/texts/322", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 33, "bbox": {"l": 136.1680145263672, "t": 67.37353515625, "r": 306.3438720703125, "b": 57.78338623046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Figure 3-4 ALTER TABLE SQL statement", "text": "Figure 3-4 ALTER TABLE SQL statement"}, {"self_ref": "#/texts/323", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 33, "bbox": {"l": 344.607666015625, "t": 37.34271240234375, "r": 523.6016235351562, "b": 27.84613037109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/324", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 33, "bbox": {"l": 536.0054321289062, "t": 37.726806640625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "17", "text": "17"}, {"self_ref": "#/texts/325", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 34, "bbox": {"l": 64.41429901123047, "t": 37.559326171875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "18", "text": "18"}, {"self_ref": "#/texts/326", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 34, "bbox": {"l": 93.24517059326172, "t": 37.31939697265625, "r": 334.4214172363281, "b": 28.119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/327", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.7600555419922, "t": 721.2564086914062, "r": 547.273681640625, "b": 638.812744140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 566]}], "orig": "When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set.", "text": "When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set."}, {"self_ref": "#/texts/328", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.96725463867188, "t": 627.3378295898438, "r": 547.2686157226562, "b": 580.7529296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 378]}], "orig": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user's ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first.", "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user's ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first."}, {"self_ref": "#/texts/329", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 142.8000030517578, "t": 563.395263671875, "r": 537.4868774414062, "b": 541.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "Note: If a user does not have permission to access the row, the column mask logic is not invoked.", "text": "Note: If a user does not have permission to access the row, the column mask logic is not invoked."}, {"self_ref": "#/texts/330", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 34, "bbox": {"l": 64.29631042480469, "t": 508.64190673828125, "r": 438.7572021484375, "b": 492.2038269042969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "3.2 Special registers and built-in global variables", "text": "3.2 Special registers and built-in global variables", "level": 1}, {"self_ref": "#/texts/331", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.81504821777344, "t": 476.6042175292969, "r": 525.5018920898438, "b": 454.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 105]}], "orig": "This section describes how you can use special registers and built-in global variables to implement RCAC.", "text": "This section describes how you can use special registers and built-in global variables to implement RCAC."}, {"self_ref": "#/texts/332", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 34, "bbox": {"l": 64.23223114013672, "t": 434.255126953125, "r": 204.5852813720703, "b": 421.0963134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 23]}], "orig": "3.2.1 Special registers", "text": "3.2.1 Special registers", "level": 1}, {"self_ref": "#/texts/333", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.89915466308594, "t": 407.9602355957031, "r": 547.1063842773438, "b": 373.8841552734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 261]}], "orig": "A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server.", "text": "A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server."}, {"self_ref": "#/texts/334", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 136.08819580078125, "t": 362.5604553222656, "r": 544.5763549804688, "b": 316.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 323]}], "orig": "IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers:", "text": "IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers:"}, {"self_ref": "#/texts/335", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 135.6575927734375, "t": 309.4291076660156, "r": 546.981201171875, "b": 274.9290771484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 239]}], "orig": "GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION .", "text": "GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/336", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 135.68878173828125, "t": 268.813232421875, "r": 522.5455932617188, "b": 246.278564453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 110]}], "orig": "GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128).", "text": "GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/337", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 135.3015594482422, "t": 239.44622802734375, "r": 547.2483520507812, "b": 157.072021484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 594]}], "orig": "GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller's or the owner's user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner's authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "text": "GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller's or the owner's user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner's authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/338", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 135.51412963867188, "t": 150.1607666015625, "r": 547.2650756835938, "b": 91.47637939453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 422]}], "orig": "GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128).", "text": "GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/339", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 136.05694580078125, "t": 79.99713134765625, "r": 547.2014770507812, "b": 57.78228759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text.", "text": "In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text."}, {"self_ref": "#/texts/340", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 35, "bbox": {"l": 135.82176208496094, "t": 721.317138671875, "r": 412.20758056640625, "b": 711.1845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "Table 3-1 summarizes these special registers and their values.", "text": "Table 3-1 summarizes these special registers and their values."}, {"self_ref": "#/texts/341", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 35, "bbox": {"l": 136.8000030517578, "t": 699.2779541015625, "r": 372.7710876464844, "b": 690.0601806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "Table 3-1 Special registers and their corresponding values", "text": "Table 3-1 Special registers and their corresponding values"}, {"self_ref": "#/texts/342", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.3730926513672, "t": 578.6343383789062, "r": 538.493896484375, "b": 556.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:", "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"self_ref": "#/texts/343", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 35, "bbox": {"l": 135.5663299560547, "t": 549.454345703125, "r": 411.36138916015625, "b": 539.2213134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "GLYPH A user connects to the server using the user profile ALICE.", "text": "GLYPH A user connects to the server using the user profile ALICE.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/344", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 35, "bbox": {"l": 135.5452880859375, "t": 532.7073974609375, "r": 453.2580871582031, "b": 522.2791137695312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "GLYPH USER and CURRENT USER initially have the same value of ALICE.", "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/345", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 35, "bbox": {"l": 135.3970947265625, "t": 515.4821166992188, "r": 541.4498291015625, "b": 493.01019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 160]}], "orig": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called.", "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/346", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 35, "bbox": {"l": 135.5677947998047, "t": 486.18145751953125, "r": 547.2167358398438, "b": 451.4921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 253]}], "orig": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority.", "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/347", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 35, "bbox": {"l": 135.56973266601562, "t": 445.5053405761719, "r": 547.3540649414062, "b": 423.0643615722656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 133]}], "orig": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE.", "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/348", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 35, "bbox": {"l": 136.22442626953125, "t": 195.81939697265625, "r": 342.349853515625, "b": 186.25537109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "Figure 3-5 Special registers and adopted authority", "text": "Figure 3-5 Special registers and adopted authority"}, {"self_ref": "#/texts/349", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 35, "bbox": {"l": 64.079833984375, "t": 167.67864990234375, "r": 247.02536010742188, "b": 154.15521240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "3.2.2 Built-in global variables", "text": "3.2.2 Built-in global variables", "level": 1}, {"self_ref": "#/texts/350", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.3346710205078, "t": 141.24090576171875, "r": 518.0011596679688, "b": 119.0784683227539, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 161]}], "orig": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables.", "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"self_ref": "#/texts/351", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.17970275878906, "t": 107.37139892578125, "r": 532.3385009765625, "b": 72.93243408203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 233]}], "orig": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic.", "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"self_ref": "#/texts/352", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 35, "bbox": {"l": 344.5751037597656, "t": 37.29559326171875, "r": 523.6016235351562, "b": 27.93109130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/353", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 35, "bbox": {"l": 536.0416870117188, "t": 37.7122802734375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "19", "text": "19"}, {"self_ref": "#/texts/354", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 36, "bbox": {"l": 63.85088348388672, "t": 37.62542724609375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "20", "text": "20"}, {"self_ref": "#/texts/355", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 36, "bbox": {"l": 93.31550598144531, "t": 37.3028564453125, "r": 334.4214172363281, "b": 28.02935791015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/356", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 36, "bbox": {"l": 135.74647521972656, "t": 721.3251953125, "r": 342.5477294921875, "b": 711.1533813476562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Table 3-2 lists the nine built-in global variables.", "text": "Table 3-2 lists the nine built-in global variables."}, {"self_ref": "#/texts/357", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 36, "bbox": {"l": 64.80000305175781, "t": 699.1653442382812, "r": 201.82247924804688, "b": 690.177001953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Table 3-2 Built-in global variables", "text": "Table 3-2 Built-in global variables"}, {"self_ref": "#/texts/358", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 36, "bbox": {"l": 64.34713745117188, "t": 471.380859375, "r": 384.3638916015625, "b": 455.0362854003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "3.3 VERIFY_GROUP_FOR_USER function", "text": "3.3 VERIFY_GROUP_FOR_USER function", "level": 1}, {"self_ref": "#/texts/359", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 36, "bbox": {"l": 135.8567352294922, "t": 438.1376037597656, "r": 547.2347412109375, "b": 355.704833984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 576]}], "orig": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error.", "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"self_ref": "#/texts/360", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 36, "bbox": {"l": 136.01950073242188, "t": 344.5970458984375, "r": 547.2573852539062, "b": 310.2999572753906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 235]}], "orig": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value.", "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"self_ref": "#/texts/361", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 36, "bbox": {"l": 136.42428588867188, "t": 298.8746337890625, "r": 458.44525146484375, "b": 288.2803955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"self_ref": "#/texts/362", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 36, "bbox": {"l": 136.80001831054688, "t": 281.4947204589844, "r": 406.0775146484375, "b": 271.2408142089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "1. There are user profiles for MGR, JANE, JUDY, and TONY.", "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/363", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 36, "bbox": {"l": 135.8521728515625, "t": 264.1617431640625, "r": 396.9881591796875, "b": 253.80572509765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "2. The user profile JANE specifies a group profile of MGR.", "text": "2. The user profile JANE specifies a group profile of MGR.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/364", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 36, "bbox": {"l": 136.08595275878906, "t": 247.357666015625, "r": 536.568603515625, "b": 225.28138732910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:", "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/365", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 36, "bbox": {"l": 149.8811798095703, "t": 217.68408203125, "r": 451.01605224609375, "b": 150.09063720703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"self_ref": "#/texts/366", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 37, "bbox": {"l": 64.577880859375, "t": 721.906005859375, "r": 512.90087890625, "b": 687.0557861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "3.4 Establishing and controlling accessibility by using the RCAC rule text", "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text", "level": 1}, {"self_ref": "#/texts/367", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 135.82391357421875, "t": 670.6641235351562, "r": 544.9019775390625, "b": 636.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 230]}], "orig": "When defining a row permission or column mask, the \"magic\" of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine.", "text": "When defining a row permission or column mask, the \"magic\" of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine."}, {"self_ref": "#/texts/368", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 135.99398803710938, "t": 623.8250732421875, "r": 545.6567993164062, "b": 577.9219970703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 359]}], "orig": "In the case of a row permission, the rule text is the \"test\" of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot.", "text": "In the case of a row permission, the rule text is the \"test\" of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot."}, {"self_ref": "#/texts/369", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.151123046875, "t": 566.5162353515625, "r": 537.8551025390625, "b": 532.300048828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 196]}], "orig": "In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value.", "text": "In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value."}, {"self_ref": "#/texts/370", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.31472778320312, "t": 520.593505859375, "r": 547.2691040039062, "b": 498.2806396484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 117]}], "orig": "For a simple example of implementing row permissions and column masks, see 3.6, \"Human resources example\" on page 22.", "text": "For a simple example of implementing row permissions and column masks, see 3.6, \"Human resources example\" on page 22."}, {"self_ref": "#/texts/371", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.01747131347656, "t": 485.85302734375, "r": 545.9476928710938, "b": 464.0989074707031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 185]}], "orig": "In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause.", "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause."}, {"self_ref": "#/texts/372", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.0785675048828, "t": 452.537353515625, "r": 547.2494506835938, "b": 381.9795227050781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 504]}], "orig": "For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking.", "text": "For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking."}, {"self_ref": "#/texts/373", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.35562133789062, "t": 370.6085205078125, "r": 542.0492553710938, "b": 348.2829895019531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "For more information about what is permitted, see the \"Database programming\" topic of the IBM i 7.2 Knowledge Center, found at:", "text": "For more information about what is permitted, see the \"Database programming\" topic of the IBM i 7.2 Knowledge Center, found at:"}, {"self_ref": "#/texts/374", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.1328582763672, "t": 341.0989990234375, "r": 546.5352172851562, "b": 319.5921936035156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 86]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en"}, {"self_ref": "#/texts/375", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 135.92572021484375, "t": 307.27325439453125, "r": 547.0272216796875, "b": 237.0828857421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 546]}], "orig": "One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user's identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques.", "text": "One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user's identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques."}, {"self_ref": "#/texts/376", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.01707458496094, "t": 225.0654296875, "r": 547.3748779296875, "b": 154.92767333984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 538]}], "orig": "More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "text": "More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1."}, {"self_ref": "#/texts/377", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 37, "bbox": {"l": 136.3708953857422, "t": 143.520263671875, "r": 355.12689208984375, "b": 133.6683349609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "Example 3-1 Subquery that is used as part of the rule", "text": "Example 3-1 Subquery that is used as part of the rule"}, {"self_ref": "#/texts/378", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 226.1187744140625, "t": 113.84539794921875, "r": 331.77557373046875, "b": 104.54730987548828, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 13]}], "orig": "DATE_MASTER D", "text": "DATE_MASTER D"}, {"self_ref": "#/texts/379", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 222.19522094726562, "t": 102.1473388671875, "r": 371.6368408203125, "b": 91.81817626953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "D.BUSINESS_DAY = 'Y')", "text": "D.BUSINESS_DAY = 'Y')"}, {"self_ref": "#/texts/380", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 37, "bbox": {"l": 344.57867431640625, "t": 37.25799560546875, "r": 523.6016235351562, "b": 27.9051513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/381", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 37, "bbox": {"l": 535.7230834960938, "t": 37.71142578125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "21", "text": "21"}, {"self_ref": "#/texts/382", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 136.8000030517578, "t": 125.3218765258789, "r": 316.67755126953125, "b": 92.54750061035156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE", "text": "CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE"}, {"self_ref": "#/texts/383", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 38, "bbox": {"l": 63.83726119995117, "t": 37.62664794921875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "22", "text": "22"}, {"self_ref": "#/texts/384", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 38, "bbox": {"l": 93.2356185913086, "t": 37.29510498046875, "r": 334.4214172363281, "b": 28.12286376953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/385", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 135.83892822265625, "t": 721.335693359375, "r": 547.2915649414062, "b": 615.0796508789062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 763]}], "orig": "Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions.", "text": "Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions."}, {"self_ref": "#/texts/386", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 38, "bbox": {"l": 64.40492248535156, "t": 588.2117919921875, "r": 486.3243713378906, "b": 572.0363159179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "level": 1}, {"self_ref": "#/texts/387", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 135.95579528808594, "t": 555.3319702148438, "r": 547.2974243164062, "b": 473.1294250488281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 566]}], "orig": "RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis.", "text": "RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis."}, {"self_ref": "#/texts/388", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 136.07569885253906, "t": 461.2962341308594, "r": 547.1958618164062, "b": 426.9944763183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 275]}], "orig": "Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you.", "text": "Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you."}, {"self_ref": "#/texts/389", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 136.00733947753906, "t": 415.3765869140625, "r": 547.2606811523438, "b": 393.1242980957031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 138]}], "orig": "For more information and considerations about data movement in an RCAC environment, see Chapter 6, \"Additional considerations\" on page 85.", "text": "For more information and considerations about data movement in an RCAC environment, see Chapter 6, \"Additional considerations\" on page 85."}, {"self_ref": "#/texts/390", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 141.89248657226562, "t": 375.4718933105469, "r": 541.2198486328125, "b": 340.8992919921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 213]}], "orig": "Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data.", "text": "Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data."}, {"self_ref": "#/texts/391", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 38, "bbox": {"l": 64.5394515991211, "t": 308.8202819824219, "r": 298.8533935546875, "b": 292.92779541015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "3.6 Human resources example", "text": "3.6 Human resources example", "level": 1}, {"self_ref": "#/texts/392", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 135.87118530273438, "t": 275.9976806640625, "r": 542.829345703125, "b": 206.2593536376953, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 436]}], "orig": "This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users:", "text": "This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users:"}, {"self_ref": "#/texts/393", "parent": {"cref": "#/groups/22"}, "children": [], "label": "list_item", "prov": [{"page_no": 38, "bbox": {"l": 135.85508728027344, "t": 199.28631591796875, "r": 235.38601684570312, "b": 189.279541015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "GLYPH Tax_Id information", "text": "GLYPH Tax_Id information", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/394", "parent": {"cref": "#/groups/22"}, "children": [], "label": "list_item", "prov": [{"page_no": 38, "bbox": {"l": 135.5828094482422, "t": 187.2708740234375, "r": 470.03765869140625, "b": 177.224365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 87]}], "orig": "GLYPH YEAR of the birth date of the employee (hiding the age of the employee)", "text": "GLYPH YEAR of the birth date of the employee (hiding the age of the employee)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/395", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 136.1318817138672, "t": 165.2996826171875, "r": 375.29803466796875, "b": 155.09783935546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "In this example, there are four different types of users:", "text": "In this example, there are four different types of users:"}, {"self_ref": "#/texts/396", "parent": {"cref": "#/groups/23"}, "children": [], "label": "list_item", "prov": [{"page_no": 38, "bbox": {"l": 135.77261352539062, "t": 148.36187744140625, "r": 200.1146697998047, "b": 138.28036499023438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "GLYPH Employees", "text": "GLYPH Employees", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/397", "parent": {"cref": "#/groups/23"}, "children": [], "label": "list_item", "prov": [{"page_no": 38, "bbox": {"l": 135.6394805908203, "t": 136.5582275390625, "r": 195.63865661621094, "b": 126.28056335449219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "GLYPH Managers", "text": "GLYPH Managers", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/398", "parent": {"cref": "#/groups/23"}, "children": [], "label": "list_item", "prov": [{"page_no": 38, "bbox": {"l": 135.6507568359375, "t": 124.7410888671875, "r": 276.5639343261719, "b": 114.28074645996094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "GLYPH Human Resources Manager", "text": "GLYPH Human Resources Manager", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/399", "parent": {"cref": "#/groups/23"}, "children": [], "label": "list_item", "prov": [{"page_no": 38, "bbox": {"l": 135.71376037597656, "t": 112.5548095703125, "r": 539.58447265625, "b": 90.28113555908203, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 144]}], "orig": "GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.)", "text": "GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/400", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 135.66419982910156, "t": 78.08331298828125, "r": 546.5243530273438, "b": 56.261756896972656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 109]}], "orig": "The following sections describe step-by-step what is needed to be done to implement RCAC in this environment.", "text": "The following sections describe step-by-step what is needed to be done to implement RCAC in this environment."}, {"self_ref": "#/texts/401", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 39, "bbox": {"l": 64.25519561767578, "t": 721.8017578125, "r": 500.5502014160156, "b": 708.3052978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants", "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants", "level": 1}, {"self_ref": "#/texts/402", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 39, "bbox": {"l": 135.7902069091797, "t": 695.3858032226562, "r": 547.2426147460938, "b": 661.06640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 228]}], "orig": "The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, \"Security Administrator function: QIBM_DB_SECADM\" on page 9). Complete the following steps:", "text": "The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, \"Security Administrator function: QIBM_DB_SECADM\" on page 9). Complete the following steps:"}, {"self_ref": "#/texts/403", "parent": {"cref": "#/groups/24"}, "children": [], "label": "list_item", "prov": [{"page_no": 39, "bbox": {"l": 136.8000030517578, "t": 654.0445556640625, "r": 510.97723388671875, "b": 619.9440307617188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 161]}], "orig": "1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority.", "text": "1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/404", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 39, "bbox": {"l": 136.3125762939453, "t": 608.8530883789062, "r": 358.5176696777344, "b": 598.7147827148438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "Example 3-2 Function ID required to implement RCAC", "text": "Example 3-2 Function ID required to implement RCAC"}, {"self_ref": "#/texts/405", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 39, "bbox": {"l": 136.8000030517578, "t": 590.3218994140625, "r": 441.59588623046875, "b": 569.5473022460938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)"}, {"self_ref": "#/texts/406", "parent": {"cref": "#/groups/25"}, "children": [], "label": "list_item", "prov": [{"page_no": 39, "bbox": {"l": 136.02276611328125, "t": 555.4281005859375, "r": 547.2882080078125, "b": 533.1458740234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 163]}], "orig": "2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3.", "text": "2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/407", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 39, "bbox": {"l": 136.46849060058594, "t": 521.435302734375, "r": 460.0157775878906, "b": 511.7123107910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC"}, {"self_ref": "#/texts/408", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 39, "bbox": {"l": 136.8000030517578, "t": 503.3218994140625, "r": 346.6770935058594, "b": 422.5482177734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 129]}], "orig": "SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id ='QIBM_DB_SECADM' ORDER BY user_name;", "text": "SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id ='QIBM_DB_SECADM' ORDER BY user_name;"}, {"self_ref": "#/texts/409", "parent": {"cref": "#/groups/26"}, "children": [], "label": "list_item", "prov": [{"page_no": 39, "bbox": {"l": 135.87002563476562, "t": 408.0870361328125, "r": 545.5682983398438, "b": 385.96734619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 151]}], "orig": "3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database.", "text": "3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/410", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 39, "bbox": {"l": 136.01937866210938, "t": 324.9443054199219, "r": 307.21844482421875, "b": 314.9219970703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Figure 3-6 Result of the function ID query", "text": "Figure 3-6 Result of the function ID query"}, {"self_ref": "#/texts/411", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 39, "bbox": {"l": 64.10499572753906, "t": 296.5173034667969, "r": 418.56524658203125, "b": 282.97650146484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "3.6.2 Creating group profiles for the users and their roles", "text": "3.6.2 Creating group profiles for the users and their roles", "level": 1}, {"self_ref": "#/texts/412", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 39, "bbox": {"l": 135.9925994873047, "t": 270.00384521484375, "r": 532.9351806640625, "b": 247.64495849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 154]}], "orig": "Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps:", "text": "Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps:"}, {"self_ref": "#/texts/413", "parent": {"cref": "#/groups/27"}, "children": [], "label": "list_item", "prov": [{"page_no": 39, "bbox": {"l": 136.8000030517578, "t": 240.49017333984375, "r": 357.9049987792969, "b": 230.29901123046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "1. In this example, there are three group profiles:", "text": "1. In this example, there are three group profiles:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/414", "parent": {"cref": "#/groups/27"}, "children": [], "label": "list_item", "prov": [{"page_no": 39, "bbox": {"l": 151.3660430908203, "t": 224.04693603515625, "r": 313.8529357910156, "b": 213.640380859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "-HR (Human Resource personnel)", "text": "-HR (Human Resource personnel)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/415", "parent": {"cref": "#/groups/27"}, "children": [], "label": "list_item", "prov": [{"page_no": 39, "bbox": {"l": 151.38209533691406, "t": 211.79541015625, "r": 242.8311767578125, "b": 201.1751708984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "-MGR (Managers)", "text": "-MGR (Managers)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/416", "parent": {"cref": "#/groups/27"}, "children": [], "label": "list_item", "prov": [{"page_no": 39, "bbox": {"l": 151.16091918945312, "t": 199.9373779296875, "r": 245.60702514648438, "b": 189.66497802734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "orig": "-EMP (Employees)", "text": "-EMP (Employees)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/417", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 39, "bbox": {"l": 150.5602569580078, "t": 182.7015380859375, "r": 547.29541015625, "b": 160.22564697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 174]}], "orig": "These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles.", "text": "These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles."}, {"self_ref": "#/texts/418", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 39, "bbox": {"l": 136.35838317871094, "t": 148.7242431640625, "r": 285.8739318847656, "b": 138.73602294921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Example 3-4 Creating group profiles", "text": "Example 3-4 Creating group profiles"}, {"self_ref": "#/texts/419", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 39, "bbox": {"l": 136.8000030517578, "t": 130.84197998046875, "r": 441.59588623046875, "b": 98.0676040649414, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 174]}], "orig": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')"}, {"self_ref": "#/texts/420", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 39, "bbox": {"l": 344.5692443847656, "t": 37.2572021484375, "r": 523.6016235351562, "b": 27.8846435546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/421", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 39, "bbox": {"l": 535.6176147460938, "t": 37.63116455078125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "23", "text": "23"}, {"self_ref": "#/texts/422", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 40, "bbox": {"l": 63.88653564453125, "t": 37.68133544921875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "24", "text": "24"}, {"self_ref": "#/texts/423", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 40, "bbox": {"l": 93.27753448486328, "t": 37.33148193359375, "r": 334.4214172363281, "b": 28.0159912109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/424", "parent": {"cref": "#/groups/28"}, "children": [], "label": "list_item", "prov": [{"page_no": 40, "bbox": {"l": 136.0978240966797, "t": 721.5997314453125, "r": 547.2675170898438, "b": 674.9645385742188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 308]}], "orig": "2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS).", "text": "2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/425", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 156.851318359375, "t": 657.3757934570312, "r": 533.43896484375, "b": 646.6730346679688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 81]}], "orig": "Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "text": "Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile."}, {"self_ref": "#/texts/426", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 40, "bbox": {"l": 64.17131805419922, "t": 623.2008056640625, "r": 360.1609802246094, "b": 609.3201293945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "3.6.3 Demonstrating data access without RCAC", "text": "3.6.3 Demonstrating data access without RCAC", "level": 1}, {"self_ref": "#/texts/427", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 136.1033477783203, "t": 596.827392578125, "r": 540.3065185546875, "b": 574.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps:", "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps:"}, {"self_ref": "#/texts/428", "parent": {"cref": "#/groups/29"}, "children": [], "label": "list_item", "prov": [{"page_no": 40, "bbox": {"l": 136.76841735839844, "t": 567.540771484375, "r": 547.2156982421875, "b": 545.2590942382812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 124]}], "orig": "1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table.", "text": "1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/429", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 40, "bbox": {"l": 136.413330078125, "t": 533.3753662109375, "r": 334.6294250488281, "b": 523.678955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "Example 3-5 Counting the number of employees", "text": "Example 3-5 Counting the number of employees"}, {"self_ref": "#/texts/430", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 136.42640686035156, "t": 516.35400390625, "r": 406.6163635253906, "b": 505.2223815917969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"self_ref": "#/texts/431", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 150.4588623046875, "t": 492.0571594238281, "r": 545.1071166992188, "b": 469.52520751953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "orig": "The result of this query is shown in Figure 3-7, which is the total number of employees of the company.", "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of the company."}, {"self_ref": "#/texts/432", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 40, "bbox": {"l": 136.30203247070312, "t": 416.7283630371094, "r": 272.9559326171875, "b": 407.2127990722656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Figure 3-7 Number of employees", "text": "Figure 3-7 Number of employees"}, {"self_ref": "#/texts/433", "parent": {"cref": "#/groups/30"}, "children": [], "label": "list_item", "prov": [{"page_no": 40, "bbox": {"l": 136.12722778320312, "t": 390.7404479980469, "r": 547.2517700195312, "b": 368.23193359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 160]}], "orig": "2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are.", "text": "2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/434", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 40, "bbox": {"l": 136.4648895263672, "t": 356.55615234375, "r": 369.71875, "b": 347.0237731933594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "Example 3-6 Displaying the information of the Employees", "text": "Example 3-6 Displaying the information of the Employees"}, {"self_ref": "#/texts/435", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 136.8000030517578, "t": 338.681884765625, "r": 286.67803955078125, "b": 245.90841674804688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 124]}], "orig": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES", "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"self_ref": "#/texts/436", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 41, "bbox": {"l": 150.51434326171875, "t": 721.2857666015625, "r": 356.252197265625, "b": 710.7474365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "The result of this query is shown in Figure 3-8.", "text": "The result of this query is shown in Figure 3-8.", "level": 1}, {"self_ref": "#/texts/437", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 41, "bbox": {"l": 64.24310302734375, "t": 321.3759460449219, "r": 276.3370361328125, "b": 312.0570068359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "Figure 3-8 List of employees without RCAC enabled", "text": "Figure 3-8 List of employees without RCAC enabled"}, {"self_ref": "#/texts/438", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 41, "bbox": {"l": 64.31729888916016, "t": 292.3377685546875, "r": 339.9589538574219, "b": 278.92535400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "3.6.4 Defining and creating row permissions", "text": "3.6.4 Defining and creating row permissions", "level": 1}, {"self_ref": "#/texts/439", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 41, "bbox": {"l": 136.47174072265625, "t": 265.88421630859375, "r": 484.33428955078125, "b": 255.93072509765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:"}, {"self_ref": "#/texts/440", "parent": {"cref": "#/groups/31"}, "children": [], "label": "list_item", "prov": [{"page_no": 41, "bbox": {"l": 136.80001831054688, "t": 249.22784423828125, "r": 519.3287963867188, "b": 226.7816162109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 104]}], "orig": "1. Start by defining a row permission. In this example, the rules to enforce include the following ones:", "text": "1. Start by defining a row permission. In this example, the rules to enforce include the following ones:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/441", "parent": {"cref": "#/groups/31"}, "children": [], "label": "list_item", "prov": [{"page_no": 41, "bbox": {"l": 151.23526000976562, "t": 219.894287109375, "r": 392.5151062011719, "b": 209.737060546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "-Human Resources employees can see all the rows.", "text": "-Human Resources employees can see all the rows.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/442", "parent": {"cref": "#/groups/31"}, "children": [], "label": "list_item", "prov": [{"page_no": 41, "bbox": {"l": 151.32948303222656, "t": 207.68096923828125, "r": 484.94476318359375, "b": 197.8070068359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "-Managers can see only information for the employees that they manage.", "text": "-Managers can see only information for the employees that they manage.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/443", "parent": {"cref": "#/groups/31"}, "children": [], "label": "list_item", "prov": [{"page_no": 41, "bbox": {"l": 151.46128845214844, "t": 195.94891357421875, "r": 371.5732421875, "b": 185.70257568359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "-Employees can see only their own information.", "text": "-Employees can see only their own information.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/444", "parent": {"cref": "#/groups/31"}, "children": [], "label": "list_item", "prov": [{"page_no": 41, "bbox": {"l": 151.29678344726562, "t": 183.808837890625, "r": 415.18304443359375, "b": 173.96624755859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "-Consultants are not allowed to see any rows in the table.", "text": "-Consultants are not allowed to see any rows in the table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/445", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 41, "bbox": {"l": 344.6938781738281, "t": 37.16973876953125, "r": 523.6016235351562, "b": 27.9832763671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/446", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 41, "bbox": {"l": 535.7025146484375, "t": 37.624755859375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "25", "text": "25"}, {"self_ref": "#/texts/447", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 42, "bbox": {"l": 63.85331726074219, "t": 37.61859130859375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "26", "text": "26"}, {"self_ref": "#/texts/448", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 42, "bbox": {"l": 93.32594299316406, "t": 37.32861328125, "r": 334.4214172363281, "b": 28.073486328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/449", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 42, "bbox": {"l": 150.2159423828125, "t": 721.3442993164062, "r": 538.560302734375, "b": 710.8866577148438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 85]}], "orig": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7."}, {"self_ref": "#/texts/450", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 42, "bbox": {"l": 136.3914031982422, "t": 699.560791015625, "r": 383.7792053222656, "b": 689.8576049804688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "Example 3-7 Creating a permission for the EMPLOYEE table", "text": "Example 3-7 Creating a permission for the EMPLOYEE table"}, {"self_ref": "#/texts/451", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 42, "bbox": {"l": 134.622802734375, "t": 686.9898681640625, "r": 547.7505493164062, "b": 547.480224609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 438]}], "orig": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ;", "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ;"}, {"self_ref": "#/texts/452", "parent": {"cref": "#/groups/32"}, "children": [], "label": "list_item", "prov": [{"page_no": 42, "bbox": {"l": 135.9988250732422, "t": 538.8099365234375, "r": 539.8582153320312, "b": 504.1722717285156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 212]}], "orig": "2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, \"Enabling and activating RCAC\" on page 16.", "text": "2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, \"Enabling and activating RCAC\" on page 16.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/453", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 42, "bbox": {"l": 64.43289947509766, "t": 300.5486755371094, "r": 331.18115234375, "b": 291.20758056640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "Figure 3-9 Row permissions that are shown in System i Navigator", "text": "Figure 3-9 Row permissions that are shown in System i Navigator"}, {"self_ref": "#/texts/454", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 42, "bbox": {"l": 64.18317413330078, "t": 271.5654296875, "r": 327.4058837890625, "b": 258.0186767578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "3.6.5 Defining and creating column masks", "text": "3.6.5 Defining and creating column masks", "level": 1}, {"self_ref": "#/texts/455", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 42, "bbox": {"l": 136.35951232910156, "t": 245.205810546875, "r": 526.414306640625, "b": 223.205078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "Define the different masks for the columns that are sensitive by completing the following steps:", "text": "Define the different masks for the columns that are sensitive by completing the following steps:"}, {"self_ref": "#/texts/456", "parent": {"cref": "#/groups/33"}, "children": [], "label": "list_item", "prov": [{"page_no": 42, "bbox": {"l": 136.79542541503906, "t": 216.73974609375, "r": 538.78564453125, "b": 194.23492431640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 104]}], "orig": "1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones:", "text": "1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/457", "parent": {"cref": "#/groups/33"}, "children": [], "label": "list_item", "prov": [{"page_no": 42, "bbox": {"l": 151.26760864257812, "t": 187.36602783203125, "r": 467.65625, "b": 177.4149169921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "-Human Resources can see the entire date of birth of the employees.", "text": "-Human Resources can see the entire date of birth of the employees.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/458", "parent": {"cref": "#/groups/33"}, "children": [], "label": "list_item", "prov": [{"page_no": 42, "bbox": {"l": 151.2598114013672, "t": 170.74359130859375, "r": 375.3867492675781, "b": 160.2803955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "-Employees can see only their own date of birth.", "text": "-Employees can see only their own date of birth.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/459", "parent": {"cref": "#/groups/33"}, "children": [], "label": "list_item", "prov": [{"page_no": 42, "bbox": {"l": 151.43798828125, "t": 153.414794921875, "r": 547.2565307617188, "b": 143.18109130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 83]}], "orig": "-Managers can see the date of birth of their employees masked with YEAR being 9999.", "text": "-Managers can see the date of birth of their employees masked with YEAR being 9999.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/460", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 42, "bbox": {"l": 150.7313232421875, "t": 136.70220947265625, "r": 530.0606689453125, "b": 126.41015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "orig": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8."}, {"self_ref": "#/texts/461", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 42, "bbox": {"l": 136.27670288085938, "t": 114.8758544921875, "r": 403.9977722167969, "b": 105.1051025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column"}, {"self_ref": "#/texts/462", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 42, "bbox": {"l": 136.8000030517578, "t": 96.58187866210938, "r": 416.6361083984375, "b": 63.80750274658203, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 114]}], "orig": "CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH", "text": "CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH"}, {"self_ref": "#/texts/463", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 43, "bbox": {"l": 136.79959106445312, "t": 720.341552734375, "r": 166.73934936523438, "b": 699.5669555664062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "RETURN CASE", "text": "RETURN CASE"}, {"self_ref": "#/texts/464", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 43, "bbox": {"l": 136.79959106445312, "t": 700.2308349609375, "r": 521.5742797851562, "b": 530.429443359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 437]}], "orig": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;", "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"self_ref": "#/texts/465", "parent": {"cref": "#/groups/34"}, "children": [], "label": "list_item", "prov": [{"page_no": 43, "bbox": {"l": 135.86044311523438, "t": 517.5462646484375, "r": 547.2122192382812, "b": 495.22808837890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:", "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/466", "parent": {"cref": "#/groups/34"}, "children": [], "label": "list_item", "prov": [{"page_no": 43, "bbox": {"l": 151.1599578857422, "t": 488.6722717285156, "r": 469.1528015136719, "b": 478.3014831542969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "-Human Resources can see the unmasked TAX_ID of the employees.", "text": "-Human Resources can see the unmasked TAX_ID of the employees.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/467", "parent": {"cref": "#/groups/34"}, "children": [], "label": "list_item", "prov": [{"page_no": 43, "bbox": {"l": 151.2740936279297, "t": 471.45074462890625, "r": 403.95953369140625, "b": 461.1424560546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "-Employees can see only their own unmasked TAX_ID.", "text": "-Employees can see only their own unmasked TAX_ID.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/468", "parent": {"cref": "#/groups/34"}, "children": [], "label": "list_item", "prov": [{"page_no": 43, "bbox": {"l": 151.4427947998047, "t": 454.6841735839844, "r": 545.16845703125, "b": 432.28228759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 129]}], "orig": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234).", "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/469", "parent": {"cref": "#/groups/34"}, "children": [], "label": "list_item", "prov": [{"page_no": 43, "bbox": {"l": 151.51747131347656, "t": 425.3660888671875, "r": 529.463623046875, "b": 414.8310852050781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/470", "parent": {"cref": "#/groups/34"}, "children": [], "label": "list_item", "prov": [{"page_no": 43, "bbox": {"l": 150.69093322753906, "t": 408.19866943359375, "r": 530.060302734375, "b": 397.82440185546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "orig": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/471", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 43, "bbox": {"l": 136.25662231445312, "t": 386.553955078125, "r": 352.31475830078125, "b": 376.9618835449219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Example 3-9 Creating a mask on the TAX_ID column", "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"self_ref": "#/texts/472", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 43, "bbox": {"l": 135.95343017578125, "t": 373.4818115234375, "r": 535.87548828125, "b": 103.45672607421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 590]}], "orig": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;", "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}, {"self_ref": "#/texts/473", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 43, "bbox": {"l": 344.5617370605469, "t": 37.32916259765625, "r": 523.6016235351562, "b": 27.86419677734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/474", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 43, "bbox": {"l": 535.6422729492188, "t": 37.82464599609375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "27", "text": "27"}, {"self_ref": "#/texts/475", "parent": {"cref": "#/groups/35"}, "children": [], "label": "list_item", "prov": [{"page_no": 44, "bbox": {"l": 136.14459228515625, "t": 721.3890380859375, "r": 449.952392578125, "b": 710.7732543945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/476", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 44, "bbox": {"l": 64.17350769042969, "t": 619.2543334960938, "r": 294.42578125, "b": 610.1016235351562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Figure 3-10 Column masks shown in System i Navigator", "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"self_ref": "#/texts/477", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 44, "bbox": {"l": 64.29059600830078, "t": 590.3381958007812, "r": 203.98521423339844, "b": 577.004638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "3.6.6 Activating RCAC", "text": "3.6.6 Activating RCAC", "level": 1}, {"self_ref": "#/texts/478", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 44, "bbox": {"l": 136.1686553955078, "t": 563.902587890625, "r": 547.2256469726562, "b": 529.5360107421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"self_ref": "#/texts/479", "parent": {"cref": "#/groups/36"}, "children": [], "label": "list_item", "prov": [{"page_no": 44, "bbox": {"l": 136.5933074951172, "t": 523.4700317382812, "r": 409.4788818359375, "b": 513.1278076171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "1. Run the SQL statements that are shown in Example 3-10.", "text": "1. Run the SQL statements that are shown in Example 3-10.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/480", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 44, "bbox": {"l": 136.31597900390625, "t": 501.5721435546875, "r": 375.2909851074219, "b": 491.5029296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Example 3-10 Activating RCAC on the EMPLOYEES table", "text": "Example 3-10 Activating RCAC on the EMPLOYEES table", "level": 1}, {"self_ref": "#/texts/481", "parent": {"cref": "#/groups/37"}, "children": [], "label": "list_item", "prov": [{"page_no": 44, "bbox": {"l": 135.7803192138672, "t": 484.90777587890625, "r": 376.6766052246094, "b": 473.9972839355469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "/* Active Row Access Control (permissions) */", "text": "/* Active Row Access Control (permissions) */", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/482", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 44, "bbox": {"l": 136.8000030517578, "t": 471.3420715332031, "r": 354.86962890625, "b": 426.5678405761719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 131]}], "orig": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;", "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"self_ref": "#/texts/483", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 44, "bbox": {"l": 365.77313232421875, "t": 471.3420715332031, "r": 376.6766052246094, "b": 462.5672912597656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "*/", "text": "*/"}, {"self_ref": "#/texts/484", "parent": {"cref": "#/groups/38"}, "children": [], "label": "list_item", "prov": [{"page_no": 44, "bbox": {"l": 135.87640380859375, "t": 412.6735534667969, "r": 540.8014526367188, "b": 378.27978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 231]}], "orig": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition .", "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/485", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 44, "bbox": {"l": 64.33819580078125, "t": 143.758056640625, "r": 348.354736328125, "b": 134.59954833984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"self_ref": "#/texts/486", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 44, "bbox": {"l": 63.84088897705078, "t": 37.61041259765625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "28", "text": "28"}, {"self_ref": "#/texts/487", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 44, "bbox": {"l": 93.28304290771484, "t": 37.27587890625, "r": 334.4214172363281, "b": 28.056396484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/488", "parent": {"cref": "#/groups/39"}, "children": [], "label": "list_item", "prov": [{"page_no": 45, "bbox": {"l": 135.99427795410156, "t": 721.436767578125, "r": 531.1966552734375, "b": 699.1064453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 152]}], "orig": "3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked.", "text": "3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/489", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 45, "bbox": {"l": 136.06971740722656, "t": 451.5973205566406, "r": 356.7056579589844, "b": 441.8953857421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table"}, {"self_ref": "#/texts/490", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 45, "bbox": {"l": 64.2018051147461, "t": 423.00640869140625, "r": 339.8397216796875, "b": 409.5545349121094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "3.6.7 Demonstrating data access with RCAC", "text": "3.6.7 Demonstrating data access with RCAC", "level": 1}, {"self_ref": "#/texts/491", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 45, "bbox": {"l": 135.7947235107422, "t": 396.53436279296875, "r": 547.259521484375, "b": 374.49847412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 100]}], "orig": "You are now ready to start testing RCAC with the four different users. Complete the following steps:", "text": "You are now ready to start testing RCAC with the four different users. Complete the following steps:"}, {"self_ref": "#/texts/492", "parent": {"cref": "#/groups/40"}, "children": [], "label": "list_item", "prov": [{"page_no": 45, "bbox": {"l": 136.66810607910156, "t": 367.43341064453125, "r": 544.1072387695312, "b": 332.9556884765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 243]}], "orig": "1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, \"Demonstrating data access without RCAC\" on page 24).", "text": "1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, \"Demonstrating data access without RCAC\" on page 24).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/493", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 45, "bbox": {"l": 136.4961700439453, "t": 321.431640625, "r": 279.97296142578125, "b": 312.2276306152344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "Example 3-11 EMPLOYEES count", "text": "Example 3-11 EMPLOYEES count"}, {"self_ref": "#/texts/494", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 45, "bbox": {"l": 136.306396484375, "t": 304.6670227050781, "r": 406.6163635253906, "b": 293.92047119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"self_ref": "#/texts/495", "parent": {"cref": "#/groups/41"}, "children": [], "label": "list_item", "prov": [{"page_no": 45, "bbox": {"l": 135.95774841308594, "t": 280.7308044433594, "r": 511.5380859375, "b": 258.1456298828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 146]}], "orig": "2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees).", "text": "2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/496", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 45, "bbox": {"l": 136.27264404296875, "t": 206.06488037109375, "r": 309.68194580078125, "b": 196.52191162109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Figure 3-13 Count of EMPLOYEES by HR", "text": "Figure 3-13 Count of EMPLOYEES by HR"}, {"self_ref": "#/texts/497", "parent": {"cref": "#/groups/42"}, "children": [], "label": "list_item", "prov": [{"page_no": 45, "bbox": {"l": 136.16087341308594, "t": 180.08966064453125, "r": 540.7218627929688, "b": 145.78839111328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 216]}], "orig": "3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6.", "text": "3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/498", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 45, "bbox": {"l": 136.1033172607422, "t": 94.15911865234375, "r": 340.1351318359375, "b": 84.3720703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "Figure 3-14 Count of EMPLOYEES by a manager", "text": "Figure 3-14 Count of EMPLOYEES by a manager"}, {"self_ref": "#/texts/499", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 45, "bbox": {"l": 344.54718017578125, "t": 37.26470947265625, "r": 523.6016235351562, "b": 27.9293212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/500", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 45, "bbox": {"l": 535.6342163085938, "t": 37.72052001953125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "29", "text": "29"}, {"self_ref": "#/texts/501", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 46, "bbox": {"l": 64.19510650634766, "t": 37.57171630859375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "30", "text": "30"}, {"self_ref": "#/texts/502", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 46, "bbox": {"l": 93.36414337158203, "t": 37.2904052734375, "r": 334.4214172363281, "b": 28.0338134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/503", "parent": {"cref": "#/groups/43"}, "children": [], "label": "list_item", "prov": [{"page_no": 46, "bbox": {"l": 135.79859924316406, "t": 721.3585815429688, "r": 547.213623046875, "b": 698.8319091796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 169]}], "orig": "4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row).", "text": "4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/504", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 46, "bbox": {"l": 135.97097778320312, "t": 647.4303588867188, "r": 347.41455078125, "b": 637.8975219726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "Figure 3-15 Count of EMPLOYEES by an employee", "text": "Figure 3-15 Count of EMPLOYEES by an employee"}, {"self_ref": "#/texts/505", "parent": {"cref": "#/groups/44"}, "children": [], "label": "list_item", "prov": [{"page_no": 46, "bbox": {"l": 136.351318359375, "t": 621.2763061523438, "r": 543.9885864257812, "b": 587.114501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 200]}], "orig": "5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all.", "text": "5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/506", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 46, "bbox": {"l": 136.17999267578125, "t": 535.4434814453125, "r": 345.2605285644531, "b": 526.1991577148438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "Figure 3-16 Count of EMPLOYEES by a consultant", "text": "Figure 3-16 Count of EMPLOYEES by a consultant"}, {"self_ref": "#/texts/507", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 46, "bbox": {"l": 150.62869262695312, "t": 509.34820556640625, "r": 456.2101135253906, "b": 499.5382995605469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "Does the result make sense? Yes, it does because RCAC is enabled.", "text": "Does the result make sense? Yes, it does because RCAC is enabled."}, {"self_ref": "#/texts/508", "parent": {"cref": "#/groups/45"}, "children": [], "label": "list_item", "prov": [{"page_no": 46, "bbox": {"l": 136.16029357910156, "t": 492.6539306640625, "r": 544.2874145507812, "b": 458.40106201171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 262]}], "orig": "6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, \"Demonstrating data access without RCAC\" on page 24. It is shown in Example 3-12.", "text": "6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, \"Demonstrating data access without RCAC\" on page 24. It is shown in Example 3-12.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/509", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 46, "bbox": {"l": 136.2924041748047, "t": 446.6560363769531, "r": 396.5692138671875, "b": 437.3970031738281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "Example 3-12 SELECT statement to test with the different users", "text": "Example 3-12 SELECT statement to test with the different users"}, {"self_ref": "#/texts/510", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 46, "bbox": {"l": 134.74452209472656, "t": 435.07708740234375, "r": 548.0267333984375, "b": 330.2794189453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 124]}], "orig": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES", "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"self_ref": "#/texts/511", "parent": {"cref": "#/groups/46"}, "children": [], "label": "list_item", "prov": [{"page_no": 47, "bbox": {"l": 136.29183959960938, "t": 721.4707641601562, "r": 547.152587890625, "b": 699.2781372070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 145]}], "orig": "7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns.", "text": "7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/512", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 47, "bbox": {"l": 64.41815185546875, "t": 305.3443908691406, "r": 338.3864440917969, "b": 296.0057373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 64]}], "orig": "Figure 3-17 SQL statement result by Human Resources user profile", "text": "Figure 3-17 SQL statement result by Human Resources user profile"}, {"self_ref": "#/texts/513", "parent": {"cref": "#/groups/47"}, "children": [], "label": "list_item", "prov": [{"page_no": 47, "bbox": {"l": 136.21075439453125, "t": 279.45849609375, "r": 546.0484008789062, "b": 256.860107421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 139]}], "orig": "8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns.", "text": "8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/514", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 47, "bbox": {"l": 64.57685852050781, "t": 174.60491943359375, "r": 279.62469482421875, "b": 165.2398681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Figure 3-18 SQL statement result by Manager profile", "text": "Figure 3-18 SQL statement result by Manager profile"}, {"self_ref": "#/texts/515", "parent": {"cref": "#/groups/48"}, "children": [], "label": "list_item", "prov": [{"page_no": 47, "bbox": {"l": 136.3648223876953, "t": 148.64361572265625, "r": 518.9005737304688, "b": 126.15972900390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 145]}], "orig": "9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all.", "text": "9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/516", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 47, "bbox": {"l": 64.505126953125, "t": 86.79803466796875, "r": 295.1390380859375, "b": 77.33699798583984, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "Figure 3-19 SQL statement result by an employee profile", "text": "Figure 3-19 SQL statement result by an employee profile"}, {"self_ref": "#/texts/517", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 47, "bbox": {"l": 344.6293640136719, "t": 37.2392578125, "r": 523.6016235351562, "b": 27.898193359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/518", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 47, "bbox": {"l": 535.7171630859375, "t": 37.71160888671875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "31", "text": "31"}, {"self_ref": "#/texts/519", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 48, "bbox": {"l": 64.27489471435547, "t": 37.553955078125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "32", "text": "32"}, {"self_ref": "#/texts/520", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 48, "bbox": {"l": 93.40065002441406, "t": 37.27056884765625, "r": 334.4214172363281, "b": 28.07379150390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/521", "parent": {"cref": "#/groups/49"}, "children": [], "label": "list_item", "prov": [{"page_no": 48, "bbox": {"l": 136.8000030517578, "t": 721.3038330078125, "r": 547.2752685546875, "b": 699.0477294921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 117]}], "orig": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company's employees.", "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company's employees.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/522", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 48, "bbox": {"l": 64.38975524902344, "t": 626.5992431640625, "r": 308.0195617675781, "b": 617.4529418945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "Figure 3-20 SQL statement result by Consultant/DBE profile", "text": "Figure 3-20 SQL statement result by Consultant/DBE profile"}, {"self_ref": "#/texts/523", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 48, "bbox": {"l": 64.18441009521484, "t": 598.262939453125, "r": 408.9774475097656, "b": 584.9585571289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "3.6.8 Demonstrating data access with a view and RCAC", "text": "3.6.8 Demonstrating data access with a view and RCAC", "level": 1}, {"self_ref": "#/texts/524", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 48, "bbox": {"l": 135.6727294921875, "t": 571.9627685546875, "r": 515.0767822265625, "b": 561.6839599609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 83]}], "orig": "This section covers data access with a view and RCAC. Complete the following steps:", "text": "This section covers data access with a view and RCAC. Complete the following steps:"}, {"self_ref": "#/texts/525", "parent": {"cref": "#/groups/50"}, "children": [], "label": "list_item", "prov": [{"page_no": 48, "bbox": {"l": 136.79998779296875, "t": 554.5849609375, "r": 547.2307739257812, "b": 520.4425048828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 227]}], "orig": "1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave.", "text": "1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/526", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 49, "bbox": {"l": 64.41194152832031, "t": 225.3311767578125, "r": 198.96627807617188, "b": 215.8448486328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Figure 3-21 Employees on leave", "text": "Figure 3-21 Employees on leave"}, {"self_ref": "#/texts/527", "parent": {"cref": "#/groups/51"}, "children": [], "label": "list_item", "prov": [{"page_no": 49, "bbox": {"l": 136.17755126953125, "t": 199.36651611328125, "r": 355.6940002441406, "b": 189.02825927734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "2. Example 3-13 shows the definition of the view.", "text": "2. Example 3-13 shows the definition of the view.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/528", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 49, "bbox": {"l": 136.4932098388672, "t": 177.39019775390625, "r": 311.614013671875, "b": 167.56768798828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "Example 3-13 VIew of employees on leave", "text": "Example 3-13 VIew of employees on leave"}, {"self_ref": "#/texts/529", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 49, "bbox": {"l": 136.7435302734375, "t": 161.1607666015625, "r": 426.59613037109375, "b": 65.85064697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 159]}], "orig": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH,", "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH,"}, {"self_ref": "#/texts/530", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 49, "bbox": {"l": 344.5408020019531, "t": 37.31829833984375, "r": 523.6016235351562, "b": 27.86322021484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/531", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 49, "bbox": {"l": 535.63330078125, "t": 37.6053466796875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "33", "text": "33"}, {"self_ref": "#/texts/532", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 258.8564758300781, "t": 720.8930053710938, "r": 446.6356201171875, "b": 674.08154296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG )", "text": "TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG )"}, {"self_ref": "#/texts/533", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 135.8447265625, "t": 673.0587768554688, "r": 151.74000549316406, "b": 663.56787109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "AS", "text": "AS"}, {"self_ref": "#/texts/534", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 136.8000030517578, "t": 660.3428344726562, "r": 271.67828369140625, "b": 531.5698852539062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 164]}], "orig": "SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE,", "text": "SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE,"}, {"self_ref": "#/texts/535", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 155.53102111816406, "t": 529.690673828125, "r": 236.6987762451172, "b": 519.570068359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 13]}], "orig": "ON_LEAVE_FLAG", "text": "ON_LEAVE_FLAG"}, {"self_ref": "#/texts/536", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 136.8000030517578, "t": 517.0009765625, "r": 157.71849060058594, "b": 507.57025146484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 4]}], "orig": "FROM", "text": "FROM"}, {"self_ref": "#/texts/537", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 167.92576599121094, "t": 517.4595947265625, "r": 271.67828369140625, "b": 507.57025146484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "HR_SCHEMA.EMPLOYEES", "text": "HR_SCHEMA.EMPLOYEES"}, {"self_ref": "#/texts/538", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 136.10264587402344, "t": 505.1119384765625, "r": 161.95062255859375, "b": 495.5704345703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 5]}], "orig": "WHERE", "text": "WHERE"}, {"self_ref": "#/texts/539", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 171.0566864013672, "t": 505.46636962890625, "r": 271.67828369140625, "b": 494.4849853515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 20]}], "orig": "ON_LEAVE_FLAG = 'Y';", "text": "ON_LEAVE_FLAG = 'Y';"}, {"self_ref": "#/texts/540", "parent": {"cref": "#/groups/52"}, "children": [], "label": "list_item", "prov": [{"page_no": 50, "bbox": {"l": 136.068359375, "t": 476.58831787109375, "r": 547.3662109375, "b": 454.30218505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14:", "text": "3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/541", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 50, "bbox": {"l": 136.2685546875, "t": 442.06927490234375, "r": 354.4166564941406, "b": 432.4124450683594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "Example 3-14 SQL statement for employees on leave", "text": "Example 3-14 SQL statement for employees on leave"}, {"self_ref": "#/texts/542", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 136.8000030517578, "t": 424.36187744140625, "r": 266.6982727050781, "b": 331.58837890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 104]}], "orig": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM", "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM"}, {"self_ref": "#/texts/543", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 50, "bbox": {"l": 167.6361541748047, "t": 341.4685363769531, "r": 316.67755126953125, "b": 331.1232604980469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;"}, {"self_ref": "#/texts/544", "parent": {"cref": "#/groups/53"}, "children": [], "label": "list_item", "prov": [{"page_no": 50, "bbox": {"l": 135.88938903808594, "t": 317.5455322265625, "r": 547.2506713867188, "b": 270.649169921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 264]}], "orig": "4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22.", "text": "4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/545", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 50, "bbox": {"l": 64.29961395263672, "t": 222.33502197265625, "r": 301.89312744140625, "b": 212.2880859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "Figure 3-22 Employees on leave - Human Resources user", "text": "Figure 3-22 Employees on leave - Human Resources user"}, {"self_ref": "#/texts/546", "parent": {"cref": "#/groups/54"}, "children": [], "label": "list_item", "prov": [{"page_no": 50, "bbox": {"l": 136.30172729492188, "t": 196.0367431640625, "r": 546.509521484375, "b": 149.5836181640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well.", "text": "5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/547", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 50, "bbox": {"l": 64.38579559326172, "t": 108.1334228515625, "r": 313.5398254394531, "b": 98.30462646484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "Figure 3-23 Employee on leave - Manager of Field Reps user", "text": "Figure 3-23 Employee on leave - Manager of Field Reps user"}, {"self_ref": "#/texts/548", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 50, "bbox": {"l": 64.1474609375, "t": 37.6011962890625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "34", "text": "34"}, {"self_ref": "#/texts/549", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 50, "bbox": {"l": 93.26473999023438, "t": 37.29864501953125, "r": 334.4214172363281, "b": 27.98931884765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/550", "parent": {"cref": "#/groups/55"}, "children": [], "label": "list_item", "prov": [{"page_no": 51, "bbox": {"l": 136.05897521972656, "t": 721.3394165039062, "r": 536.1886596679688, "b": 699.046630859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 170]}], "orig": "6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave.", "text": "6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/551", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 51, "bbox": {"l": 64.79974365234375, "t": 693.4913940429688, "r": 67.5686264038086, "b": 684.2783813476562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": ".", "text": "."}, {"self_ref": "#/texts/552", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 51, "bbox": {"l": 64.34432983398438, "t": 636.3045043945312, "r": 265.8516540527344, "b": 627.0074462890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "Figure 3-24 Employees on leave - employee user", "text": "Figure 3-24 Employees on leave - employee user"}, {"self_ref": "#/texts/553", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 51, "bbox": {"l": 344.6600646972656, "t": 37.25311279296875, "r": 523.6016235351562, "b": 27.9105224609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/554", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 51, "bbox": {"l": 535.7924194335938, "t": 37.69573974609375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "35", "text": "35"}, {"self_ref": "#/texts/555", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 52, "bbox": {"l": 64.35157775878906, "t": 37.707763671875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "36", "text": "36"}, {"self_ref": "#/texts/556", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 52, "bbox": {"l": 93.37352752685547, "t": 37.489013671875, "r": 334.5318603515625, "b": 27.9476318359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/557", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 53, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 4.", "text": "Chapter 4."}, {"self_ref": "#/texts/558", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 53, "bbox": {"l": 500.3999938964844, "t": 699.611083984375, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "4", "text": "4"}, {"self_ref": "#/texts/559", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 53, "bbox": {"l": 135.96546936035156, "t": 538.5458984375, "r": 532.0337524414062, "b": 451.1016845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "Implementing Row and Column Access Control: Banking example", "text": "Implementing Row and Column Access Control: Banking example", "level": 1}, {"self_ref": "#/texts/560", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 53, "bbox": {"l": 135.8340301513672, "t": 413.33544921875, "r": 546.1500854492188, "b": 367.058837890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 289]}], "orig": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, \"Database definitions for the RCAC banking example\" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example.", "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, \"Database definitions for the RCAC banking example\" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"self_ref": "#/texts/561", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 53, "bbox": {"l": 135.71417236328125, "t": 355.2895812988281, "r": 347.4121398925781, "b": 344.93609619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "The following topics are covered in this chapter:", "text": "The following topics are covered in this chapter:"}, {"self_ref": "#/texts/562", "parent": {"cref": "#/groups/56"}, "children": [], "label": "list_item", "prov": [{"page_no": 53, "bbox": {"l": 135.7564697265625, "t": 338.0458679199219, "r": 392.97119140625, "b": 327.7724304199219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "GLYPH Business requirements for the RCAC banking scenario", "text": "GLYPH Business requirements for the RCAC banking scenario", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/563", "parent": {"cref": "#/groups/56"}, "children": [], "label": "list_item", "prov": [{"page_no": 53, "bbox": {"l": 135.56719970703125, "t": 326.4755554199219, "r": 368.54632568359375, "b": 315.9309387207031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "GLYPH Description of the users roles and responsibilities", "text": "GLYPH Description of the users roles and responsibilities", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/564", "parent": {"cref": "#/groups/56"}, "children": [], "label": "list_item", "prov": [{"page_no": 53, "bbox": {"l": 135.7265167236328, "t": 313.9096374511719, "r": 261.45440673828125, "b": 303.9350280761719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "GLYPH Implementation of RCAC", "text": "GLYPH Implementation of RCAC", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/565", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 53, "bbox": {"l": 63.681270599365234, "t": 37.34552001953125, "r": 257.24334716796875, "b": 27.83880615234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/566", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 53, "bbox": {"l": 535.5507202148438, "t": 37.83416748046875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "37", "text": "37"}, {"self_ref": "#/texts/567", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 54, "bbox": {"l": 64.15269470214844, "t": 718.7112426757812, "r": 512.5513916015625, "b": 702.2404174804688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "4.1 Business requirements for the RCAC banking scenario", "text": "4.1 Business requirements for the RCAC banking scenario", "level": 1}, {"self_ref": "#/texts/568", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 54, "bbox": {"l": 135.70774841308594, "t": 686.0623779296875, "r": 543.9003295898438, "b": 663.635009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 189]}], "orig": "As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application:", "text": "As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application:"}, {"self_ref": "#/texts/569", "parent": {"cref": "#/groups/57"}, "children": [], "label": "list_item", "prov": [{"page_no": 54, "bbox": {"l": 135.7441864013672, "t": 657.2281494140625, "r": 214.6067352294922, "b": 647.138916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "GLYPH CUSTOMERS", "text": "GLYPH CUSTOMERS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/570", "parent": {"cref": "#/groups/57"}, "children": [], "label": "list_item", "prov": [{"page_no": 54, "bbox": {"l": 135.63128662109375, "t": 645.2169189453125, "r": 206.64071655273438, "b": 635.1390991210938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "GLYPH ACCOUNTS", "text": "GLYPH ACCOUNTS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/571", "parent": {"cref": "#/groups/57"}, "children": [], "label": "list_item", "prov": [{"page_no": 54, "bbox": {"l": 135.5100555419922, "t": 633.5086669921875, "r": 229.18223571777344, "b": 623.1392822265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "GLYPH TRANSACTIONS", "text": "GLYPH TRANSACTIONS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/572", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 54, "bbox": {"l": 136.0419464111328, "t": 611.2938232421875, "r": 547.2745971679688, "b": 541.180419921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 471]}], "orig": "RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values.", "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values."}, {"self_ref": "#/texts/573", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 54, "bbox": {"l": 135.87716674804688, "t": 529.3848266601562, "r": 546.8505859375, "b": 458.8881530761719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 469]}], "orig": "In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee's personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet.", "text": "In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee's personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet."}, {"self_ref": "#/texts/574", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 54, "bbox": {"l": 135.72178649902344, "t": 447.2520446777344, "r": 547.270751953125, "b": 364.9400329589844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 571]}], "orig": "Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile.", "text": "Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile."}, {"self_ref": "#/texts/575", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 54, "bbox": {"l": 135.73001098632812, "t": 353.10443115234375, "r": 547.2139892578125, "b": 295.1842041015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 350]}], "orig": "The customer's identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer's login value. This value is compared to the customer's login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table.", "text": "The customer's identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer's login value. This value is compared to the customer's login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table."}, {"self_ref": "#/texts/576", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 54, "bbox": {"l": 135.76414489746094, "t": 283.3126525878906, "r": 547.2429809570312, "b": 261.1648254394531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 120]}], "orig": "Applications that do not use the web interface do not have to be changed because the global variable is NULL by default.", "text": "Applications that do not use the web interface do not have to be changed because the global variable is NULL by default."}, {"self_ref": "#/texts/577", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 54, "bbox": {"l": 64.15193939208984, "t": 37.517578125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "38", "text": "38"}, {"self_ref": "#/texts/578", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 54, "bbox": {"l": 93.28313446044922, "t": 37.28369140625, "r": 334.4214172363281, "b": 28.07989501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/579", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 55, "bbox": {"l": 135.5806884765625, "t": 721.3082275390625, "r": 442.2786865234375, "b": 710.7797241210938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "A diagram of the internet banking architecture is shown in Figure 4-1:", "text": "A diagram of the internet banking architecture is shown in Figure 4-1:"}, {"self_ref": "#/texts/580", "parent": {"cref": "#/groups/58"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.6310577392578, "t": 704.576171875, "r": 547.3546142578125, "b": 670.2985229492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 200]}], "orig": "GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested.", "text": "GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/581", "parent": {"cref": "#/groups/58"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.43284606933594, "t": 663.6553955078125, "r": 546.7332153320312, "b": 629.2459716796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 203]}], "orig": "GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent).", "text": "GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/582", "parent": {"cref": "#/groups/58"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.4942169189453, "t": 622.8255615234375, "r": 546.2234497070312, "b": 576.0048828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 284]}], "orig": "GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent).", "text": "GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/583", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 55, "bbox": {"l": 136.07473754882812, "t": 302.353271484375, "r": 286.37646484375, "b": 293.3678894042969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 4-1 Internet banking example", "text": "Figure 4-1 Internet banking example"}, {"self_ref": "#/texts/584", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 55, "bbox": {"l": 64.41133880615234, "t": 266.62109375, "r": 475.6933898925781, "b": 250.48199462890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "4.2 Description of the users roles and responsibilities", "text": "4.2 Description of the users roles and responsibilities", "level": 1}, {"self_ref": "#/texts/585", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 55, "bbox": {"l": 135.86761474609375, "t": 234.0225830078125, "r": 533.134521484375, "b": 211.77857971191406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 99]}], "orig": "During the requirements gathering phase, the following groups of users are identified and codified:", "text": "During the requirements gathering phase, the following groups of users are identified and codified:"}, {"self_ref": "#/texts/586", "parent": {"cref": "#/groups/59"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.75192260742188, "t": 204.55694580078125, "r": 395.1046142578125, "b": 194.41461181640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "GLYPH SECURITY: Security officer and security administrators", "text": "GLYPH SECURITY: Security officer and security administrators", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/587", "parent": {"cref": "#/groups/59"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.67442321777344, "t": 192.36444091796875, "r": 266.7660217285156, "b": 182.11224365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "GLYPH DBE: Database engineers", "text": "GLYPH DBE: Database engineers", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/588", "parent": {"cref": "#/groups/59"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.70191955566406, "t": 180.76068115234375, "r": 319.2432861328125, "b": 170.73941040039062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "GLYPH ADMIN: Bank business administrators", "text": "GLYPH ADMIN: Bank business administrators", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/589", "parent": {"cref": "#/groups/59"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.53024291992188, "t": 168.793212890625, "r": 246.766357421875, "b": 158.73960876464844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "GLYPH TELLER: Bank tellers", "text": "GLYPH TELLER: Bank tellers", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/590", "parent": {"cref": "#/groups/59"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.38711547851562, "t": 156.5809326171875, "r": 365.1325378417969, "b": 146.606201171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "GLYPH CUSTOMER: Bank customers using the internet", "text": "GLYPH CUSTOMER: Bank customers using the internet", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/591", "parent": {"cref": "#/groups/59"}, "children": [], "label": "list_item", "prov": [{"page_no": 55, "bbox": {"l": 135.63414001464844, "t": 144.58380126953125, "r": 325.77801513671875, "b": 134.40423583984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "GLYPH PUBLIC: Anyone not already in a group", "text": "GLYPH PUBLIC: Anyone not already in a group", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/592", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 55, "bbox": {"l": 214.27481079101562, "t": 37.27288818359375, "r": 523.5935668945312, "b": 28.0194091796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/593", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 55, "bbox": {"l": 535.5966186523438, "t": 37.78082275390625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "39", "text": "39"}, {"self_ref": "#/texts/594", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 56, "bbox": {"l": 64.19805908203125, "t": 37.79486083984375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "40", "text": "40"}, {"self_ref": "#/texts/595", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 56, "bbox": {"l": 93.33177947998047, "t": 37.26739501953125, "r": 334.4214172363281, "b": 28.06304931640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/596", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 56, "bbox": {"l": 136.27764892578125, "t": 721.2992553710938, "r": 547.2127075195312, "b": 687.2786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 231]}], "orig": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example.", "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example."}, {"self_ref": "#/texts/597", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 56, "bbox": {"l": 136.13352966308594, "t": 383.2444763183594, "r": 317.8505554199219, "b": 373.94036865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Figure 4-2 Rules for row and column access", "text": "Figure 4-2 Rules for row and column access"}, {"self_ref": "#/texts/598", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 57, "bbox": {"l": 135.74815368652344, "t": 721.3952026367188, "r": 545.2960205078125, "b": 699.0175170898438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 123]}], "orig": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table.", "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table."}, {"self_ref": "#/texts/599", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 57, "bbox": {"l": 136.09585571289062, "t": 390.61444091796875, "r": 245.08297729492188, "b": 381.0845947265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 23]}], "orig": "Figure 4-3 Column masks", "text": "Figure 4-3 Column masks"}, {"self_ref": "#/texts/600", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 57, "bbox": {"l": 136.05606079101562, "t": 364.7004699707031, "r": 543.4578247070312, "b": 318.2683410644531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 295]}], "orig": "For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur.", "text": "For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur."}, {"self_ref": "#/texts/601", "parent": {"cref": "#/groups/60"}, "children": [], "label": "list_item", "prov": [{"page_no": 57, "bbox": {"l": 135.7457733154297, "t": 312.15093994140625, "r": 547.2935791015625, "b": 289.4174499511719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group.", "text": "GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/602", "parent": {"cref": "#/groups/60"}, "children": [], "label": "list_item", "prov": [{"page_no": 57, "bbox": {"l": 135.60708618164062, "t": 282.7138671875, "r": 538.9269409179688, "b": 260.16748046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 119]}], "orig": "GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group.", "text": "GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/603", "parent": {"cref": "#/groups/60"}, "children": [], "label": "list_item", "prov": [{"page_no": 57, "bbox": {"l": 135.6043701171875, "t": 254.1444091796875, "r": 492.53729248046875, "b": 231.50372314453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 137]}], "orig": "GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group.", "text": "GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/604", "parent": {"cref": "#/groups/60"}, "children": [], "label": "list_item", "prov": [{"page_no": 57, "bbox": {"l": 135.5557403564453, "t": 224.8624267578125, "r": 534.6511840820312, "b": 202.178955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group.", "text": "GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/605", "parent": {"cref": "#/groups/60"}, "children": [], "label": "list_item", "prov": [{"page_no": 57, "bbox": {"l": 135.36813354492188, "t": 196.05841064453125, "r": 529.1213989257812, "b": 185.65155029296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "orig": "GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group.", "text": "GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/606", "parent": {"cref": "#/groups/60"}, "children": [], "label": "list_item", "prov": [{"page_no": 57, "bbox": {"l": 135.52735900878906, "t": 178.78997802734375, "r": 547.3323364257812, "b": 144.6416473388672, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 200]}], "orig": "GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed.", "text": "GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/607", "parent": {"cref": "#/groups/60"}, "children": [], "label": "list_item", "prov": [{"page_no": 57, "bbox": {"l": 135.407958984375, "t": 138.128662109375, "r": 530.7957763671875, "b": 127.601318359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "text": "GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/608", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 57, "bbox": {"l": 214.2675018310547, "t": 37.2421875, "r": 523.5935668945312, "b": 28.00421142578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/609", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 57, "bbox": {"l": 535.689697265625, "t": 37.77044677734375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "41", "text": "41"}, {"self_ref": "#/texts/610", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 58, "bbox": {"l": 64.2745590209961, "t": 721.9813232421875, "r": 283.6307678222656, "b": 705.79541015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "4.3 Implementation of RCAC", "text": "4.3 Implementation of RCAC", "level": 1}, {"self_ref": "#/texts/611", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 58, "bbox": {"l": 136.4054412841797, "t": 689.2947998046875, "r": 514.2452392578125, "b": 679.1885986328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 85]}], "orig": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example."}, {"self_ref": "#/texts/612", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 58, "bbox": {"l": 136.15525817871094, "t": 487.8588562011719, "r": 327.0066223144531, "b": 478.4729309082031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "Figure 4-4 Data model of the banking scenario", "text": "Figure 4-4 Data model of the banking scenario"}, {"self_ref": "#/texts/613", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 58, "bbox": {"l": 135.9271240234375, "t": 461.9432678222656, "r": 309.19659423828125, "b": 451.85552978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "This section covers the following steps:", "text": "This section covers the following steps:"}, {"self_ref": "#/texts/614", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.67567443847656, "t": 445.2650146484375, "r": 372.9923095703125, "b": 435.15850830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 66]}], "orig": "GLYPH Reviewing the tables that are used in this example", "text": "GLYPH Reviewing the tables that are used in this example", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/615", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.61679077148438, "t": 433.0387268066406, "r": 490.73876953125, "b": 422.851806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 84]}], "orig": "GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "text": "GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/616", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.76889038085938, "t": 421.16241455078125, "r": 376.5744934082031, "b": 410.9656066894531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 69]}], "orig": "GLYPH Creating group profiles for the users and their roles", "text": "GLYPH Creating group profiles for the users and their roles", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/617", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.6211395263672, "t": 409.67742919921875, "r": 384.3678283691406, "b": 398.8453369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "GLYPH Creating the CUSTOMER_LOGIN_ID global variable", "text": "GLYPH Creating the CUSTOMER_LOGIN_ID global variable", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/618", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.83248901367188, "t": 397.2442626953125, "r": 320.7999572753906, "b": 386.8020324707031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "GLYPH Defining and creating row permissions", "text": "GLYPH Defining and creating row permissions", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/619", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.7002716064453, "t": 385.3578186035156, "r": 312.3022155761719, "b": 374.8518371582031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "GLYPH Defining and creating column masks", "text": "GLYPH Defining and creating column masks", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/620", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.64413452148438, "t": 373.26336669921875, "r": 387.6695556640625, "b": 362.9361267089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 69]}], "orig": "GLYPH Restricting the inserting and updating of masked data", "text": "GLYPH Restricting the inserting and updating of masked data", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/621", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.75306701660156, "t": 361.037109375, "r": 334.1216125488281, "b": 351.1123352050781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "GLYPH Activating row and column access control", "text": "GLYPH Activating row and column access control", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/622", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.65428161621094, "t": 349.3992004394531, "r": 271.91436767578125, "b": 338.8648986816406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "GLYPH Reviewing row permissions", "text": "GLYPH Reviewing row permissions", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/623", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.8694305419922, "t": 337.9486999511719, "r": 323.46331787109375, "b": 327.16015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "GLYPH Demonstrating data access with RCAC", "text": "GLYPH Demonstrating data access with RCAC", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/624", "parent": {"cref": "#/groups/61"}, "children": [], "label": "list_item", "prov": [{"page_no": 58, "bbox": {"l": 135.73135375976562, "t": 325.26885986328125, "r": 343.2095031738281, "b": 315.1239929199219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "GLYPH Query implementation with RCAC activated", "text": "GLYPH Query implementation with RCAC activated", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/625", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 58, "bbox": {"l": 64.17279052734375, "t": 295.388916015625, "r": 410.4186096191406, "b": 282.4974060058594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "4.3.1 Reviewing the tables that are used in this example", "text": "4.3.1 Reviewing the tables that are used in this example", "level": 1}, {"self_ref": "#/texts/626", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 58, "bbox": {"l": 135.51849365234375, "t": 269.2921142578125, "r": 541.1093139648438, "b": 235.11878967285156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 214]}], "orig": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers.", "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers."}, {"self_ref": "#/texts/627", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 58, "bbox": {"l": 136.22021484375, "t": 160.41815185546875, "r": 361.25982666015625, "b": 151.315673828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Figure 4-5 Tables that are used in the banking example", "text": "Figure 4-5 Tables that are used in the banking example"}, {"self_ref": "#/texts/628", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 58, "bbox": {"l": 142.3465576171875, "t": 124.18499755859375, "r": 525.7510986328125, "b": 89.73866271972656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 195]}], "orig": "Note: Appendix A, \"Database definitions for the RCAC banking example\" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example.", "text": "Note: Appendix A, \"Database definitions for the RCAC banking example\" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"self_ref": "#/texts/629", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 58, "bbox": {"l": 64.21815490722656, "t": 37.66497802734375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "42", "text": "42"}, {"self_ref": "#/texts/630", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 58, "bbox": {"l": 93.31220245361328, "t": 37.274658203125, "r": 334.4214172363281, "b": 28.0478515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/631", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 59, "bbox": {"l": 135.93377685546875, "t": 721.3391723632812, "r": 525.0703125, "b": 698.9581298828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 106]}], "orig": "To review the attributes of each table that is used in this banking example, complete the following steps:", "text": "To review the attributes of each table that is used in this banking example, complete the following steps:"}, {"self_ref": "#/texts/632", "parent": {"cref": "#/groups/62"}, "children": [], "label": "list_item", "prov": [{"page_no": 59, "bbox": {"l": 136.77842712402344, "t": 694.369873046875, "r": 543.2303466796875, "b": 670.1790161132812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "1. Review the columns of each the tables through System i Navigator. Expand Database \uf0ae named Database \uf0ae Schemas \uf0ae BANK_SCHEMA \uf0ae Tables .", "text": "1. Review the columns of each the tables through System i Navigator. Expand Database \uf0ae named Database \uf0ae Schemas \uf0ae BANK_SCHEMA \uf0ae Tables .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/633", "parent": {"cref": "#/groups/62"}, "children": [], "label": "list_item", "prov": [{"page_no": 59, "bbox": {"l": 136.044677734375, "t": 663.48486328125, "r": 546.8358764648438, "b": 629.2593383789062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 253]}], "orig": "2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented.", "text": "2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/634", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 59, "bbox": {"l": 136.25962829589844, "t": 427.2813415527344, "r": 303.7537536621094, "b": 418.0169982910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Figure 4-6 CUSTOMERS table attributes", "text": "Figure 4-6 CUSTOMERS table attributes"}, {"self_ref": "#/texts/635", "parent": {"cref": "#/groups/63"}, "children": [], "label": "list_item", "prov": [{"page_no": 59, "bbox": {"l": 135.99163818359375, "t": 401.4026794433594, "r": 517.3616333007812, "b": 378.7974853515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "orig": "3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7.", "text": "3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/636", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 59, "bbox": {"l": 64.40914916992188, "t": 179.63116455078125, "r": 293.8601989746094, "b": 169.933837890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Figure 4-7 Column definitions of the CUSTOMERS table", "text": "Figure 4-7 Column definitions of the CUSTOMERS table"}, {"self_ref": "#/texts/637", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 59, "bbox": {"l": 214.2801971435547, "t": 37.2733154296875, "r": 523.5935668945312, "b": 27.97186279296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/638", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 59, "bbox": {"l": 535.720947265625, "t": 37.82537841796875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "43", "text": "43"}, {"self_ref": "#/texts/639", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 60, "bbox": {"l": 64.17613220214844, "t": 37.888427734375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "44", "text": "44"}, {"self_ref": "#/texts/640", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 60, "bbox": {"l": 93.36976623535156, "t": 37.36669921875, "r": 334.4214172363281, "b": 27.99517822265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/641", "parent": {"cref": "#/groups/64"}, "children": [], "label": "list_item", "prov": [{"page_no": 60, "bbox": {"l": 135.88308715820312, "t": 721.5631713867188, "r": 538.2010498046875, "b": 675.2788696289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 263]}], "orig": "4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table.", "text": "4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/642", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 60, "bbox": {"l": 136.06980895996094, "t": 483.4775695800781, "r": 396.0132141113281, "b": 474.015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table"}, {"self_ref": "#/texts/643", "parent": {"cref": "#/groups/65"}, "children": [], "label": "list_item", "prov": [{"page_no": 60, "bbox": {"l": 136.2538299560547, "t": 457.36016845703125, "r": 542.1918334960938, "b": 434.73291015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 154]}], "orig": "5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet.", "text": "5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/644", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 60, "bbox": {"l": 136.27098083496094, "t": 228.7257080078125, "r": 297.00921630859375, "b": 219.380615234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Figure 4-9 ACCOUNTS table attributes", "text": "Figure 4-9 ACCOUNTS table attributes"}, {"self_ref": "#/texts/645", "parent": {"cref": "#/groups/66"}, "children": [], "label": "list_item", "prov": [{"page_no": 61, "bbox": {"l": 135.9091033935547, "t": 721.5545043945312, "r": 509.6353759765625, "b": 698.7022094726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "orig": "6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10.", "text": "6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/646", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 61, "bbox": {"l": 64.17601013183594, "t": 554.9664916992188, "r": 291.64111328125, "b": 545.1570434570312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Figure 4-10 Column definitions of the ACCOUNTS table", "text": "Figure 4-10 Column definitions of the ACCOUNTS table"}, {"self_ref": "#/texts/647", "parent": {"cref": "#/groups/67"}, "children": [], "label": "list_item", "prov": [{"page_no": 61, "bbox": {"l": 136.2264404296875, "t": 528.1681518554688, "r": 538.2010498046875, "b": 482.25897216796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table.", "text": "7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/648", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 61, "bbox": {"l": 64.48716735839844, "t": 304.5341796875, "r": 322.23956298828125, "b": 295.1299133300781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table"}, {"self_ref": "#/texts/649", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 61, "bbox": {"l": 214.28741455078125, "t": 37.26190185546875, "r": 523.5935668945312, "b": 27.9407958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/650", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 61, "bbox": {"l": 535.7454833984375, "t": 37.93182373046875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "45", "text": "45"}, {"self_ref": "#/texts/651", "parent": {"cref": "#/groups/68"}, "children": [], "label": "list_item", "prov": [{"page_no": 62, "bbox": {"l": 136.05352783203125, "t": 721.6047973632812, "r": 547.2595825195312, "b": 698.7333374023438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 157]}], "orig": "8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet.", "text": "8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/652", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 62, "bbox": {"l": 136.08340454101562, "t": 492.669677734375, "r": 321.95263671875, "b": 483.11859130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "Figure 4-12 TRANSACTIONS table attributes", "text": "Figure 4-12 TRANSACTIONS table attributes"}, {"self_ref": "#/texts/653", "parent": {"cref": "#/groups/69"}, "children": [], "label": "list_item", "prov": [{"page_no": 62, "bbox": {"l": 136.10157775878906, "t": 466.7878112792969, "r": 531.8204345703125, "b": 443.9242858886719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 95]}], "orig": "9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13.", "text": "9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/654", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 62, "bbox": {"l": 136.23361206054688, "t": 309.7732849121094, "r": 383.6240234375, "b": 299.8185729980469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "Figure 4-13 Column definitions of the TRANSACTIONS table", "text": "Figure 4-13 Column definitions of the TRANSACTIONS table"}, {"self_ref": "#/texts/655", "parent": {"cref": "#/groups/70"}, "children": [], "label": "list_item", "prov": [{"page_no": 62, "bbox": {"l": 136.8000030517578, "t": 283.541748046875, "r": 547.3941040039062, "b": 237.45896911621094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 273]}], "orig": "10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table.", "text": "10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/656", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 62, "bbox": {"l": 64.34345245361328, "t": 67.66943359375, "r": 342.0125732421875, "b": 57.83700180053711, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table"}, {"self_ref": "#/texts/657", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 62, "bbox": {"l": 64.11357116699219, "t": 37.95208740234375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "46", "text": "46"}, {"self_ref": "#/texts/658", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 62, "bbox": {"l": 93.1781997680664, "t": 37.3914794921875, "r": 334.4214172363281, "b": 27.982421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/659", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 63, "bbox": {"l": 136.23085021972656, "t": 721.2885131835938, "r": 527.005615234375, "b": 699.118408203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 167]}], "orig": "Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario.", "text": "Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario."}, {"self_ref": "#/texts/660", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 63, "bbox": {"l": 64.15889739990234, "t": 679.7421875, "r": 532.1195068359375, "b": 650.3182983398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "level": 1}, {"self_ref": "#/texts/661", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 63, "bbox": {"l": 135.7303466796875, "t": 637.4636840820312, "r": 531.9879150390625, "b": 603.2656860351562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 250]}], "orig": "The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, \"Roles\" on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "text": "The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, \"Roles\" on page 8. In this example, the DBEs are users MCAIN and HBEDOYA."}, {"self_ref": "#/texts/662", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 63, "bbox": {"l": 136.1609649658203, "t": 591.4937744140625, "r": 266.8606872558594, "b": 580.8624877929688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Complete the following steps:", "text": "Complete the following steps:", "level": 1}, {"self_ref": "#/texts/663", "parent": {"cref": "#/groups/71"}, "children": [], "label": "list_item", "prov": [{"page_no": 63, "bbox": {"l": 136.48870849609375, "t": 574.73388671875, "r": 544.5436401367188, "b": 552.2794799804688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "orig": "1. Right-click the database connection and select Application Administration , as shown in Figure 4-15.", "text": "1. Right-click the database connection and select Application Administration , as shown in Figure 4-15.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/664", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 63, "bbox": {"l": 136.063720703125, "t": 298.3213806152344, "r": 292.96966552734375, "b": 289.1767272949219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Figure 4-15 Application administration", "text": "Figure 4-15 Application administration"}, {"self_ref": "#/texts/665", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 63, "bbox": {"l": 214.25257873535156, "t": 37.2509765625, "r": 523.5935668945312, "b": 27.9610595703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/666", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 63, "bbox": {"l": 535.6387939453125, "t": 37.79241943359375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "47", "text": "47"}, {"self_ref": "#/texts/667", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 64, "bbox": {"l": 64.1659164428711, "t": 37.85589599609375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "48", "text": "48"}, {"self_ref": "#/texts/668", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 64, "bbox": {"l": 93.31367492675781, "t": 37.39764404296875, "r": 334.4214172363281, "b": 27.9822998046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/669", "parent": {"cref": "#/groups/72"}, "children": [], "label": "list_item", "prov": [{"page_no": 64, "bbox": {"l": 135.7973175048828, "t": 723.349853515625, "r": 530.2109985351562, "b": 698.8440551757812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 165]}], "orig": "2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i \uf0ae Database and select the function usage ID of Database Security Administrator .", "text": "2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i \uf0ae Database and select the function usage ID of Database Security Administrator .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/670", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 64, "bbox": {"l": 135.85130310058594, "t": 400.15435791015625, "r": 329.4411315917969, "b": 390.5697326660156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Figure 4-16 Application administration for IBM i", "text": "Figure 4-16 Application administration for IBM i"}, {"self_ref": "#/texts/671", "parent": {"cref": "#/groups/73"}, "children": [], "label": "list_item", "prov": [{"page_no": 64, "bbox": {"l": 135.79788208007812, "t": 374.33563232421875, "r": 544.5723266601562, "b": 351.3948669433594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 105]}], "orig": "3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17.", "text": "3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/672", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 64, "bbox": {"l": 136.05140686035156, "t": 179.530517578125, "r": 459.4308776855469, "b": 169.84881591796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID"}, {"self_ref": "#/texts/673", "parent": {"cref": "#/groups/74"}, "children": [], "label": "list_item", "prov": [{"page_no": 65, "bbox": {"l": 135.78591918945312, "t": 721.5147094726562, "r": 547.1973876953125, "b": 687.2783203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 187]}], "orig": "4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK .", "text": "4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/674", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 65, "bbox": {"l": 136.0041961669922, "t": 387.30133056640625, "r": 297.5841369628906, "b": 378.0472717285156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 4-18 Customize Access window", "text": "Figure 4-18 Customize Access window"}, {"self_ref": "#/texts/675", "parent": {"cref": "#/groups/75"}, "children": [], "label": "list_item", "prov": [{"page_no": 65, "bbox": {"l": 136.253173828125, "t": 361.51788330078125, "r": 537.650146484375, "b": 326.7797546386719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 180]}], "orig": "5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19.", "text": "5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/676", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 65, "bbox": {"l": 136.1788787841797, "t": 205.81591796875, "r": 443.8726501464844, "b": 196.3251953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "Figure 4-19 Function usage ID Database Security Administrator customized", "text": "Figure 4-19 Function usage ID Database Security Administrator customized"}, {"self_ref": "#/texts/677", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 65, "bbox": {"l": 214.2803955078125, "t": 37.261474609375, "r": 523.5935668945312, "b": 27.94500732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/678", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 65, "bbox": {"l": 535.666015625, "t": 37.95111083984375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "49", "text": "49"}, {"self_ref": "#/texts/679", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 66, "bbox": {"l": 64.19255828857422, "t": 37.62579345703125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "50", "text": "50"}, {"self_ref": "#/texts/680", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 66, "bbox": {"l": 93.27255249023438, "t": 37.28240966796875, "r": 334.4214172363281, "b": 28.05938720703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/681", "parent": {"cref": "#/groups/76"}, "children": [], "label": "list_item", "prov": [{"page_no": 66, "bbox": {"l": 135.97772216796875, "t": 721.4182739257812, "r": 545.5703735351562, "b": 698.7117309570312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 117]}], "orig": "6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20.", "text": "6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/682", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 66, "bbox": {"l": 136.3402557373047, "t": 517.5281372070312, "r": 438.3047790527344, "b": 507.7417297363281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC"}, {"self_ref": "#/texts/683", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 66, "bbox": {"l": 64.06755065917969, "t": 488.3762512207031, "r": 418.56524658203125, "b": 474.9371337890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "4.3.3 Creating group profiles for the users and their roles", "text": "4.3.3 Creating group profiles for the users and their roles", "level": 1}, {"self_ref": "#/texts/684", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 66, "bbox": {"l": 135.84303283691406, "t": 462.0940856933594, "r": 547.2724609375, "b": 415.6891174316406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 307]}], "orig": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, \"Description of the users roles and responsibilities\" on page 39.", "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, \"Description of the users roles and responsibilities\" on page 39."}, {"self_ref": "#/texts/685", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 66, "bbox": {"l": 136.06056213378906, "t": 404.0556945800781, "r": 266.8606872558594, "b": 393.63714599609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Complete the following steps:", "text": "Complete the following steps:", "level": 1}, {"self_ref": "#/texts/686", "parent": {"cref": "#/groups/77"}, "children": [], "label": "list_item", "prov": [{"page_no": 66, "bbox": {"l": 136.78126525878906, "t": 387.283447265625, "r": 535.997802734375, "b": 364.7965393066406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 120]}], "orig": "1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21.", "text": "1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/687", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 66, "bbox": {"l": 136.255126953125, "t": 201.13775634765625, "r": 281.4906005859375, "b": 191.8638916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 4-21 Creating group profiles", "text": "Figure 4-21 Creating group profiles"}, {"self_ref": "#/texts/688", "parent": {"cref": "#/groups/78"}, "children": [], "label": "list_item", "prov": [{"page_no": 67, "bbox": {"l": 136.031005859375, "t": 721.4904174804688, "r": 547.2084350585938, "b": 687.0444946289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 240]}], "orig": "2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add .", "text": "2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/689", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 67, "bbox": {"l": 150.73487854003906, "t": 680.9339599609375, "r": 482.46234130859375, "b": 670.2432250976562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "orig": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile."}, {"self_ref": "#/texts/690", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 67, "bbox": {"l": 136.369873046875, "t": 428.5393981933594, "r": 352.9217834472656, "b": 419.191162109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Figure 4-22 Creating group profiles and adding users", "text": "Figure 4-22 Creating group profiles and adding users"}, {"self_ref": "#/texts/691", "parent": {"cref": "#/groups/79"}, "children": [], "label": "list_item", "prov": [{"page_no": 67, "bbox": {"l": 136.0438232421875, "t": 402.5482177734375, "r": 537.6182861328125, "b": 380.2133483886719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 151]}], "orig": "3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups \uf0ae Groups , as shown in Figure 4-23.", "text": "3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups \uf0ae Groups , as shown in Figure 4-23.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/692", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 67, "bbox": {"l": 136.12078857421875, "t": 238.92657470703125, "r": 303.932373046875, "b": 229.78912353515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Figure 4-23 Newly created group profiles", "text": "Figure 4-23 Newly created group profiles"}, {"self_ref": "#/texts/693", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 67, "bbox": {"l": 214.30003356933594, "t": 37.2642822265625, "r": 523.5935668945312, "b": 27.95086669921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/694", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 67, "bbox": {"l": 535.7405395507812, "t": 37.67535400390625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "51", "text": "51"}, {"self_ref": "#/texts/695", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 68, "bbox": {"l": 64.14804077148438, "t": 721.7244873046875, "r": 420.2837219238281, "b": 708.4265747070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "level": 1}, {"self_ref": "#/texts/696", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 68, "bbox": {"l": 135.99069213867188, "t": 695.1038208007812, "r": 545.7725219726562, "b": 660.9912109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 244]}], "orig": "In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, \"Built-in global variables\" on page 19.", "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, \"Built-in global variables\" on page 19."}, {"self_ref": "#/texts/697", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 68, "bbox": {"l": 136.14224243164062, "t": 649.479248046875, "r": 266.8606872558594, "b": 639.0682373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Complete the following steps:", "text": "Complete the following steps:", "level": 1}, {"self_ref": "#/texts/698", "parent": {"cref": "#/groups/80"}, "children": [], "label": "list_item", "prov": [{"page_no": 68, "bbox": {"l": 136.56494140625, "t": 632.7373657226562, "r": 535.943603515625, "b": 610.179931640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 145]}], "orig": "1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New \uf0ae Global Variable , as shown in Figure 4-24.", "text": "1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New \uf0ae Global Variable , as shown in Figure 4-24.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/699", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 68, "bbox": {"l": 136.03294372558594, "t": 384.3118591308594, "r": 292.05377197265625, "b": 375.2170715332031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Figure 4-24 Creating a global variable", "text": "Figure 4-24 Creating a global variable"}, {"self_ref": "#/texts/700", "parent": {"cref": "#/groups/81"}, "children": [], "label": "list_item", "prov": [{"page_no": 68, "bbox": {"l": 135.92572021484375, "t": 358.4706115722656, "r": 541.1919555664062, "b": 312.5187072753906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 314]}], "orig": "2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK .", "text": "2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/701", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 68, "bbox": {"l": 64.31603240966797, "t": 81.11328125, "r": 347.040283203125, "b": 71.04986572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID"}, {"self_ref": "#/texts/702", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 68, "bbox": {"l": 64.1907958984375, "t": 37.67730712890625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "52", "text": "52"}, {"self_ref": "#/texts/703", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 68, "bbox": {"l": 93.31280517578125, "t": 37.311279296875, "r": 334.4214172363281, "b": 28.101806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/704", "parent": {"cref": "#/groups/82"}, "children": [], "label": "list_item", "prov": [{"page_no": 69, "bbox": {"l": 136.12977600097656, "t": 721.2545166015625, "r": 547.2542724609375, "b": 687.2127685546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 216]}], "orig": "3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26.", "text": "3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/705", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 69, "bbox": {"l": 135.95867919921875, "t": 550.0120239257812, "r": 457.0142822265625, "b": 540.6283569335938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable"}, {"self_ref": "#/texts/706", "parent": {"cref": "#/groups/83"}, "children": [], "label": "list_item", "prov": [{"page_no": 69, "bbox": {"l": 135.82858276367188, "t": 524.1180419921875, "r": 534.23876953125, "b": 501.53948974609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 147]}], "orig": "4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable.", "text": "4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/707", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 69, "bbox": {"l": 136.15591430664062, "t": 213.4273681640625, "r": 540.3552856445312, "b": 203.84979248046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "orig": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable"}, {"self_ref": "#/texts/708", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 69, "bbox": {"l": 214.31678771972656, "t": 37.26458740234375, "r": 523.5935668945312, "b": 27.9561767578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/709", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 69, "bbox": {"l": 535.7046508789062, "t": 37.65869140625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "53", "text": "53"}, {"self_ref": "#/texts/710", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 70, "bbox": {"l": 64.21206665039062, "t": 721.7990112304688, "r": 339.9589538574219, "b": 708.4077758789062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "4.3.5 Defining and creating row permissions", "text": "4.3.5 Defining and creating row permissions", "level": 1}, {"self_ref": "#/texts/711", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 70, "bbox": {"l": 135.9742889404297, "t": 695.2660522460938, "r": 527.3794555664062, "b": 685.0367431640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 88]}], "orig": "You now ready to define the row permissions of the tables. Complete the following steps:", "text": "You now ready to define the row permissions of the tables. Complete the following steps:"}, {"self_ref": "#/texts/712", "parent": {"cref": "#/groups/84"}, "children": [], "label": "list_item", "prov": [{"page_no": 70, "bbox": {"l": 136.758056640625, "t": 680.3302612304688, "r": 530.7598266601562, "b": 643.67529296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 169]}], "orig": "1. From the navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Row Permissions , and select New \uf0ae Row Permission , as shown in Figure 4-28.", "text": "1. From the navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Row Permissions , and select New \uf0ae Row Permission , as shown in Figure 4-28.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/713", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 70, "bbox": {"l": 136.1620330810547, "t": 369.123046875, "r": 314.04541015625, "b": 359.82366943359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "Figure 4-28 Selecting new row permissions", "text": "Figure 4-28 Selecting new row permissions"}, {"self_ref": "#/texts/714", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 70, "bbox": {"l": 64.29161071777344, "t": 37.70703125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "54", "text": "54"}, {"self_ref": "#/texts/715", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 70, "bbox": {"l": 93.33383178710938, "t": 37.33294677734375, "r": 334.4214172363281, "b": 28.05706787109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/716", "parent": {"cref": "#/groups/85"}, "children": [], "label": "list_item", "prov": [{"page_no": 71, "bbox": {"l": 136.03018188476562, "t": 721.490478515625, "r": 544.505126953125, "b": 687.145751953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 213]}], "orig": "2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy:", "text": "2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/717", "parent": {"cref": "#/groups/85"}, "children": [], "label": "list_item", "prov": [{"page_no": 71, "bbox": {"l": 151.3019256591797, "t": 680.717529296875, "r": 542.1815185546875, "b": 658.2987060546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 89]}], "orig": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows.", "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/718", "parent": {"cref": "#/groups/85"}, "children": [], "label": "list_item", "prov": [{"page_no": 71, "bbox": {"l": 151.4884796142578, "t": 651.5912475585938, "r": 537.7831420898438, "b": 581.2600708007812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 438]}], "orig": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/719", "parent": {"cref": "#/groups/85"}, "children": [], "label": "list_item", "prov": [{"page_no": 71, "bbox": {"l": 151.66030883789062, "t": 574.5264892578125, "r": 381.3265380859375, "b": 564.2066650390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "-Any other user profile cannot see any rows at all.", "text": "-Any other user profile cannot see any rows at all.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/720", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 71, "bbox": {"l": 151.00958251953125, "t": 557.4721069335938, "r": 314.7688293457031, "b": 546.886474609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Select the Enabled option. Click OK .", "text": "Select the Enabled option. Click OK ."}, {"self_ref": "#/texts/721", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 71, "bbox": {"l": 135.95968627929688, "t": 262.62078857421875, "r": 384.6536865234375, "b": 253.26513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Figure 4-29 New row permissions on the CUSTOMERS table", "text": "Figure 4-29 New row permissions on the CUSTOMERS table"}, {"self_ref": "#/texts/722", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 71, "bbox": {"l": 214.24986267089844, "t": 37.28692626953125, "r": 523.5935668945312, "b": 27.956787109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/723", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 71, "bbox": {"l": 535.6702270507812, "t": 37.6822509765625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "55", "text": "55"}, {"self_ref": "#/texts/724", "parent": {"cref": "#/groups/86"}, "children": [], "label": "list_item", "prov": [{"page_no": 72, "bbox": {"l": 136.20513916015625, "t": 721.404541015625, "r": 543.8363647460938, "b": 674.8102416992188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 263]}], "orig": "3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy:", "text": "3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/725", "parent": {"cref": "#/groups/86"}, "children": [], "label": "list_item", "prov": [{"page_no": 72, "bbox": {"l": 151.44004821777344, "t": 668.675537109375, "r": 539.4539794921875, "b": 646.2992553710938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 88]}], "orig": "-User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows.", "text": "-User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/726", "parent": {"cref": "#/groups/86"}, "children": [], "label": "list_item", "prov": [{"page_no": 72, "bbox": {"l": 151.2493438720703, "t": 639.6063232421875, "r": 537.7576904296875, "b": 569.2606201171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 438]}], "orig": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/727", "parent": {"cref": "#/groups/86"}, "children": [], "label": "list_item", "prov": [{"page_no": 72, "bbox": {"l": 151.43359375, "t": 562.5576782226562, "r": 381.32696533203125, "b": 552.2164916992188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "-Any other user profile cannot see any rows at all.", "text": "-Any other user profile cannot see any rows at all.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/728", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 72, "bbox": {"l": 150.8797149658203, "t": 545.5108032226562, "r": 314.7692565917969, "b": 535.041259765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Select the Enabled option. Click OK .", "text": "Select the Enabled option. Click OK ."}, {"self_ref": "#/texts/729", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 72, "bbox": {"l": 64.3364486694336, "t": 207.1900634765625, "r": 305.99822998046875, "b": 197.93699645996094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "Figure 4-30 New row permissions on the ACCOUNTS table", "text": "Figure 4-30 New row permissions on the ACCOUNTS table"}, {"self_ref": "#/texts/730", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 72, "bbox": {"l": 64.20973205566406, "t": 37.7222900390625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "56", "text": "56"}, {"self_ref": "#/texts/731", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 72, "bbox": {"l": 93.28527069091797, "t": 37.35791015625, "r": 334.4214172363281, "b": 28.055908203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/732", "parent": {"cref": "#/groups/87"}, "children": [], "label": "list_item", "prov": [{"page_no": 73, "bbox": {"l": 135.74258422851562, "t": 721.5518798828125, "r": 529.9049072265625, "b": 675.0388793945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 270]}], "orig": "4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy:", "text": "4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/733", "parent": {"cref": "#/groups/87"}, "children": [], "label": "list_item", "prov": [{"page_no": 73, "bbox": {"l": 151.45989990234375, "t": 668.7428588867188, "r": 547.229248046875, "b": 646.2988891601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 92]}], "orig": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows.", "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/734", "parent": {"cref": "#/groups/87"}, "children": [], "label": "list_item", "prov": [{"page_no": 73, "bbox": {"l": 151.29940795898438, "t": 639.63330078125, "r": 537.7831420898438, "b": 569.26025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 438]}], "orig": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/735", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 73, "bbox": {"l": 170.69351196289062, "t": 551.6622314453125, "r": 533.3919677734375, "b": 505.2535095214844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored.", "text": "Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored."}, {"self_ref": "#/texts/736", "parent": {"cref": "#/groups/88"}, "children": [], "label": "list_item", "prov": [{"page_no": 73, "bbox": {"l": 151.38229370117188, "t": 485.89093017578125, "r": 381.3265380859375, "b": 475.55084228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "-Any other user profile cannot see any rows at all.", "text": "-Any other user profile cannot see any rows at all.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/737", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 73, "bbox": {"l": 150.89027404785156, "t": 469.5093688964844, "r": 314.7688293457031, "b": 458.91302490234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Select the Enabled option. Click OK .", "text": "Select the Enabled option. Click OK ."}, {"self_ref": "#/texts/738", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 73, "bbox": {"l": 64.22490692138672, "t": 78.46807861328125, "r": 325.5702819824219, "b": 69.0399169921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "Figure 4-31 New row permissions on the TRANSACTIONS table", "text": "Figure 4-31 New row permissions on the TRANSACTIONS table"}, {"self_ref": "#/texts/739", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 73, "bbox": {"l": 214.22891235351562, "t": 37.26959228515625, "r": 523.5935668945312, "b": 28.0042724609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/740", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 73, "bbox": {"l": 535.5846557617188, "t": 37.75579833984375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "57", "text": "57"}, {"self_ref": "#/texts/741", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 74, "bbox": {"l": 64.232666015625, "t": 37.613525390625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "58", "text": "58"}, {"self_ref": "#/texts/742", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 74, "bbox": {"l": 93.35807037353516, "t": 37.2994384765625, "r": 334.4214172363281, "b": 28.0589599609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/743", "parent": {"cref": "#/groups/89"}, "children": [], "label": "list_item", "prov": [{"page_no": 74, "bbox": {"l": 136.36386108398438, "t": 721.450927734375, "r": 521.1912231445312, "b": 687.2786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 175]}], "orig": "5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled.", "text": "5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/744", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 74, "bbox": {"l": 64.27239227294922, "t": 517.3701171875, "r": 292.91876220703125, "b": 508.0120849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "Figure 4-32 List of row permissions on BANK_SCHEMA", "text": "Figure 4-32 List of row permissions on BANK_SCHEMA"}, {"self_ref": "#/texts/745", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 74, "bbox": {"l": 64.21476745605469, "t": 488.1273193359375, "r": 327.4058837890625, "b": 474.7839660644531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "4.3.6 Defining and creating column masks", "text": "4.3.6 Defining and creating column masks", "level": 1}, {"self_ref": "#/texts/746", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 74, "bbox": {"l": 136.03562927246094, "t": 462.0003662109375, "r": 479.4200134277344, "b": 451.7078857421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 76]}], "orig": "This section defines the masks on the columns. Complete the following steps:", "text": "This section defines the masks on the columns. Complete the following steps:"}, {"self_ref": "#/texts/747", "parent": {"cref": "#/groups/90"}, "children": [], "label": "list_item", "prov": [{"page_no": 74, "bbox": {"l": 136.79998779296875, "t": 447.3500061035156, "r": 523.0706787109375, "b": 410.91876220703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 168]}], "orig": "1. From the main navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Column Masks , and select New \uf0ae Column Mask , as shown in Figure 4-33.", "text": "1. From the main navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Column Masks , and select New \uf0ae Column Mask , as shown in Figure 4-33.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/748", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 74, "bbox": {"l": 136.1403350830078, "t": 220.262939453125, "r": 287.95941162109375, "b": 210.93280029296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "Figure 4-33 Creating a column mask", "text": "Figure 4-33 Creating a column mask"}, {"self_ref": "#/texts/749", "parent": {"cref": "#/groups/91"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 136.03579711914062, "t": 721.2332153320312, "r": 524.1021728515625, "b": 699.2781372070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information:", "text": "2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/750", "parent": {"cref": "#/groups/91"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.32827758789062, "t": 692.6640625, "r": 465.4696044921875, "b": 682.29833984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "-Select the CUSTOMERS table on which to create the column mask.", "text": "-Select the CUSTOMERS table on which to create the column mask.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/751", "parent": {"cref": "#/groups/91"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.2732391357422, "t": 680.8697509765625, "r": 475.1905212402344, "b": 670.2985229492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 66]}], "orig": "-Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "text": "-Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/752", "parent": {"cref": "#/groups/91"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.39305114746094, "t": 668.3560180664062, "r": 531.3062133789062, "b": 634.299072265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 207]}], "orig": "-Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****.", "text": "-Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/753", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 75, "bbox": {"l": 150.79855346679688, "t": 627.508056640625, "r": 314.766845703125, "b": 616.8975219726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Select the Enabled option. Click OK .", "text": "Select the Enabled option. Click OK ."}, {"self_ref": "#/texts/754", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 75, "bbox": {"l": 135.8140106201172, "t": 187.234619140625, "r": 395.16131591796875, "b": 177.95709228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table"}, {"self_ref": "#/texts/755", "parent": {"cref": "#/groups/92"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 136.26536560058594, "t": 161.1632080078125, "r": 522.032958984375, "b": 150.96624755859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 84]}], "orig": "3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "text": "3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/756", "parent": {"cref": "#/groups/92"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.44378662109375, "t": 144.8258056640625, "r": 381.7741394042969, "b": 134.0785675048828, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "-MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "text": "-MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/757", "parent": {"cref": "#/groups/92"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.36248779296875, "t": 132.481201171875, "r": 335.7012023925781, "b": 122.0787582397461, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "-MASK_LOGIN_ID_ON_CUSTOMERS", "text": "-MASK_LOGIN_ID_ON_CUSTOMERS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/758", "parent": {"cref": "#/groups/92"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.4147491455078, "t": 120.55975341796875, "r": 446.63970947265625, "b": 110.07894897460938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "-MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "text": "-MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/759", "parent": {"cref": "#/groups/92"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.27947998046875, "t": 108.9068603515625, "r": 379.591064453125, "b": 98.07913970947266, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "orig": "-MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "text": "-MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/760", "parent": {"cref": "#/groups/92"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.41717529296875, "t": 96.97442626953125, "r": 397.17034912109375, "b": 86.07933044433594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "-MASK_SECURITY_QUESTION_ON_CUSTOMERS", "text": "-MASK_SECURITY_QUESTION_ON_CUSTOMERS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/761", "parent": {"cref": "#/groups/92"}, "children": [], "label": "list_item", "prov": [{"page_no": 75, "bbox": {"l": 151.33258056640625, "t": 84.5498046875, "r": 322.7781066894531, "b": 74.07952117919922, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "-MASK_TAX_ID_ON_CUSTOMERS", "text": "-MASK_TAX_ID_ON_CUSTOMERS", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/762", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 75, "bbox": {"l": 214.23280334472656, "t": 37.26531982421875, "r": 523.5935668945312, "b": 28.0201416015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/763", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 75, "bbox": {"l": 535.6565551757812, "t": 37.8089599609375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "59", "text": "59"}, {"self_ref": "#/texts/764", "parent": {"cref": "#/groups/93"}, "children": [], "label": "list_item", "prov": [{"page_no": 76, "bbox": {"l": 135.86886596679688, "t": 721.5939331054688, "r": 525.707275390625, "b": 699.1376342773438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 166]}], "orig": "4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled.", "text": "4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/765", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 76, "bbox": {"l": 64.10326385498047, "t": 608.58935546875, "r": 285.1827087402344, "b": 599.2903442382812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Figure 4-35 List of column masks on BANK_SCHEMA", "text": "Figure 4-35 List of column masks on BANK_SCHEMA"}, {"self_ref": "#/texts/766", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 76, "bbox": {"l": 64.0513916015625, "t": 579.4058837890625, "r": 433.7906494140625, "b": 566.2802124023438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "4.3.7 Restricting the inserting and updating of masked data", "text": "4.3.7 Restricting the inserting and updating of masked data", "level": 1}, {"self_ref": "#/texts/767", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 76, "bbox": {"l": 135.85455322265625, "t": 553.2467651367188, "r": 544.9268798828125, "b": 507.0654602050781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 270]}], "orig": "This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, \"Avoiding propagation of masked data\" on page 108.", "text": "This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, \"Avoiding propagation of masked data\" on page 108."}, {"self_ref": "#/texts/768", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 76, "bbox": {"l": 136.1099090576172, "t": 495.5037841796875, "r": 266.8606872558594, "b": 484.9318542480469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Complete the following steps:", "text": "Complete the following steps:", "level": 1}, {"self_ref": "#/texts/769", "parent": {"cref": "#/groups/94"}, "children": [], "label": "list_item", "prov": [{"page_no": 76, "bbox": {"l": 136.3522491455078, "t": 478.90118408203125, "r": 547.1956787109375, "b": 444.3074951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 206]}], "orig": "1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36", "text": "1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/770", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 76, "bbox": {"l": 135.78135681152344, "t": 320.5633544921875, "r": 334.3720397949219, "b": 311.1509704589844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "Figure 4-36 Definition of the CUSTOMERS table", "text": "Figure 4-36 Definition of the CUSTOMERS table"}, {"self_ref": "#/texts/771", "parent": {"cref": "#/groups/95"}, "children": [], "label": "list_item", "prov": [{"page_no": 76, "bbox": {"l": 135.75648498535156, "t": 294.6141662597656, "r": 547.7396240234375, "b": 272.3358154296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 113]}], "orig": "2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37.", "text": "2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/772", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 76, "bbox": {"l": 64.25939178466797, "t": 189.07855224609375, "r": 221.74893188476562, "b": 179.8170928955078, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Figure 4-37 Adding a check constraint", "text": "Figure 4-37 Adding a check constraint"}, {"self_ref": "#/texts/773", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 76, "bbox": {"l": 64.13931274414062, "t": 37.62353515625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "60", "text": "60"}, {"self_ref": "#/texts/774", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 76, "bbox": {"l": 93.2583236694336, "t": 37.2972412109375, "r": 334.4214172363281, "b": 28.05963134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/775", "parent": {"cref": "#/groups/96"}, "children": [], "label": "list_item", "prov": [{"page_no": 77, "bbox": {"l": 136.19448852539062, "t": 721.3970336914062, "r": 515.8154907226562, "b": 699.0084228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps:", "text": "3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/776", "parent": {"cref": "#/groups/96"}, "children": [], "label": "list_item", "prov": [{"page_no": 77, "bbox": {"l": 150.47923278808594, "t": 692.5963134765625, "r": 344.06817626953125, "b": 682.29833984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "a. Select the CUSTOMER_EMAIL column.", "text": "a. Select the CUSTOMER_EMAIL column.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/777", "parent": {"cref": "#/groups/96"}, "children": [], "label": "list_item", "prov": [{"page_no": 77, "bbox": {"l": 150.597412109375, "t": 675.5870361328125, "r": 541.599853515625, "b": 653.2589721679688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 137]}], "orig": "b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value.", "text": "b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/778", "parent": {"cref": "#/groups/96"}, "children": [], "label": "list_item", "prov": [{"page_no": 77, "bbox": {"l": 150.6071319580078, "t": 646.5643920898438, "r": 511.9270324707031, "b": 636.1400146484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "c. Select the On update violation, preserve column value option and click OK .", "text": "c. Select the On update violation, preserve column value option and click OK .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/779", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 77, "bbox": {"l": 64.2974853515625, "t": 138.75482177734375, "r": 362.4355773925781, "b": 129.24169921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "orig": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table"}, {"self_ref": "#/texts/780", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 77, "bbox": {"l": 214.33963012695312, "t": 37.3177490234375, "r": 523.5935668945312, "b": 27.99407958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/781", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 77, "bbox": {"l": 535.6194458007812, "t": 37.740478515625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "61", "text": "61"}, {"self_ref": "#/texts/782", "parent": {"cref": "#/groups/97"}, "children": [], "label": "list_item", "prov": [{"page_no": 78, "bbox": {"l": 135.84481811523438, "t": 721.4361572265625, "r": 535.5555419921875, "b": 699.0802612304688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 159]}], "orig": "4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "text": "4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/783", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 78, "bbox": {"l": 64.23225402832031, "t": 405.4078674316406, "r": 294.2088317871094, "b": 396.0008544921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Figure 4-39 Check constraint on the CUSTOMERS table", "text": "Figure 4-39 Check constraint on the CUSTOMERS table"}, {"self_ref": "#/texts/784", "parent": {"cref": "#/groups/98"}, "children": [], "label": "list_item", "prov": [{"page_no": 78, "bbox": {"l": 136.3284149169922, "t": 379.3380432128906, "r": 547.2733154296875, "b": 344.85784912109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 201]}], "orig": "5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40.", "text": "5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/785", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 78, "bbox": {"l": 64.24510955810547, "t": 189.46038818359375, "r": 323.0049743652344, "b": 180.01788330078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "Figure 4-40 List of check constraints on the CUSTOMERS table", "text": "Figure 4-40 List of check constraints on the CUSTOMERS table"}, {"self_ref": "#/texts/786", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 78, "bbox": {"l": 64.20623016357422, "t": 37.66107177734375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "62", "text": "62"}, {"self_ref": "#/texts/787", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 78, "bbox": {"l": 93.26509857177734, "t": 37.33514404296875, "r": 334.4214172363281, "b": 28.060546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/788", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 79, "bbox": {"l": 64.11198425292969, "t": 721.6455078125, "r": 360.40594482421875, "b": 708.3018798828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "4.3.8 Activating row and column access control", "text": "4.3.8 Activating row and column access control", "level": 1}, {"self_ref": "#/texts/789", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 79, "bbox": {"l": 136.0153350830078, "t": 695.3901977539062, "r": 516.2232055664062, "b": 673.103271484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 101]}], "orig": "You are now ready to activate RCAC on all three tables in this example. Complete the following steps:", "text": "You are now ready to activate RCAC on all three tables in this example. Complete the following steps:"}, {"self_ref": "#/texts/790", "parent": {"cref": "#/groups/99"}, "children": [], "label": "list_item", "prov": [{"page_no": 79, "bbox": {"l": 136.8000030517578, "t": 666.022705078125, "r": 542.7099609375, "b": 631.479736328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 239]}], "orig": "1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK .", "text": "1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/791", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 79, "bbox": {"l": 136.109375, "t": 456.8214111328125, "r": 361.76947021484375, "b": 447.28289794921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table"}, {"self_ref": "#/texts/792", "parent": {"cref": "#/groups/100"}, "children": [], "label": "list_item", "prov": [{"page_no": 79, "bbox": {"l": 135.86691284179688, "t": 430.72796630859375, "r": 537.477783203125, "b": 396.5186462402344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 198]}], "orig": "2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK .", "text": "2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/793", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 79, "bbox": {"l": 136.17703247070312, "t": 216.01983642578125, "r": 318.5569763183594, "b": 206.22412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Figure 4-42 Enabling RCAC on ACCOUNTS", "text": "Figure 4-42 Enabling RCAC on ACCOUNTS"}, {"self_ref": "#/texts/794", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 79, "bbox": {"l": 214.27894592285156, "t": 37.2763671875, "r": 523.5935668945312, "b": 27.94580078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/795", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 79, "bbox": {"l": 535.566162109375, "t": 37.69140625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "63", "text": "63"}, {"self_ref": "#/texts/796", "parent": {"cref": "#/groups/101"}, "children": [], "label": "list_item", "prov": [{"page_no": 80, "bbox": {"l": 136.11422729492188, "t": 721.4954223632812, "r": 544.6798706054688, "b": 687.2786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 183]}], "orig": "3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK .", "text": "3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/797", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 80, "bbox": {"l": 136.18548583984375, "t": 512.703125, "r": 338.2870788574219, "b": 502.91986083984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS"}, {"self_ref": "#/texts/798", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 80, "bbox": {"l": 64.14816284179688, "t": 484.41094970703125, "r": 271.11932373046875, "b": 471.0173034667969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "4.3.9 Reviewing row permissions", "text": "4.3.9 Reviewing row permissions", "level": 1}, {"self_ref": "#/texts/799", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 80, "bbox": {"l": 135.9355010986328, "t": 458.0364990234375, "r": 535.83544921875, "b": 435.63848876953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "This section displays all the row permissions after enabling RCAC. Complete the following steps:", "text": "This section displays all the row permissions after enabling RCAC. Complete the following steps:"}, {"self_ref": "#/texts/800", "parent": {"cref": "#/groups/102"}, "children": [], "label": "list_item", "prov": [{"page_no": 80, "bbox": {"l": 136.80099487304688, "t": 428.6591491699219, "r": 533.23095703125, "b": 394.4778747558594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 174]}], "orig": "1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission.", "text": "1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/801", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 80, "bbox": {"l": 64.30838775634766, "t": 207.906982421875, "r": 271.8835754394531, "b": 198.54144287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Figure 4-44 Row permissions after enabling RCAC", "text": "Figure 4-44 Row permissions after enabling RCAC"}, {"self_ref": "#/texts/802", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 80, "bbox": {"l": 64.15714263916016, "t": 37.66644287109375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "64", "text": "64"}, {"self_ref": "#/texts/803", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 80, "bbox": {"l": 93.25228881835938, "t": 37.32940673828125, "r": 334.4214172363281, "b": 28.04449462890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/804", "parent": {"cref": "#/groups/103"}, "children": [], "label": "list_item", "prov": [{"page_no": 81, "bbox": {"l": 135.80770874023438, "t": 721.4266357421875, "r": 544.3787231445312, "b": 699.2303466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45.", "text": "2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/805", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 81, "bbox": {"l": 135.82278442382812, "t": 550.4591064453125, "r": 328.7805480957031, "b": 541.2850341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Figure 4-45 Selecting row permission definition", "text": "Figure 4-45 Selecting row permission definition"}, {"self_ref": "#/texts/806", "parent": {"cref": "#/groups/104"}, "children": [], "label": "list_item", "prov": [{"page_no": 81, "bbox": {"l": 136.20486450195312, "t": 524.6837768554688, "r": 546.0803833007812, "b": 478.66326904296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 344]}], "orig": "3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied.", "text": "3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/807", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 81, "bbox": {"l": 64.38289642333984, "t": 193.93914794921875, "r": 342.9576110839844, "b": 184.7705078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission"}, {"self_ref": "#/texts/808", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 81, "bbox": {"l": 214.26358032226562, "t": 37.2916259765625, "r": 523.5935668945312, "b": 27.94195556640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/809", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 81, "bbox": {"l": 535.6220703125, "t": 37.70361328125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "65", "text": "65"}, {"self_ref": "#/texts/810", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 82, "bbox": {"l": 64.1228256225586, "t": 721.7398071289062, "r": 347.13360595703125, "b": 708.2988891601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "4.3.10 Demonstrating data access with RCAC", "text": "4.3.10 Demonstrating data access with RCAC", "level": 1}, {"self_ref": "#/texts/811", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 82, "bbox": {"l": 135.73379516601562, "t": 695.3556518554688, "r": 547.2556762695312, "b": 672.9600830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 148]}], "orig": "You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):"}, {"self_ref": "#/texts/812", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 135.537353515625, "t": 666.2977294921875, "r": 390.8248596191406, "b": 656.0548095703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "GLYPH A SELECT statement that returns the SESSION_USER.", "text": "GLYPH A SELECT statement that returns the SESSION_USER.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/813", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 135.6352081298828, "t": 649.3411254882812, "r": 543.1919555664062, "b": 627.279296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 131]}], "orig": "GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table.", "text": "GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/814", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 135.70932006835938, "t": 620.5113525390625, "r": 543.6400756835938, "b": 598.2001953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 126]}], "orig": "GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name:", "text": "GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/815", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 151.35504150390625, "t": 591.09033203125, "r": 227.99673461914062, "b": 581.2601318359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 22]}], "orig": "-c u s t o m e r _ i d", "text": "-c u s t o m e r _ i d", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/816", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 151.4617462158203, "t": 578.634765625, "r": 237.2466278076172, "b": 569.2603149414062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "-customer_name", "text": "-customer_name", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/817", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 151.39413452148438, "t": 567.0379638671875, "r": 236.13906860351562, "b": 557.260498046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "-customer_email", "text": "-customer_email", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/818", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 151.38189697265625, "t": 554.8548583984375, "r": 246.89581298828125, "b": 545.2606811523438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "-c u s t o m e r _ t a x _ i d", "text": "-c u s t o m e r _ t a x _ i d", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/819", "parent": {"cref": "#/groups/105"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 151.4001007080078, "t": 543.35791015625, "r": 318.3563537597656, "b": 533.2608642578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "orig": "-customer_drivers_license_number", "text": "-customer_drivers_license_number", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/820", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 82, "bbox": {"l": 136.71405029296875, "t": 517.52392578125, "r": 357.2292175292969, "b": 505.5359802246094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Data access for a DBE user with RCAC", "text": "Data access for a DBE user with RCAC", "level": 1}, {"self_ref": "#/texts/821", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 82, "bbox": {"l": 136.20758056640625, "t": 502.6961364746094, "r": 394.5498352050781, "b": 492.2782897949219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "To test a DBE (MCAIN) user, complete the following steps:", "text": "To test a DBE (MCAIN) user, complete the following steps:"}, {"self_ref": "#/texts/822", "parent": {"cref": "#/groups/106"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 136.73385620117188, "t": 485.1209411621094, "r": 531.4830322265625, "b": 463.1365966796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 152]}], "orig": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user.", "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/823", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 82, "bbox": {"l": 136.308349609375, "t": 351.44464111328125, "r": 262.7190856933594, "b": 341.9928894042969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "Figure 4-47 DBE session user", "text": "Figure 4-47 DBE session user"}, {"self_ref": "#/texts/824", "parent": {"cref": "#/groups/107"}, "children": [], "label": "list_item", "prov": [{"page_no": 82, "bbox": {"l": 135.81915283203125, "t": 325.3260192871094, "r": 503.1596374511719, "b": 314.73345947265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "text": "2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/825", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 82, "bbox": {"l": 136.09771728515625, "t": 165.4344482421875, "r": 451.9573974609375, "b": 155.87709045410156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table"}, {"self_ref": "#/texts/826", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 82, "bbox": {"l": 64.22357940673828, "t": 37.54156494140625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "66", "text": "66"}, {"self_ref": "#/texts/827", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 82, "bbox": {"l": 93.37715148925781, "t": 37.31842041015625, "r": 334.4214172363281, "b": 28.0130615234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/828", "parent": {"cref": "#/groups/108"}, "children": [], "label": "list_item", "prov": [{"page_no": 83, "bbox": {"l": 136.20147705078125, "t": 721.3931884765625, "r": 547.291015625, "b": 687.2783203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 201]}], "orig": "3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked.", "text": "3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/829", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 83, "bbox": {"l": 64.37542724609375, "t": 322.11279296875, "r": 376.57159423828125, "b": 312.47698974609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 73]}], "orig": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns"}, {"self_ref": "#/texts/830", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 83, "bbox": {"l": 136.4634246826172, "t": 296.45758056640625, "r": 382.60321044921875, "b": 283.8960876464844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "Data access for SECURITY user with RCAC", "text": "Data access for SECURITY user with RCAC", "level": 1}, {"self_ref": "#/texts/831", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 83, "bbox": {"l": 136.3077392578125, "t": 280.8298645019531, "r": 382.8707580566406, "b": 270.501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "To test a SECURITY user, complete the following steps:", "text": "To test a SECURITY user, complete the following steps:"}, {"self_ref": "#/texts/832", "parent": {"cref": "#/groups/109"}, "children": [], "label": "list_item", "prov": [{"page_no": 83, "bbox": {"l": 136.8000030517578, "t": 264.041259765625, "r": 531.4830322265625, "b": 241.58203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 163]}], "orig": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer.", "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/833", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 83, "bbox": {"l": 136.09732055664062, "t": 104.47393798828125, "r": 289.5880432128906, "b": 95.172119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "Figure 4-50 SECURITY session user", "text": "Figure 4-50 SECURITY session user"}, {"self_ref": "#/texts/834", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 83, "bbox": {"l": 214.31561279296875, "t": 37.20220947265625, "r": 523.5935668945312, "b": 27.99371337890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/835", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 83, "bbox": {"l": 535.5758666992188, "t": 37.74444580078125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "67", "text": "67"}, {"self_ref": "#/texts/836", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 84, "bbox": {"l": 64.20339965820312, "t": 37.572021484375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "68", "text": "68"}, {"self_ref": "#/texts/837", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 84, "bbox": {"l": 93.34625244140625, "t": 37.291259765625, "r": 334.4214172363281, "b": 28.0338134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/838", "parent": {"cref": "#/groups/110"}, "children": [], "label": "list_item", "prov": [{"page_no": 84, "bbox": {"l": 135.87147521972656, "t": 721.371826171875, "r": 547.1937866210938, "b": 698.9642944335938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 152]}], "orig": "2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all.", "text": "2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/839", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 84, "bbox": {"l": 136.1445770263672, "t": 563.9288330078125, "r": 486.7213439941406, "b": 554.88623046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 83]}], "orig": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table"}, {"self_ref": "#/texts/840", "parent": {"cref": "#/groups/111"}, "children": [], "label": "list_item", "prov": [{"page_no": 84, "bbox": {"l": 136.01255798339844, "t": 537.9552001953125, "r": 542.7387084960938, "b": 516.1114501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 126]}], "orig": "3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer.", "text": "3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/841", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 84, "bbox": {"l": 64.1894760131836, "t": 351.4267883300781, "r": 362.28131103515625, "b": 341.9969787597656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results"}, {"self_ref": "#/texts/842", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 84, "bbox": {"l": 136.5155792236328, "t": 325.609619140625, "r": 368.6448059082031, "b": 313.4159851074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Data access for TELLER user with RCAC", "text": "Data access for TELLER user with RCAC", "level": 1}, {"self_ref": "#/texts/843", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 84, "bbox": {"l": 136.20401000976562, "t": 310.2610168457031, "r": 427.7564697265625, "b": 299.6714782714844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 64]}], "orig": "To test a Teller (TQSPENCER) user, complete the following steps:", "text": "To test a Teller (TQSPENCER) user, complete the following steps:"}, {"self_ref": "#/texts/844", "parent": {"cref": "#/groups/112"}, "children": [], "label": "list_item", "prov": [{"page_no": 84, "bbox": {"l": 136.66238403320312, "t": 293.5404052734375, "r": 530.67822265625, "b": 271.08343505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 164]}], "orig": "1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "text": "1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/845", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 84, "bbox": {"l": 136.1230010986328, "t": 119.848388671875, "r": 278.20037841796875, "b": 110.4892578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "Figure 4-53 TELLER session user", "text": "Figure 4-53 TELLER session user"}, {"self_ref": "#/texts/846", "parent": {"cref": "#/groups/113"}, "children": [], "label": "list_item", "prov": [{"page_no": 85, "bbox": {"l": 135.8011474609375, "t": 721.39990234375, "r": 547.2401733398438, "b": 699.0465087890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows.", "text": "2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/847", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 85, "bbox": {"l": 135.62548828125, "t": 570.638427734375, "r": 482.5060729980469, "b": 561.177001953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table"}, {"self_ref": "#/texts/848", "parent": {"cref": "#/groups/114"}, "children": [], "label": "list_item", "prov": [{"page_no": 85, "bbox": {"l": 136.01345825195312, "t": 544.7952880859375, "r": 547.2914428710938, "b": 510.33868408203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 195]}], "orig": "3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked.", "text": "3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/849", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 85, "bbox": {"l": 64.17078399658203, "t": 119.83746337890625, "r": 391.8590393066406, "b": 110.51699829101562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 76]}], "orig": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns"}, {"self_ref": "#/texts/850", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 85, "bbox": {"l": 214.29336547851562, "t": 37.20977783203125, "r": 523.5935668945312, "b": 28.0645751953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/851", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 85, "bbox": {"l": 535.5740966796875, "t": 37.833740234375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "69", "text": "69"}, {"self_ref": "#/texts/852", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 86, "bbox": {"l": 63.99982833862305, "t": 37.82769775390625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "70", "text": "70"}, {"self_ref": "#/texts/853", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 86, "bbox": {"l": 93.3930892944336, "t": 37.30694580078125, "r": 334.4214172363281, "b": 28.03778076171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/854", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 86, "bbox": {"l": 136.52813720703125, "t": 721.5006103515625, "r": 361.28759765625, "b": 709.5360107421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Data access for ADMIN user with RCAC", "text": "Data access for ADMIN user with RCAC", "level": 1}, {"self_ref": "#/texts/855", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 86, "bbox": {"l": 136.3176727294922, "t": 706.8600463867188, "r": 448.129638671875, "b": 696.2783203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:"}, {"self_ref": "#/texts/856", "parent": {"cref": "#/groups/115"}, "children": [], "label": "list_item", "prov": [{"page_no": 86, "bbox": {"l": 136.8000030517578, "t": 689.4435424804688, "r": 547.238525390625, "b": 666.9929809570312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 164]}], "orig": "1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "text": "1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/857", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 86, "bbox": {"l": 136.44989013671875, "t": 567.1987915039062, "r": 274.6385803222656, "b": 557.8770141601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Figure 4-56 ADMIN session user", "text": "Figure 4-56 ADMIN session user"}, {"self_ref": "#/texts/858", "parent": {"cref": "#/groups/116"}, "children": [], "label": "list_item", "prov": [{"page_no": 86, "bbox": {"l": 135.9615936279297, "t": 541.28369140625, "r": 537.4520263671875, "b": 519.0384521484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 111]}], "orig": "2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows.", "text": "2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/859", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 86, "bbox": {"l": 136.13417053222656, "t": 420.7099304199219, "r": 457.3196716308594, "b": 411.4801025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table"}, {"self_ref": "#/texts/860", "parent": {"cref": "#/groups/117"}, "children": [], "label": "list_item", "prov": [{"page_no": 87, "bbox": {"l": 136.0950164794922, "t": 721.41357421875, "r": 524.1978759765625, "b": 699.2781372070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 94]}], "orig": "3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns.", "text": "3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/861", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 87, "bbox": {"l": 64.27821350097656, "t": 313.4559020996094, "r": 386.91961669921875, "b": 303.9661865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns"}, {"self_ref": "#/texts/862", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 87, "bbox": {"l": 136.49583435058594, "t": 287.5277404785156, "r": 383.07720947265625, "b": 275.79608154296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Data access for WEBUSER user with RCAC", "text": "Data access for WEBUSER user with RCAC", "level": 1}, {"self_ref": "#/texts/863", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 87, "bbox": {"l": 136.1496124267578, "t": 272.600830078125, "r": 527.5846557617188, "b": 250.45343017578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps:", "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps:"}, {"self_ref": "#/texts/864", "parent": {"cref": "#/groups/118"}, "children": [], "label": "list_item", "prov": [{"page_no": 87, "bbox": {"l": 136.61180114746094, "t": 243.40185546875, "r": 531.4830322265625, "b": 220.994873046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 157]}], "orig": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/865", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 87, "bbox": {"l": 136.1943817138672, "t": 116.01922607421875, "r": 289.5948791503906, "b": 106.53924560546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "orig": "Figure 4-59 WEBUSER session user", "text": "Figure 4-59 WEBUSER session user"}, {"self_ref": "#/texts/866", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 87, "bbox": {"l": 214.297607421875, "t": 37.20550537109375, "r": 523.5935668945312, "b": 28.0042724609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/867", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 87, "bbox": {"l": 535.4384765625, "t": 37.85540771484375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "71", "text": "71"}, {"self_ref": "#/texts/868", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 88, "bbox": {"l": 63.95808410644531, "t": 37.7515869140625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "72", "text": "72"}, {"self_ref": "#/texts/869", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 88, "bbox": {"l": 93.32298278808594, "t": 37.32470703125, "r": 334.4214172363281, "b": 27.989990234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/870", "parent": {"cref": "#/groups/119"}, "children": [], "label": "list_item", "prov": [{"page_no": 88, "bbox": {"l": 135.97177124023438, "t": 721.4656372070312, "r": 547.2925415039062, "b": 686.7930908203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 195]}], "orig": "2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID.", "text": "2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/871", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 88, "bbox": {"l": 136.13768005371094, "t": 568.9273681640625, "r": 394.4398498535156, "b": 559.078369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID"}, {"self_ref": "#/texts/872", "parent": {"cref": "#/groups/120"}, "children": [], "label": "list_item", "prov": [{"page_no": 88, "bbox": {"l": 135.97732543945312, "t": 542.7027587890625, "r": 514.379638671875, "b": 520.39306640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61.", "text": "3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/873", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 88, "bbox": {"l": 136.13868713378906, "t": 270.6387939453125, "r": 320.7819519042969, "b": 261.212158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "Figure 4-61 Viewing the global variable value", "text": "Figure 4-61 Viewing the global variable value"}, {"self_ref": "#/texts/874", "parent": {"cref": "#/groups/121"}, "children": [], "label": "list_item", "prov": [{"page_no": 88, "bbox": {"l": 135.78077697753906, "t": 244.6905517578125, "r": 541.2606811523438, "b": 222.26959228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 145]}], "orig": "4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID.", "text": "4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/875", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 88, "bbox": {"l": 136.2648468017578, "t": 106.13018798828125, "r": 474.20855712890625, "b": 96.59709930419922, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table"}, {"self_ref": "#/texts/876", "parent": {"cref": "#/groups/122"}, "children": [], "label": "list_item", "prov": [{"page_no": 89, "bbox": {"l": 136.2493438720703, "t": 721.4386596679688, "r": 524.1978759765625, "b": 699.2781372070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 158]}], "orig": "5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user's own row.", "text": "5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user's own row.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/877", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 89, "bbox": {"l": 64.18749237060547, "t": 539.26708984375, "r": 368.2061462402344, "b": 529.97705078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "orig": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns"}, {"self_ref": "#/texts/878", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 89, "bbox": {"l": 136.10256958007812, "t": 513.8388671875, "r": 377.4743957519531, "b": 501.39599609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "Other examples of data access with RCAC", "text": "Other examples of data access with RCAC", "level": 1}, {"self_ref": "#/texts/879", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 89, "bbox": {"l": 135.91213989257812, "t": 498.0209655761719, "r": 512.9512939453125, "b": 475.9766540527344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 114]}], "orig": "To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps:", "text": "To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps:"}, {"self_ref": "#/texts/880", "parent": {"cref": "#/groups/123"}, "children": [], "label": "list_item", "prov": [{"page_no": 89, "bbox": {"l": 136.5059051513672, "t": 469.5335998535156, "r": 535.2608642578125, "b": 435.0992736816406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 167]}], "orig": "1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts.", "text": "1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/881", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 89, "bbox": {"l": 136.13351440429688, "t": 247.94659423828125, "r": 520.2975463867188, "b": 238.66253662109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "orig": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile"}, {"self_ref": "#/texts/882", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 89, "bbox": {"l": 214.31243896484375, "t": 37.21197509765625, "r": 523.5935668945312, "b": 27.9693603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/883", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 89, "bbox": {"l": 535.3995361328125, "t": 37.65289306640625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "73", "text": "73"}, {"self_ref": "#/texts/884", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 90, "bbox": {"l": 63.96171188354492, "t": 37.88232421875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "74", "text": "74"}, {"self_ref": "#/texts/885", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 90, "bbox": {"l": 93.27671813964844, "t": 37.367431640625, "r": 334.4214172363281, "b": 27.97564697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/886", "parent": {"cref": "#/groups/124"}, "children": [], "label": "list_item", "prov": [{"page_no": 90, "bbox": {"l": 135.940185546875, "t": 721.3955078125, "r": 547.2566528320312, "b": 675.2788696289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 261]}], "orig": "2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions.", "text": "2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/887", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 90, "bbox": {"l": 136.05810546875, "t": 290.78485107421875, "r": 535.08740234375, "b": 281.088623046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile"}, {"self_ref": "#/texts/888", "parent": {"cref": "#/groups/125"}, "children": [], "label": "list_item", "prov": [{"page_no": 91, "bbox": {"l": 136.18202209472656, "t": 721.334716796875, "r": 547.2400512695312, "b": 687.2783203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 236]}], "orig": "3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table.", "text": "3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/889", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 91, "bbox": {"l": 136.2951202392578, "t": 299.4490966796875, "r": 501.49591064453125, "b": 289.8878173828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 88]}], "orig": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile"}, {"self_ref": "#/texts/890", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 91, "bbox": {"l": 64.09226989746094, "t": 270.94171142578125, "r": 375.0662841796875, "b": 257.6646728515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "4.3.11 Query implementation with RCAC activated", "text": "4.3.11 Query implementation with RCAC activated", "level": 1}, {"self_ref": "#/texts/891", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 91, "bbox": {"l": 135.77622985839844, "t": 244.79510498046875, "r": 547.1669311523438, "b": 198.13531494140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 280]}], "orig": "This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer.", "text": "This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer."}, {"self_ref": "#/texts/892", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 91, "bbox": {"l": 214.29998779296875, "t": 37.236572265625, "r": 523.5935668945312, "b": 27.95953369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/893", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 91, "bbox": {"l": 535.4443969726562, "t": 37.81414794921875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "75", "text": "75"}, {"self_ref": "#/texts/894", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 92, "bbox": {"l": 63.95058822631836, "t": 37.78094482421875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "76", "text": "76"}, {"self_ref": "#/texts/895", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 92, "bbox": {"l": 93.32958221435547, "t": 37.35498046875, "r": 334.4214172363281, "b": 28.02093505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/896", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 92, "bbox": {"l": 136.1143798828125, "t": 721.446044921875, "r": 266.8606872558594, "b": 710.7125244140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Complete the following steps:", "text": "Complete the following steps:", "level": 1}, {"self_ref": "#/texts/897", "parent": {"cref": "#/groups/126"}, "children": [], "label": "list_item", "prov": [{"page_no": 92, "bbox": {"l": 136.79046630859375, "t": 704.571044921875, "r": 532.4749755859375, "b": 670.2988891601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 183]}], "orig": "1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing.", "text": "1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/898", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 92, "bbox": {"l": 136.02316284179688, "t": 291.3924865722656, "r": 340.572021484375, "b": 281.702880859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Figure 4-67 Visual Explain with no RCAC enabled", "text": "Figure 4-67 Visual Explain with no RCAC enabled"}, {"self_ref": "#/texts/899", "parent": {"cref": "#/groups/127"}, "children": [], "label": "list_item", "prov": [{"page_no": 93, "bbox": {"l": 136.00341796875, "t": 721.5369873046875, "r": 514.048583984375, "b": 687.1716918945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 228]}], "orig": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause.", "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/900", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 93, "bbox": {"l": 135.9990692138672, "t": 311.7919921875, "r": 327.9913635253906, "b": 302.78125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "Figure 4-68 Visual Explain with RCAC enabled", "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"self_ref": "#/texts/901", "parent": {"cref": "#/groups/128"}, "children": [], "label": "list_item", "prov": [{"page_no": 93, "bbox": {"l": 136.2928924560547, "t": 286.0349426269531, "r": 547.2394409179688, "b": 251.98651123046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause.", "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/902", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 93, "bbox": {"l": 64.35660552978516, "t": 125.32025146484375, "r": 227.347412109375, "b": 116.0611572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Figure 4-69 Index advice with no RCAC", "text": "Figure 4-69 Index advice with no RCAC"}, {"self_ref": "#/texts/903", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 93, "bbox": {"l": 214.30316162109375, "t": 37.2801513671875, "r": 523.5935668945312, "b": 27.9913330078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/904", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 93, "bbox": {"l": 535.3654174804688, "t": 37.719970703125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "77", "text": "77"}, {"self_ref": "#/texts/905", "parent": {"cref": "#/groups/129"}, "children": [], "label": "list_item", "prov": [{"page_no": 94, "bbox": {"l": 135.9367218017578, "t": 721.3848266601562, "r": 547.188720703125, "b": 687.2786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, \"Index advisor\" on page 99.", "text": "4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, \"Index advisor\" on page 99.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/906", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 94, "bbox": {"l": 64.2020263671875, "t": 553.6696166992188, "r": 249.87530517578125, "b": 544.4198608398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Figure 4-70 Index advice with RCAC enabled", "text": "Figure 4-70 Index advice with RCAC enabled"}, {"self_ref": "#/texts/907", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 94, "bbox": {"l": 63.94062805175781, "t": 37.81573486328125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "78", "text": "78"}, {"self_ref": "#/texts/908", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 94, "bbox": {"l": 93.33392333984375, "t": 37.32916259765625, "r": 334.4214172363281, "b": 28.05181884765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/909", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 95, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 5.", "text": "Chapter 5."}, {"self_ref": "#/texts/910", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 95, "bbox": {"l": 500.3999938964844, "t": 698.831298828125, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "5", "text": "5"}, {"self_ref": "#/texts/911", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 95, "bbox": {"l": 136.8000030517578, "t": 538.669677734375, "r": 511.1795959472656, "b": 513.0821533203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "RCAC and non-SQL interfaces", "text": "RCAC and non-SQL interfaces", "level": 1}, {"self_ref": "#/texts/912", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 95, "bbox": {"l": 135.93673706054688, "t": 475.41363525390625, "r": 547.181884765625, "b": 405.0663757324219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 513]}], "orig": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF ).", "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF )."}, {"self_ref": "#/texts/913", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 95, "bbox": {"l": 135.76991271972656, "t": 393.2198791503906, "r": 547.2554931640625, "b": 359.08001708984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 246]}], "orig": "This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter.", "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter."}, {"self_ref": "#/texts/914", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 95, "bbox": {"l": 136.10678100585938, "t": 347.1801452636719, "r": 412.4370422363281, "b": 337.0604553222656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "The following topics are covered in this chapter in this chapter:", "text": "The following topics are covered in this chapter in this chapter:"}, {"self_ref": "#/texts/915", "parent": {"cref": "#/groups/130"}, "children": [], "label": "list_item", "prov": [{"page_no": 95, "bbox": {"l": 135.8011016845703, "t": 329.6640319824219, "r": 254.5669708251953, "b": 319.5867919921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "GLYPH Unsupported interfaces", "text": "GLYPH Unsupported interfaces", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/916", "parent": {"cref": "#/groups/130"}, "children": [], "label": "list_item", "prov": [{"page_no": 95, "bbox": {"l": 135.7434844970703, "t": 317.3988342285156, "r": 285.9834289550781, "b": 308.0808410644531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "GLYPH Native query result differences", "text": "GLYPH Native query result differences", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/917", "parent": {"cref": "#/groups/130"}, "children": [], "label": "list_item", "prov": [{"page_no": 95, "bbox": {"l": 135.7656707763672, "t": 306.08868408203125, "r": 325.0879211425781, "b": 296.0810241699219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "GLYPH Accidental updates with masked values", "text": "GLYPH Accidental updates with masked values", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/918", "parent": {"cref": "#/groups/130"}, "children": [], "label": "list_item", "prov": [{"page_no": 95, "bbox": {"l": 135.72933959960938, "t": 293.7930908203125, "r": 318.95843505859375, "b": 283.6689147949219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "GLYPH System CL commands considerations", "text": "GLYPH System CL commands considerations", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/919", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 95, "bbox": {"l": 63.744651794433594, "t": 37.23199462890625, "r": 257.24334716796875, "b": 27.908203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/920", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 95, "bbox": {"l": 535.3575439453125, "t": 37.77392578125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "79", "text": "79"}, {"self_ref": "#/texts/921", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 96, "bbox": {"l": 64.43855285644531, "t": 718.6322021484375, "r": 275.70184326171875, "b": 702.4107666015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "5.1 Unsupported interfaces", "text": "5.1 Unsupported interfaces", "level": 1}, {"self_ref": "#/texts/922", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 136.1591339111328, "t": 686.068359375, "r": 519.7969970703125, "b": 663.6136474609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 112]}], "orig": "It is not possible to create a row permission or column mask on a distributed table or a program-described file.", "text": "It is not possible to create a row permission or column mask on a distributed table or a program-described file."}, {"self_ref": "#/texts/923", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 135.89776611328125, "t": 651.9190673828125, "r": 547.2138061523438, "b": 617.4327392578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "text": "After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message:"}, {"self_ref": "#/texts/924", "parent": {"cref": "#/groups/131"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.5338592529297, "t": 611.342041015625, "r": 526.0348510742188, "b": 600.8960571289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "orig": "GLYPH A logical file with multiple formats if the open attempt requests more than one format.", "text": "GLYPH A logical file with multiple formats if the open attempt requests more than one format.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/925", "parent": {"cref": "#/groups/131"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.57638549804688, "t": 599.421875, "r": 410.4948425292969, "b": 588.82666015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "GLYPH A table or query that specifies an ICU 2.6.1 sort sequence.", "text": "GLYPH A table or query that specifies an ICU 2.6.1 sort sequence.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/926", "parent": {"cref": "#/groups/131"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.51390075683594, "t": 586.9641723632812, "r": 264.3358459472656, "b": 576.810302734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "GLYPH A table with read triggers.", "text": "GLYPH A table with read triggers.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/927", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 135.78880310058594, "t": 565.395263671875, "r": 537.0208129882812, "b": 543.160400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated.", "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated."}, {"self_ref": "#/texts/928", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 136.04721069335938, "t": 531.491455078125, "r": 547.275634765625, "b": 473.14154052734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 451]}], "orig": "For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1.", "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1."}, {"self_ref": "#/texts/929", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 141.973876953125, "t": 455.5430603027344, "r": 541.2369995117188, "b": 408.6007080078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 306]}], "orig": "Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC.", "text": "Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC."}, {"self_ref": "#/texts/930", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 96, "bbox": {"l": 64.47200012207031, "t": 376.6991882324219, "r": 329.61151123046875, "b": 360.3584289550781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "5.2 Native query result differences", "text": "5.2 Native query result differences", "level": 1}, {"self_ref": "#/texts/931", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 135.66397094726562, "t": 344.3070373535156, "r": 542.3941650390625, "b": 297.4229736328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 321]}], "orig": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items:", "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items:"}, {"self_ref": "#/texts/932", "parent": {"cref": "#/groups/132"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.92169189453125, "t": 291.45050048828125, "r": 198.29859924316406, "b": 281.1392517089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "GLYPH Query/400", "text": "GLYPH Query/400", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/933", "parent": {"cref": "#/groups/132"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.69873046875, "t": 279.62432861328125, "r": 214.61248779296875, "b": 269.1394348144531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "GLYPH QQQQRY API", "text": "GLYPH QQQQRY API", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/934", "parent": {"cref": "#/groups/132"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.62481689453125, "t": 267.34716796875, "r": 315.83990478515625, "b": 257.1396179199219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "GLYPH Open Query File ( OPNQRYF ) command", "text": "GLYPH Open Query File ( OPNQRYF ) command", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/935", "parent": {"cref": "#/groups/132"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.5345458984375, "t": 255.6026611328125, "r": 285.93896484375, "b": 245.13980102539062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "GLYPH Run Query ( RUNQRY ) command", "text": "GLYPH Run Query ( RUNQRY ) command", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/936", "parent": {"cref": "#/groups/132"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.56021118164062, "t": 243.46417236328125, "r": 441.7839660644531, "b": 233.13999938964844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "text": "GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/937", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 135.97003173828125, "t": 221.2158203125, "r": 541.6351928710938, "b": 174.9041748046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 332]}], "orig": "Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default.", "text": "Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default."}, {"self_ref": "#/texts/938", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 96, "bbox": {"l": 135.73948669433594, "t": 163.37255859375, "r": 547.283447265625, "b": 140.65643310546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 129]}], "orig": "The following list documents some of the query output differences that can occur when native query requests are processed by CQE:", "text": "The following list documents some of the query output differences that can occur when native query requests are processed by CQE:"}, {"self_ref": "#/texts/939", "parent": {"cref": "#/groups/133"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.9209747314453, "t": 133.8785400390625, "r": 299.18975830078125, "b": 123.5390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "GLYPH Different ordering in the result set", "text": "GLYPH Different ordering in the result set", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/940", "parent": {"cref": "#/groups/133"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.68008422851562, "t": 121.787109375, "r": 393.4990234375, "b": 111.573486328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "GLYPH Different values for null columns or columns with errors", "text": "GLYPH Different values for null columns or columns with errors", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/941", "parent": {"cref": "#/groups/133"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.76820373535156, "t": 110.0054931640625, "r": 358.4886169433594, "b": 99.1552734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "GLYPH Suppression of some mapping error messages", "text": "GLYPH Suppression of some mapping error messages", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/942", "parent": {"cref": "#/groups/133"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.62449645996094, "t": 98.14892578125, "r": 310.7019348144531, "b": 87.7000732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "GLYPH Loss of RRN positioning capabilities", "text": "GLYPH Loss of RRN positioning capabilities", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/943", "parent": {"cref": "#/groups/133"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.7325439453125, "t": 86.00927734375, "r": 354.2079162597656, "b": 75.52520751953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "GLYPH Duplicate key processing behavior differences", "text": "GLYPH Duplicate key processing behavior differences", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/944", "parent": {"cref": "#/groups/133"}, "children": [], "label": "list_item", "prov": [{"page_no": 96, "bbox": {"l": 135.72433471679688, "t": 73.82000732421875, "r": 246.4168701171875, "b": 63.67352294921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "GLYPH Missing key feedback", "text": "GLYPH Missing key feedback", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/945", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 96, "bbox": {"l": 64.1874008178711, "t": 37.61077880859375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "80", "text": "80"}, {"self_ref": "#/texts/946", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 96, "bbox": {"l": 93.2634048461914, "t": 37.3101806640625, "r": 334.4214172363281, "b": 28.0943603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/947", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 97, "bbox": {"l": 136.42791748046875, "t": 721.3850708007812, "r": 543.0580444335938, "b": 699.2781372070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 105]}], "orig": "For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at:", "text": "For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at:"}, {"self_ref": "#/texts/948", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 97, "bbox": {"l": 136.22903442382812, "t": 692.5701904296875, "r": 521.8867797851562, "b": 682.218994140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"self_ref": "#/texts/949", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 97, "bbox": {"l": 136.18670654296875, "t": 670.4671630859375, "r": 544.6605834960938, "b": 648.2789306640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 180]}], "orig": "In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance.", "text": "In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance."}, {"self_ref": "#/texts/950", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 97, "bbox": {"l": 141.93385314941406, "t": 630.1156005859375, "r": 495.4548034667969, "b": 595.689208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 229]}], "orig": "Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces.", "text": "Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces."}, {"self_ref": "#/texts/951", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 97, "bbox": {"l": 64.66980743408203, "t": 563.8651733398438, "r": 396.822265625, "b": 547.7825927734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "5.3 Accidental updates with masked values", "text": "5.3 Accidental updates with masked values", "level": 1}, {"self_ref": "#/texts/952", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 97, "bbox": {"l": 135.81739807128906, "t": 531.3096923828125, "r": 547.184814453125, "b": 497.2587890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 193]}], "orig": "The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access.", "text": "The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access."}, {"self_ref": "#/texts/953", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 97, "bbox": {"l": 135.87274169921875, "t": 485.3960876464844, "r": 541.6968994140625, "b": 439.19415283203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 291]}], "orig": "For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program's record buffer, as shown Figure 5-1.", "text": "For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program's record buffer, as shown Figure 5-1."}, {"self_ref": "#/texts/954", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 97, "bbox": {"l": 136.08998107910156, "t": 427.2828674316406, "r": 547.1439819335938, "b": 369.28070068359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 453]}], "orig": "In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value.", "text": "In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value."}, {"self_ref": "#/texts/955", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 97, "bbox": {"l": 136.07180786132812, "t": 69.81817626953125, "r": 374.3499755859375, "b": 60.53710174560547, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "Figure 5-1 Accidental update with masked values scenario", "text": "Figure 5-1 Accidental update with masked values scenario"}, {"self_ref": "#/texts/956", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 97, "bbox": {"l": 353.64373779296875, "t": 37.12353515625, "r": 523.6332397460938, "b": 27.8997802734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Chapter 5. RCAC and non-SQL interfaces", "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"self_ref": "#/texts/957", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 97, "bbox": {"l": 535.66748046875, "t": 37.72357177734375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "81", "text": "81"}, {"self_ref": "#/texts/958", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 98, "bbox": {"l": 64.22566223144531, "t": 37.58349609375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "82", "text": "82"}, {"self_ref": "#/texts/959", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 98, "bbox": {"l": 93.18901824951172, "t": 37.28155517578125, "r": 334.4214172363281, "b": 28.08782958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/960", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.91806030273438, "t": 721.273193359375, "r": 545.1429443359375, "b": 699.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 107]}], "orig": "Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values.", "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values."}, {"self_ref": "#/texts/961", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.93345642089844, "t": 687.3599853515625, "r": 547.2675170898438, "b": 641.2594604492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 333]}], "orig": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, \"Check constraint solution\" on page 108.", "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, \"Check constraint solution\" on page 108."}, {"self_ref": "#/texts/962", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 98, "bbox": {"l": 64.44256591796875, "t": 614.06787109375, "r": 385.5848388671875, "b": 597.47412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "5.4 System CL commands considerations", "text": "5.4 System CL commands considerations", "level": 1}, {"self_ref": "#/texts/963", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.84999084472656, "t": 581.5377807617188, "r": 547.4896240234375, "b": 522.8721923828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 440]}], "orig": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC.", "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC."}, {"self_ref": "#/texts/964", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 98, "bbox": {"l": 64.2880630493164, "t": 503.80047607421875, "r": 405.0467224121094, "b": 490.1130676269531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command", "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command", "level": 1}, {"self_ref": "#/texts/965", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.64491271972656, "t": 477.33099365234375, "r": 542.9708251953125, "b": 431.25885009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 294]}], "orig": "The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL .", "text": "The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL ."}, {"self_ref": "#/texts/966", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.95484924316406, "t": 419.28741455078125, "r": 538.5584716796875, "b": 385.2994079589844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 210]}], "orig": "If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error.", "text": "If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error."}, {"self_ref": "#/texts/967", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.810791015625, "t": 373.19256591796875, "r": 547.2168579101562, "b": 315.160400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 442]}], "orig": "When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object.", "text": "When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object."}, {"self_ref": "#/texts/968", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 98, "bbox": {"l": 64.34564208984375, "t": 296.1662902832031, "r": 270.95599365234375, "b": 282.2169189453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "5.4.2 Copy File (CPYF) command", "text": "5.4.2 Copy File (CPYF) command", "level": 1}, {"self_ref": "#/texts/969", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.7013702392578, "t": 269.44036865234375, "r": 547.2855224609375, "b": 234.65618896484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 214]}], "orig": "The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table.", "text": "The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table."}, {"self_ref": "#/texts/970", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 135.7746124267578, "t": 223.41302490234375, "r": 547.3273315429688, "b": 129.28024291992188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 660]}], "orig": "When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command.", "text": "When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command."}, {"self_ref": "#/texts/971", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 98, "bbox": {"l": 136.0672149658203, "t": 117.3995361328125, "r": 535.8108520507812, "b": 71.03631591796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 330]}], "orig": "If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received.", "text": "If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received."}, {"self_ref": "#/texts/972", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 99, "bbox": {"l": 64.39531707763672, "t": 721.97216796875, "r": 305.67718505859375, "b": 708.2225341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "5.4.3 Copy Library (CPYLIB) command", "text": "5.4.3 Copy Library (CPYLIB) command", "level": 1}, {"self_ref": "#/texts/973", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 99, "bbox": {"l": 135.95230102539062, "t": 695.278076171875, "r": 544.9737548828125, "b": 637.2990112304688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 354]}], "orig": "The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, \"Create Duplicate Object (CRTDUPOBJ) command\" on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL .", "text": "The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, \"Create Duplicate Object (CRTDUPOBJ) command\" on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL ."}, {"self_ref": "#/texts/974", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 99, "bbox": {"l": 353.7088317871094, "t": 37.14202880859375, "r": 523.6332397460938, "b": 27.8951416015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "Chapter 5. RCAC and non-SQL interfaces", "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"self_ref": "#/texts/975", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 99, "bbox": {"l": 535.67578125, "t": 37.62774658203125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "83", "text": "83"}, {"self_ref": "#/texts/976", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 100, "bbox": {"l": 64.472412109375, "t": 37.7430419921875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "84", "text": "84"}, {"self_ref": "#/texts/977", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 100, "bbox": {"l": 93.35282135009766, "t": 37.45806884765625, "r": 334.50579833984375, "b": 27.94873046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/978", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 101, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 6.", "text": "Chapter 6."}, {"self_ref": "#/texts/979", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 101, "bbox": {"l": 136.34396362304688, "t": 538.808837890625, "r": 455.59796142578125, "b": 513.0821533203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "Additional considerations", "text": "Additional considerations", "level": 1}, {"self_ref": "#/texts/980", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 101, "bbox": {"l": 135.87008666992188, "t": 475.2606506347656, "r": 531.345458984375, "b": 452.89501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 168]}], "orig": "This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions:", "text": "This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions:"}, {"self_ref": "#/texts/981", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.8069610595703, "t": 445.96240234375, "r": 267.31884765625, "b": 435.6946716308594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "GLYPH Timing of column masking", "text": "GLYPH Timing of column masking", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/982", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.6639404296875, "t": 433.942626953125, "r": 221.46388244628906, "b": 424.05908203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "GLYPH Data movement", "text": "GLYPH Data movement", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/983", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.80430603027344, "t": 421.6257629394531, "r": 174.4866485595703, "b": 412.05926513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "GLYPH Joins", "text": "GLYPH Joins", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/984", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.77816772460938, "t": 409.7166748046875, "r": 177.6728515625, "b": 400.0594482421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "GLYPH Views", "text": "GLYPH Views", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/985", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.9530487060547, "t": 397.8844909667969, "r": 262.4305114746094, "b": 387.8131103515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "GLYPH Materialized query tables", "text": "GLYPH Materialized query tables", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/986", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.72091674804688, "t": 385.6953430175781, "r": 210.3322296142578, "b": 376.059814453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "GLYPH Index advisor", "text": "GLYPH Index advisor", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/987", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.53468322753906, "t": 373.67767333984375, "r": 310.97344970703125, "b": 363.45330810546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "GLYPH Monitoring, analysis, and debugging", "text": "GLYPH Monitoring, analysis, and debugging", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/988", "parent": {"cref": "#/groups/134"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.64329528808594, "t": 362.1476135253906, "r": 273.3426513671875, "b": 351.6171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "GLYPH Performance and scalability", "text": "GLYPH Performance and scalability", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/989", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 101, "bbox": {"l": 136.005859375, "t": 340.0391845703125, "r": 347.4121398925781, "b": 329.6795349121094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "The following topics are covered in this chapter:", "text": "The following topics are covered in this chapter:"}, {"self_ref": "#/texts/990", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.94393920898438, "t": 323.3427734375, "r": 267.31884765625, "b": 312.88189697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "GLYPH Timing of column masking", "text": "GLYPH Timing of column masking", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/991", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.8094024658203, "t": 311.0367431640625, "r": 296.3423156738281, "b": 301.06097412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "GLYPH RCAC effects on data movement", "text": "GLYPH RCAC effects on data movement", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/992", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.80313110351562, "t": 299.19488525390625, "r": 248.5316162109375, "b": 289.03125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "GLYPH RCAC effects on joins", "text": "GLYPH RCAC effects on joins", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/993", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.69058227539062, "t": 287.5282287597656, "r": 368.6199951171875, "b": 276.99609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "GLYPH Monitoring, analyzing, and debugging with RCAC", "text": "GLYPH Monitoring, analyzing, and debugging with RCAC", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/994", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.53225708007812, "t": 275.75750732421875, "r": 428.5085754394531, "b": 265.0615234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "GLYPH Views, materialized query tables, and query rewrite with RCAC", "text": "GLYPH Views, materialized query tables, and query rewrite with RCAC", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/995", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.63209533691406, "t": 263.27227783203125, "r": 349.38427734375, "b": 252.91455078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "GLYPH RCAC effects on performance and scalability", "text": "GLYPH RCAC effects on performance and scalability", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/996", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.68804931640625, "t": 251.15997314453125, "r": 390.4403381347656, "b": 240.64111328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "GLYPH Exclusive lock to implement RCAC (availability issues)", "text": "GLYPH Exclusive lock to implement RCAC (availability issues)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/997", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.8003692626953, "t": 239.31402587890625, "r": 315.37078857421875, "b": 228.98834228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "GLYPH Avoiding propagation of masked data", "text": "GLYPH Avoiding propagation of masked data", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/998", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.62815856933594, "t": 227.705810546875, "r": 307.3042297363281, "b": 217.0623016357422, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "GLYPH Triggers and functions (SECURED)", "text": "GLYPH Triggers and functions (SECURED)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/999", "parent": {"cref": "#/groups/135"}, "children": [], "label": "list_item", "prov": [{"page_no": 101, "bbox": {"l": 135.61077880859375, "t": 215.291259765625, "r": 315.1477355957031, "b": 204.86920166015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "GLYPH RCAC is only one part of the solution", "text": "GLYPH RCAC is only one part of the solution", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1000", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 101, "bbox": {"l": 63.789581298828125, "t": 37.2982177734375, "r": 257.24334716796875, "b": 27.87945556640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/1001", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 101, "bbox": {"l": 535.6629028320312, "t": 37.66424560546875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "85", "text": "85"}, {"self_ref": "#/texts/1002", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 101, "bbox": {"l": 500.3999938964844, "t": 698.946533203125, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "6", "text": "6"}, {"self_ref": "#/texts/1003", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 102, "bbox": {"l": 64.63821411132812, "t": 718.587646484375, "r": 298.45440673828125, "b": 702.0612182617188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "6.1 Timing of column masking", "text": "6.1 Timing of column masking", "level": 1}, {"self_ref": "#/texts/1004", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 135.9453887939453, "t": 686.14501953125, "r": 547.2496337890625, "b": 627.4352416992188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 381]}], "orig": "An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking.", "text": "An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking."}, {"self_ref": "#/texts/1005", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 136.015625, "t": 615.9714965820312, "r": 547.2325439453125, "b": 593.7183837890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 140]}], "orig": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values.", "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values."}, {"self_ref": "#/texts/1006", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 222.81260681152344, "t": 568.2012329101562, "r": 250.3378143310547, "b": 559.6641845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 6]}], "orig": "SELECT", "text": "SELECT"}, {"self_ref": "#/texts/1007", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 289.8625183105469, "t": 568.2435302734375, "r": 386.1354675292969, "b": 559.6641845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "CREDIT_CARD_NUMBER,", "text": "CREDIT_CARD_NUMBER,"}, {"self_ref": "#/texts/1008", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 223.27870178222656, "t": 546.2095947265625, "r": 247.33633422851562, "b": 537.4301147460938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 4]}], "orig": "FROM", "text": "FROM"}, {"self_ref": "#/texts/1009", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 223.30404663085938, "t": 535.2268676757812, "r": 264.05712890625, "b": 526.31298828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "GROUP BY", "text": "GROUP BY"}, {"self_ref": "#/texts/1010", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 289.9476623535156, "t": 535.2972412109375, "r": 384.1680908203125, "b": 526.31298828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "CREDIT_CARD_NUMBER", "text": "CREDIT_CARD_NUMBER"}, {"self_ref": "#/texts/1011", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 223.270263671875, "t": 523.8567504882812, "r": 262.7109680175781, "b": 515.1958618164062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "ORDER BY", "text": "ORDER BY"}, {"self_ref": "#/texts/1012", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 290.0070495605469, "t": 524.111083984375, "r": 386.2455749511719, "b": 514.6119384765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "CREDIT_CARD_NUMBER;", "text": "CREDIT_CARD_NUMBER;"}, {"self_ref": "#/texts/1013", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 102, "bbox": {"l": 160.45700073242188, "t": 494.1083068847656, "r": 285.01361083984375, "b": 481.6206970214844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 20]}], "orig": "Without RCAC Masking", "text": "Without RCAC Masking", "level": 1}, {"self_ref": "#/texts/1014", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 102, "bbox": {"l": 341.0262451171875, "t": 494.02642822265625, "r": 447.76593017578125, "b": 481.6206970214844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "With RCAC Masking", "text": "With RCAC Masking", "level": 1}, {"self_ref": "#/texts/1015", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 102, "bbox": {"l": 136.17198181152344, "t": 319.8768310546875, "r": 290.1625061035156, "b": 310.2148132324219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 6-1 Timing of column masking", "text": "Figure 6-1 Timing of column masking"}, {"self_ref": "#/texts/1016", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 102, "bbox": {"l": 290.2481994628906, "t": 556.4693603515625, "r": 389.2164001464844, "b": 537.4301147460938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "SUM(AMOUNT) AS TOTAL TRANSACTIONS", "text": "SUM(AMOUNT) AS TOTAL TRANSACTIONS"}, {"self_ref": "#/texts/1017", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 102, "bbox": {"l": 64.28016662597656, "t": 37.57470703125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "86", "text": "86"}, {"self_ref": "#/texts/1018", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 102, "bbox": {"l": 93.40719604492188, "t": 37.34661865234375, "r": 334.4214172363281, "b": 28.0390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1019", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 103, "bbox": {"l": 135.76144409179688, "t": 721.3262329101562, "r": 547.1474609375, "b": 627.1250610351562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 652]}], "orig": "Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query's final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2.", "text": "Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query's final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2."}, {"self_ref": "#/texts/1020", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 103, "bbox": {"l": 142.0433349609375, "t": 609.5735473632812, "r": 540.7468872070312, "b": 563.2588500976562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 262]}], "orig": "Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask.", "text": "Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask."}, {"self_ref": "#/texts/1021", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 103, "bbox": {"l": 136.22874450683594, "t": 260.0198974609375, "r": 386.6689758300781, "b": 250.298583984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "Figure 6-2 Masking differences between Fieldproc and RCAC", "text": "Figure 6-2 Masking differences between Fieldproc and RCAC"}, {"self_ref": "#/texts/1022", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 103, "bbox": {"l": 376.0430603027344, "t": 37.10882568359375, "r": 523.6287841796875, "b": 27.89581298828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1023", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 103, "bbox": {"l": 535.6262817382812, "t": 37.75579833984375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "87", "text": "87"}, {"self_ref": "#/texts/1024", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 104, "bbox": {"l": 64.4045181274414, "t": 721.7020874023438, "r": 342.9945068359375, "b": 706.0162963867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "6.2 RCAC effects on data movement", "text": "6.2 RCAC effects on data movement", "level": 1}, {"self_ref": "#/texts/1025", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 104, "bbox": {"l": 135.77244567871094, "t": 689.32666015625, "r": 547.2276000976562, "b": 631.2990112304688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 370]}], "orig": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss.", "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss."}, {"self_ref": "#/texts/1026", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 104, "bbox": {"l": 135.88336181640625, "t": 500.34722900390625, "r": 292.6585693359375, "b": 491.0691223144531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "Figure 6-3 RCAC and data movement", "text": "Figure 6-3 RCAC and data movement"}, {"self_ref": "#/texts/1027", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 104, "bbox": {"l": 135.75350952148438, "t": 474.4322814941406, "r": 547.2745361328125, "b": 392.0856628417969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 619]}], "orig": "The \"user\" that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization's object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC.", "text": "The \"user\" that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization's object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC."}, {"self_ref": "#/texts/1028", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 104, "bbox": {"l": 141.819091796875, "t": 374.66552734375, "r": 536.527587890625, "b": 316.4790344238281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 360]}], "orig": "Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data.", "text": "Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data."}, {"self_ref": "#/texts/1029", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 104, "bbox": {"l": 135.97303771972656, "t": 297.2681884765625, "r": 390.6604919433594, "b": 287.01776123046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "This section covers in detail the following three examples:", "text": "This section covers in detail the following three examples:"}, {"self_ref": "#/texts/1030", "parent": {"cref": "#/groups/136"}, "children": [], "label": "list_item", "prov": [{"page_no": 104, "bbox": {"l": 135.6826171875, "t": 280.8384094238281, "r": 372.0890197753906, "b": 270.45928955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 64]}], "orig": "GLYPH Effects when RCAC is defined on the source table", "text": "GLYPH Effects when RCAC is defined on the source table", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1031", "parent": {"cref": "#/groups/136"}, "children": [], "label": "list_item", "prov": [{"page_no": 104, "bbox": {"l": 135.69775390625, "t": 268.9405517578125, "r": 367.6379089355469, "b": 258.45947265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 64]}], "orig": "GLYPH Effects when RCAC is defined on the target table", "text": "GLYPH Effects when RCAC is defined on the target table", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1032", "parent": {"cref": "#/groups/136"}, "children": [], "label": "list_item", "prov": [{"page_no": 104, "bbox": {"l": 135.60743713378906, "t": 256.6319580078125, "r": 430.467529296875, "b": 246.3919677734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "GLYPH Effects when RCAC is defined on both source and target tables", "text": "GLYPH Effects when RCAC is defined on both source and target tables", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1033", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 104, "bbox": {"l": 64.18472290039062, "t": 226.94378662109375, "r": 407.9704895019531, "b": 213.8573760986328, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "6.2.1 Effects when RCAC is defined on the source table", "text": "6.2.1 Effects when RCAC is defined on the source table", "level": 1}, {"self_ref": "#/texts/1034", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 104, "bbox": {"l": 136.2682647705078, "t": 200.6033935546875, "r": 536.1681518554688, "b": 178.47857666015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 102]}], "orig": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table.", "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table."}, {"self_ref": "#/texts/1035", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 104, "bbox": {"l": 136.156005859375, "t": 166.70245361328125, "r": 331.8805847167969, "b": 157.27630615234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Example 6-1 INSERT INTO TARGET statement", "text": "Example 6-1 INSERT INTO TARGET statement"}, {"self_ref": "#/texts/1036", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 104, "bbox": {"l": 136.8000030517578, "t": 149.3502197265625, "r": 346.6770935058594, "b": 139.66534423828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"self_ref": "#/texts/1037", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 104, "bbox": {"l": 64.2040786743164, "t": 37.48199462890625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "88", "text": "88"}, {"self_ref": "#/texts/1038", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 104, "bbox": {"l": 93.31021881103516, "t": 37.2696533203125, "r": 334.4214172363281, "b": 28.070068359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1039", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 105, "bbox": {"l": 136.09054565429688, "t": 721.3619995117188, "r": 547.2900390625, "b": 650.7742919921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 516]}], "orig": "For example, given a \"source\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \"target\" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4.", "text": "For example, given a \"source\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \"target\" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4."}, {"self_ref": "#/texts/1040", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 105, "bbox": {"l": 136.06468200683594, "t": 384.626953125, "r": 377.7413635253906, "b": 375.16595458984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Figure 6-4 RCAC effects on data movement from SOURCE", "text": "Figure 6-4 RCAC effects on data movement from SOURCE"}, {"self_ref": "#/texts/1041", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 105, "bbox": {"l": 64.16183471679688, "t": 356.17694091796875, "r": 401.6576843261719, "b": 342.9894104003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "6.2.2 Effects when RCAC is defined on the target table", "text": "6.2.2 Effects when RCAC is defined on the target table", "level": 1}, {"self_ref": "#/texts/1042", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 105, "bbox": {"l": 136.28038024902344, "t": 329.9527587890625, "r": 536.1681518554688, "b": 307.8984680175781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 102]}], "orig": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table.", "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table."}, {"self_ref": "#/texts/1043", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 105, "bbox": {"l": 136.6165771484375, "t": 296.1914367675781, "r": 331.8912658691406, "b": 286.58740234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Example 6-2 INSERT INTO TARGET statement", "text": "Example 6-2 INSERT INTO TARGET statement"}, {"self_ref": "#/texts/1044", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 105, "bbox": {"l": 136.8000030517578, "t": 278.66558837890625, "r": 346.6770935058594, "b": 269.07110595703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"self_ref": "#/texts/1045", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 105, "bbox": {"l": 376.070556640625, "t": 37.0096435546875, "r": 523.6287841796875, "b": 27.95361328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1046", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 105, "bbox": {"l": 535.6676635742188, "t": 37.6810302734375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "89", "text": "89"}, {"self_ref": "#/texts/1047", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 106, "bbox": {"l": 64.0672378540039, "t": 37.62274169921875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "90", "text": "90"}, {"self_ref": "#/texts/1048", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 106, "bbox": {"l": 93.31163787841797, "t": 37.2567138671875, "r": 334.4214172363281, "b": 28.11328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1049", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 106, "bbox": {"l": 135.84625244140625, "t": 721.3875122070312, "r": 547.2645874023438, "b": 650.9519653320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 546]}], "orig": "Given a \"target\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the \"target\", and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table's permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "text": "Given a \"target\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the \"target\", and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table's permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read."}, {"self_ref": "#/texts/1050", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 106, "bbox": {"l": 136.212646484375, "t": 377.9114990234375, "r": 367.2479248046875, "b": 368.3596496582031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "Figure 6-5 RCAC effects on data movement on TARGET", "text": "Figure 6-5 RCAC effects on data movement on TARGET"}, {"self_ref": "#/texts/1051", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 106, "bbox": {"l": 64.19894409179688, "t": 349.5552673339844, "r": 490.12786865234375, "b": 336.4187316894531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "6.2.3 Effects when RCAC is defined on both source and target tables", "text": "6.2.3 Effects when RCAC is defined on both source and target tables", "level": 1}, {"self_ref": "#/texts/1052", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 106, "bbox": {"l": 136.13351440429688, "t": 323.2520751953125, "r": 541.6332397460938, "b": 301.178466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 123]}], "orig": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables.", "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables."}, {"self_ref": "#/texts/1053", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 106, "bbox": {"l": 136.3226776123047, "t": 289.47418212890625, "r": 332.0595703125, "b": 279.97625732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Example 6-3 INSERT INTO TARGET statement", "text": "Example 6-3 INSERT INTO TARGET statement"}, {"self_ref": "#/texts/1054", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 106, "bbox": {"l": 136.8000030517578, "t": 271.24200439453125, "r": 346.6770935058594, "b": 262.46722412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"self_ref": "#/texts/1055", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 106, "bbox": {"l": 135.995849609375, "t": 243.18621826171875, "r": 547.2467041015625, "b": 173.19976806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 473]}], "orig": "Given a \"source\" table and a \"target\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \"target\" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned.", "text": "Given a \"source\" table and a \"target\" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \"target\" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned."}, {"self_ref": "#/texts/1056", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 107, "bbox": {"l": 135.59042358398438, "t": 721.4307861328125, "r": 547.2501831054688, "b": 675.2281494140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 331]}], "orig": "Although the source rows where NAME <> 'CAIN' do satisfy the target table's permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data.", "text": "Although the source rows where NAME <> 'CAIN' do satisfy the target table's permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data."}, {"self_ref": "#/texts/1057", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 107, "bbox": {"l": 135.80810546875, "t": 404.73822021484375, "r": 425.63427734375, "b": 395.1744079589844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET"}, {"self_ref": "#/texts/1058", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 107, "bbox": {"l": 64.44702911376953, "t": 367.8985595703125, "r": 263.02801513671875, "b": 351.5459899902344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "6.3 RCAC effects on joins", "text": "6.3 RCAC effects on joins", "level": 1}, {"self_ref": "#/texts/1059", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 107, "bbox": {"l": 135.9691619873047, "t": 335.34326171875, "r": 546.7406005859375, "b": 301.17767333984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 258]}], "orig": "As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled.", "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled."}, {"self_ref": "#/texts/1060", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 107, "bbox": {"l": 142.4822540283203, "t": 283.4383239746094, "r": 541.3812255859375, "b": 261.12799072265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 167]}], "orig": "Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation.", "text": "Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation."}, {"self_ref": "#/texts/1061", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 107, "bbox": {"l": 376.1033630371094, "t": 37.02716064453125, "r": 523.6287841796875, "b": 27.9495849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1062", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 107, "bbox": {"l": 535.6055297851562, "t": 37.75299072265625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "91", "text": "91"}, {"self_ref": "#/texts/1063", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 108, "bbox": {"l": 64.16549682617188, "t": 37.60833740234375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "92", "text": "92"}, {"self_ref": "#/texts/1064", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 108, "bbox": {"l": 93.34784698486328, "t": 37.32550048828125, "r": 334.4214172363281, "b": 28.07244873046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1065", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 108, "bbox": {"l": 136.05355834960938, "t": 721.4932861328125, "r": 537.429931640625, "b": 699.1768188476562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 149]}], "orig": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see.", "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see."}, {"self_ref": "#/texts/1066", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 108, "bbox": {"l": 136.143310546875, "t": 472.460693359375, "r": 334.12286376953125, "b": 463.0318298339844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Figure 6-7 Set A and set B with row permissions", "text": "Figure 6-7 Set A and set B with row permissions"}, {"self_ref": "#/texts/1067", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 108, "bbox": {"l": 64.19314575195312, "t": 443.494873046875, "r": 166.59303283691406, "b": 430.45025634765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "6.3.1 Inner joins", "text": "6.3.1 Inner joins", "level": 1}, {"self_ref": "#/texts/1068", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 108, "bbox": {"l": 136.13674926757812, "t": 417.4061584472656, "r": 547.21875, "b": 394.8365783691406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 158]}], "orig": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8.", "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8."}, {"self_ref": "#/texts/1069", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 108, "bbox": {"l": 136.0211181640625, "t": 167.20330810546875, "r": 327.359130859375, "b": 157.64129638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "Figure 6-8 Inner join without RCAC permission", "text": "Figure 6-8 Inner join without RCAC permission"}, {"self_ref": "#/texts/1070", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 109, "bbox": {"l": 135.92884826660156, "t": 721.5256958007812, "r": 547.3219604492188, "b": 675.1539306640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 279]}], "orig": "Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9.", "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9."}, {"self_ref": "#/texts/1071", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 109, "bbox": {"l": 142.26942443847656, "t": 657.3994140625, "r": 537.6323852539062, "b": 622.7393798828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 207]}], "orig": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set.", "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"self_ref": "#/texts/1072", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 109, "bbox": {"l": 136.20010375976562, "t": 368.56854248046875, "r": 314.9713439941406, "b": 359.0969543457031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Figure 6-9 Inner join with RCAC permission", "text": "Figure 6-9 Inner join with RCAC permission"}, {"self_ref": "#/texts/1073", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 109, "bbox": {"l": 376.04339599609375, "t": 37.1475830078125, "r": 523.6287841796875, "b": 27.87664794921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1074", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 109, "bbox": {"l": 535.5010375976562, "t": 37.6861572265625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "93", "text": "93"}, {"self_ref": "#/texts/1075", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 110, "bbox": {"l": 64.229248046875, "t": 721.5722045898438, "r": 169.51583862304688, "b": 708.5062866210938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "6.3.2 Outer joins", "text": "6.3.2 Outer joins", "level": 1}, {"self_ref": "#/texts/1076", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 110, "bbox": {"l": 135.7491912841797, "t": 695.2848510742188, "r": 547.2286376953125, "b": 649.0192260742188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 360]}], "orig": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default.", "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default."}, {"self_ref": "#/texts/1077", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 110, "bbox": {"l": 136.09414672851562, "t": 416.6016845703125, "r": 334.3742370605469, "b": 407.05682373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "Figure 6-10 Outer join without RCAC permission", "text": "Figure 6-10 Outer join without RCAC permission"}, {"self_ref": "#/texts/1078", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 110, "bbox": {"l": 64.17929077148438, "t": 37.6510009765625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "94", "text": "94"}, {"self_ref": "#/texts/1079", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 110, "bbox": {"l": 93.3522720336914, "t": 37.3170166015625, "r": 334.4214172363281, "b": 28.08441162109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1080", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 111, "bbox": {"l": 135.9468994140625, "t": 721.3490600585938, "r": 535.2982177734375, "b": 687.0872802734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 218]}], "orig": "Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11.", "text": "Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11."}, {"self_ref": "#/texts/1081", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 111, "bbox": {"l": 142.19854736328125, "t": 669.730712890625, "r": 537.6323852539062, "b": 634.9480590820312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 207]}], "orig": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set.", "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"self_ref": "#/texts/1082", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 111, "bbox": {"l": 135.94920349121094, "t": 367.32806396484375, "r": 321.8890380859375, "b": 357.8431396484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "Figure 6-11 Outer join with RCAC permission", "text": "Figure 6-11 Outer join with RCAC permission"}, {"self_ref": "#/texts/1083", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 111, "bbox": {"l": 376.03192138671875, "t": 37.10693359375, "r": 523.6287841796875, "b": 27.9044189453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1084", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 111, "bbox": {"l": 535.5347900390625, "t": 37.7152099609375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "95", "text": "95"}, {"self_ref": "#/texts/1085", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 112, "bbox": {"l": 64.29151153564453, "t": 721.6157836914062, "r": 196.83258056640625, "b": 708.5499877929688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "6.3.3 Exception joins", "text": "6.3.3 Exception joins", "level": 1}, {"self_ref": "#/texts/1086", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 112, "bbox": {"l": 135.8982696533203, "t": 695.4368286132812, "r": 547.2914428710938, "b": 648.5689697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 297]}], "orig": "Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default.", "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default."}, {"self_ref": "#/texts/1087", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 112, "bbox": {"l": 135.93870544433594, "t": 394.6268310546875, "r": 351.4439392089844, "b": 385.1077575683594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "Figure 6-12 Exception join without RCAC permission", "text": "Figure 6-12 Exception join without RCAC permission"}, {"self_ref": "#/texts/1088", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 112, "bbox": {"l": 135.85084533691406, "t": 368.6776123046875, "r": 544.3384399414062, "b": 322.5378723144531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 343]}], "orig": "Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set.", "text": "Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"self_ref": "#/texts/1089", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 112, "bbox": {"l": 136.105224609375, "t": 70.03369140625, "r": 339.2431945800781, "b": 60.5418701171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Figure 6-13 Exception join with RCAC permission", "text": "Figure 6-13 Exception join with RCAC permission"}, {"self_ref": "#/texts/1090", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 112, "bbox": {"l": 64.0777587890625, "t": 37.68072509765625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "96", "text": "96"}, {"self_ref": "#/texts/1091", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 112, "bbox": {"l": 93.31871032714844, "t": 37.34893798828125, "r": 334.4214172363281, "b": 28.05419921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1092", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 113, "bbox": {"l": 64.39301300048828, "t": 722.0193481445312, "r": 469.4769287109375, "b": 705.6498413085938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "6.4 Monitoring, analyzing, and debugging with RCAC", "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "level": 1}, {"self_ref": "#/texts/1093", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 113, "bbox": {"l": 135.89646911621094, "t": 689.4528198242188, "r": 547.2247314453125, "b": 655.2986450195312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 228]}], "orig": "It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques.", "text": "It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques."}, {"self_ref": "#/texts/1094", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 113, "bbox": {"l": 135.66171264648438, "t": 643.3212890625, "r": 547.1968383789062, "b": 621.001708984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 163]}], "orig": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences:", "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences:"}, {"self_ref": "#/texts/1095", "parent": {"cref": "#/groups/137"}, "children": [], "label": "list_item", "prov": [{"page_no": 113, "bbox": {"l": 135.6549530029297, "t": 614.6976928710938, "r": 534.2526245117188, "b": 592.2996215820312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 105]}], "orig": "GLYPH The underlying data access plan can be different and more complex based on the rule text.", "text": "GLYPH The underlying data access plan can be different and more complex based on the rule text.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1096", "parent": {"cref": "#/groups/137"}, "children": [], "label": "list_item", "prov": [{"page_no": 113, "bbox": {"l": 135.5695037841797, "t": 585.3076171875, "r": 541.5543212890625, "b": 575.2600708007812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 104]}], "orig": "GLYPH The database results can be reduced or modified based on the rule text and user profile.", "text": "GLYPH The database results can be reduced or modified based on the rule text and user profile.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1097", "parent": {"cref": "#/groups/137"}, "children": [], "label": "list_item", "prov": [{"page_no": 113, "bbox": {"l": 135.70484924316406, "t": 568.443115234375, "r": 536.0465087890625, "b": 546.2804565429688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "GLYPH The run time of the request can be affected either positively or negatively based on the rule text.", "text": "GLYPH The run time of the request can be affected either positively or negatively based on the rule text.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1098", "parent": {"cref": "#/groups/137"}, "children": [], "label": "list_item", "prov": [{"page_no": 113, "bbox": {"l": 135.6377410888672, "t": 539.3546142578125, "r": 547.224609375, "b": 516.988525390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 119]}], "orig": "GLYPH For high-level language record level access, query plans must be considered, and not just program code.", "text": "GLYPH For high-level language record level access, query plans must be considered, and not just program code.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1099", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 113, "bbox": {"l": 135.7350311279297, "t": 505.2730712890625, "r": 547.2296752929688, "b": 447.2820129394531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 381]}], "orig": "During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different.", "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different."}, {"self_ref": "#/texts/1100", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 113, "bbox": {"l": 136.05958557128906, "t": 435.37286376953125, "r": 547.2786254882812, "b": 340.8155822753906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 693]}], "orig": "RCAC is designed and implemented to be transparent to the user. It is possible for user \"Mike\" and user \"Hernando\" to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user \"Mike\" and user \"Hernando\" have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query.", "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user \"Mike\" and user \"Hernando\" to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user \"Mike\" and user \"Hernando\" have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query."}, {"self_ref": "#/texts/1101", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 113, "bbox": {"l": 135.9143524169922, "t": 329.0833435058594, "r": 547.328369140625, "b": 271.234130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 414]}], "orig": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the \"variables\" the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different.", "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the \"variables\" the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different."}, {"self_ref": "#/texts/1102", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 113, "bbox": {"l": 135.94204711914062, "t": 259.26275634765625, "r": 547.2515869140625, "b": 201.28587341308594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 385]}], "orig": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of \"database engineer\" becomes even more important.", "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of \"database engineer\" becomes even more important."}, {"self_ref": "#/texts/1103", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 113, "bbox": {"l": 64.17730712890625, "t": 181.6142578125, "r": 325.99066162109375, "b": 168.0791015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "6.4.1 Query monitoring and analysis tools", "text": "6.4.1 Query monitoring and analysis tools", "level": 1}, {"self_ref": "#/texts/1104", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 113, "bbox": {"l": 136.0252227783203, "t": 155.4248046875, "r": 543.2037353515625, "b": 109.23886108398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 309]}], "orig": "When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor.", "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor."}, {"self_ref": "#/texts/1105", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 113, "bbox": {"l": 376.0887756347656, "t": 37.08258056640625, "r": 523.6287841796875, "b": 27.9049072265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1106", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 113, "bbox": {"l": 535.5423583984375, "t": 37.82244873046875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "97", "text": "97"}, {"self_ref": "#/texts/1107", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 114, "bbox": {"l": 136.44447326660156, "t": 721.3892822265625, "r": 394.5509033203125, "b": 710.84912109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "text": "Figure 6-14 shows how Visual Explain externalizes RCAC."}, {"self_ref": "#/texts/1108", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 114, "bbox": {"l": 64.1352310180664, "t": 440.0090026855469, "r": 301.8788146972656, "b": 430.5013122558594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "Figure 6-14 Visual Explain indicating that RCAC is applied", "text": "Figure 6-14 Visual Explain indicating that RCAC is applied"}, {"self_ref": "#/texts/1109", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 114, "bbox": {"l": 136.34783935546875, "t": 413.8916320800781, "r": 529.9888916015625, "b": 403.5003662109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 83]}], "orig": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary .", "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary ."}, {"self_ref": "#/texts/1110", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 114, "bbox": {"l": 64.04948425292969, "t": 247.37237548828125, "r": 222.99563598632812, "b": 237.9185791015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 6-15 SQL Performance Monitor", "text": "Figure 6-15 SQL Performance Monitor"}, {"self_ref": "#/texts/1111", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 114, "bbox": {"l": 136.6471710205078, "t": 221.43133544921875, "r": 524.7570190429688, "b": 198.71783447265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 100]}], "orig": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied.", "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied."}, {"self_ref": "#/texts/1112", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 114, "bbox": {"l": 64.28324127197266, "t": 103.998779296875, "r": 349.08843994140625, "b": 94.337890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied"}, {"self_ref": "#/texts/1113", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 114, "bbox": {"l": 64.10893249511719, "t": 37.59930419921875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "98", "text": "98"}, {"self_ref": "#/texts/1114", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 114, "bbox": {"l": 93.39404296875, "t": 37.30413818359375, "r": 334.4214172363281, "b": 28.0323486328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1115", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 115, "bbox": {"l": 136.21266174316406, "t": 721.2932739257812, "r": 514.509765625, "b": 699.2781372070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 92]}], "orig": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized.", "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized."}, {"self_ref": "#/texts/1116", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 115, "bbox": {"l": 64.27816772460938, "t": 571.9398193359375, "r": 349.6502685546875, "b": 562.5570068359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC"}, {"self_ref": "#/texts/1117", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 115, "bbox": {"l": 135.8977813720703, "t": 546.065673828125, "r": 547.1959838867188, "b": 463.65936279296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 613]}], "orig": "When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer's policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "text": "When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer's policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:"}, {"self_ref": "#/texts/1118", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 115, "bbox": {"l": 136.05642700195312, "t": 456.6171875, "r": 321.6575622558594, "b": 445.9201965332031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'"}, {"self_ref": "#/texts/1119", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 115, "bbox": {"l": 135.81124877929688, "t": 434.6428527832031, "r": 520.1124877929688, "b": 400.6603698730469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 195]}], "orig": "The literal value of '123-45-7890' is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "text": "The literal value of '123-45-7890' is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure."}, {"self_ref": "#/texts/1120", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 115, "bbox": {"l": 135.4740447998047, "t": 388.69134521484375, "r": 547.264404296875, "b": 354.605712890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 217]}], "orig": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain.", "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain."}, {"self_ref": "#/texts/1121", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 115, "bbox": {"l": 64.00121307373047, "t": 334.622802734375, "r": 184.5458984375, "b": 322.03729248046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "6.4.2 Index advisor", "text": "6.4.2 Index advisor", "level": 1}, {"self_ref": "#/texts/1122", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 115, "bbox": {"l": 135.94943237304688, "t": 308.490966796875, "r": 544.1452026367188, "b": 274.29296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point.", "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point."}, {"self_ref": "#/texts/1123", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 115, "bbox": {"l": 135.8879852294922, "t": 262.5904541015625, "r": 543.59814453125, "b": 204.172119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 434]}], "orig": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised.", "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised."}, {"self_ref": "#/texts/1124", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 115, "bbox": {"l": 376.0592956542969, "t": 37.01708984375, "r": 523.6287841796875, "b": 27.951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1125", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 115, "bbox": {"l": 535.5274047851562, "t": 37.70538330078125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "99", "text": "99"}, {"self_ref": "#/texts/1126", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 116, "bbox": {"l": 136.3820037841797, "t": 721.3514404296875, "r": 529.2249145507812, "b": 699.0840454101562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "For example, the query that is shown in Figure 6-18 produces index advice for the user's predicate and the RCAC predicate.", "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user's predicate and the RCAC predicate."}, {"self_ref": "#/texts/1127", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 116, "bbox": {"l": 136.15460205078125, "t": 410.5371398925781, "r": 286.3040466308594, "b": 401.260009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "Figure 6-18 Index advice and RCAC", "text": "Figure 6-18 Index advice and RCAC"}, {"self_ref": "#/texts/1128", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 116, "bbox": {"l": 136.26499938964844, "t": 384.9390869140625, "r": 530.6282958984375, "b": 362.8584899902344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 116]}], "orig": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text.", "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text."}, {"self_ref": "#/texts/1129", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 116, "bbox": {"l": 64.29851531982422, "t": 234.64019775390625, "r": 271.84735107421875, "b": 225.1319580078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Figure 6-19 Index advisor based on the RCAC rule", "text": "Figure 6-19 Index advisor based on the RCAC rule"}, {"self_ref": "#/texts/1130", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 116, "bbox": {"l": 136.3258819580078, "t": 208.79052734375, "r": 545.009521484375, "b": 186.391845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 116]}], "orig": "For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at:", "text": "For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at:"}, {"self_ref": "#/texts/1131", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 116, "bbox": {"l": 136.258544921875, "t": 179.91497802734375, "r": 546.534423828125, "b": 157.24700927734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 108]}], "orig": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies", "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies"}, {"self_ref": "#/texts/1132", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 116, "bbox": {"l": 64.1768798828125, "t": 138.27239990234375, "r": 251.73373413085938, "b": 124.9212646484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "6.4.3 Metadata using catalogs", "text": "6.4.3 Metadata using catalogs", "level": 1}, {"self_ref": "#/texts/1133", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 116, "bbox": {"l": 135.8922119140625, "t": 112.05975341796875, "r": 519.360595703125, "b": 65.63323974609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 281]}], "orig": "To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively.", "text": "To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively."}, {"self_ref": "#/texts/1134", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 116, "bbox": {"l": 64.36641693115234, "t": 37.702392578125, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "100", "text": "100"}, {"self_ref": "#/texts/1135", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 116, "bbox": {"l": 98.54092407226562, "t": 37.3668212890625, "r": 339.8568115234375, "b": 27.9837646484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1136", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 117, "bbox": {"l": 136.48927307128906, "t": 721.3510131835938, "r": 409.46722412109375, "b": 710.9666137695312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "level": 1}, {"self_ref": "#/texts/1137", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 117, "bbox": {"l": 64.26973724365234, "t": 546.5089111328125, "r": 197.03440856933594, "b": 537.1303100585938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Figure 6-20 RCAC and catalogs", "text": "Figure 6-20 RCAC and catalogs"}, {"self_ref": "#/texts/1138", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 117, "bbox": {"l": 136.15829467773438, "t": 520.781005859375, "r": 430.36700439453125, "b": 510.442138671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "The SYSCONTROLS catalog view contains the following columns:", "text": "The SYSCONTROLS catalog view contains the following columns:"}, {"self_ref": "#/texts/1139", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.715576171875, "t": 503.4774169921875, "r": 229.52528381347656, "b": 493.5987243652344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH COLUMN_NAME", "text": "GLYPH COLUMN_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1140", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.78355407714844, "t": 491.41107177734375, "r": 231.54153442382812, "b": 481.5989074707031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "GLYPH CONTROL_TYPE", "text": "GLYPH CONTROL_TYPE", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1141", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.8020477294922, "t": 479.5697326660156, "r": 219.97596740722656, "b": 469.5990905761719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH CREATE_TIME", "text": "GLYPH CREATE_TIME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1142", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.65097045898438, "t": 467.5733947753906, "r": 190.9705047607422, "b": 457.5992736816406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 22]}], "orig": "GLYPH ENABLE", "text": "GLYPH ENABLE", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1143", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.5606231689453, "t": 455.9203186035156, "r": 207.5435791015625, "b": 445.5994567871094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "GLYPH ENFORCED", "text": "GLYPH ENFORCED", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1144", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.4138946533203, "t": 443.9335632324219, "r": 220.03372192382812, "b": 433.5996398925781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "GLYPH ASP_NUMBER", "text": "GLYPH ASP_NUMBER", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1145", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.53013610839844, "t": 431.7314147949219, "r": 193.41262817382812, "b": 421.5998229980469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "GLYPH IMPLICIT", "text": "GLYPH IMPLICIT", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1146", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.5832061767578, "t": 419.8447570800781, "r": 182.29428100585938, "b": 409.6000061035156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "GLYPH LABEL", "text": "GLYPH LABEL", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1147", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.9365997314453, "t": 407.84820556640625, "r": 226.72982788085938, "b": 397.6001892089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "GLYPH LAST_ALTERED", "text": "GLYPH LAST_ALTERED", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1148", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.55462646484375, "t": 396.1351623535156, "r": 236.96395874023438, "b": 385.6003723144531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "GLYPH LONG_COMMENT", "text": "GLYPH LONG_COMMENT", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1149", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.59799194335938, "t": 383.8674621582031, "r": 213.861328125, "b": 373.6005554199219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "GLYPH RCAC_NAME", "text": "GLYPH RCAC_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1150", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.62445068359375, "t": 372.0160217285156, "r": 223.28578186035156, "b": 361.6007385253906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "GLYPH RCAC_OWNER", "text": "GLYPH RCAC_OWNER", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1151", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.59918212890625, "t": 360.0481262207031, "r": 227.91741943359375, "b": 349.6009216308594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH RCAC_SCHEMA", "text": "GLYPH RCAC_SCHEMA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1152", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.649658203125, "t": 347.80303955078125, "r": 202.9622802734375, "b": 337.6011047363281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "GLYPH RULETEXT", "text": "GLYPH RULETEXT", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1153", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.53004455566406, "t": 335.63287353515625, "r": 275.5697021484375, "b": 325.6012878417969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "GLYPH SYSTEM_COLUMN_NAME", "text": "GLYPH SYSTEM_COLUMN_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1154", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.6468963623047, "t": 324.02764892578125, "r": 263.12493896484375, "b": 313.6014709472656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "GLYPH SYSTEM_TABLE_NAME", "text": "GLYPH SYSTEM_TABLE_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1155", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.67005920410156, "t": 311.7246398925781, "r": 276.916015625, "b": 301.6016540527344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "GLYPH SYSTEM_TABLE_SCHEMA", "text": "GLYPH SYSTEM_TABLE_SCHEMA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1156", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.68890380859375, "t": 299.7500915527344, "r": 216.28732299804688, "b": 289.6018371582031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "GLYPH TABLE_NAME", "text": "GLYPH TABLE_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1157", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.64125061035156, "t": 287.85296630859375, "r": 230.32113647460938, "b": 277.6020202636719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "GLYPH TABLE_SCHEMA", "text": "GLYPH TABLE_SCHEMA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1158", "parent": {"cref": "#/groups/138"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.58006286621094, "t": 275.72454833984375, "r": 235.0215301513672, "b": 265.6022033691406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "GLYPH TBCORRELATION", "text": "GLYPH TBCORRELATION", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1159", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 117, "bbox": {"l": 136.2348175048828, "t": 253.50799560546875, "r": 451.0119934082031, "b": 243.0057373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "The SYSCONTROLSDEP catalog view contains the following columns:", "text": "The SYSCONTROLSDEP catalog view contains the following columns:"}, {"self_ref": "#/texts/1160", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.6955108642578, "t": 237.07763671875, "r": 229.20022583007812, "b": 226.60281372070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH COLUMN_NAME", "text": "GLYPH COLUMN_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1161", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.7337188720703, "t": 224.7735595703125, "r": 231.54153442382812, "b": 214.60301208496094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "GLYPH CONTROL_TYPE", "text": "GLYPH CONTROL_TYPE", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1162", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.7036590576172, "t": 212.99359130859375, "r": 223.13241577148438, "b": 202.60321044921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH IASP_NUMBER", "text": "GLYPH IASP_NUMBER", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1163", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.64175415039062, "t": 201.30029296875, "r": 225.03065490722656, "b": 190.60340881347656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH OBJECT_NAME", "text": "GLYPH OBJECT_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1164", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.65492248535156, "t": 189.1546630859375, "r": 239.2605743408203, "b": 178.60360717773438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "GLYPH OBJECT_SCHEMA", "text": "GLYPH OBJECT_SCHEMA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1165", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.42955017089844, "t": 177.33233642578125, "r": 222.27175903320312, "b": 166.6038055419922, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH OBJECT_TYPE", "text": "GLYPH OBJECT_TYPE", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1166", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.63658142089844, "t": 165.0909423828125, "r": 241.48854064941406, "b": 154.60400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "GLYPH PARM_SIGNATURE", "text": "GLYPH PARM_SIGNATURE", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1167", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.70877075195312, "t": 152.955078125, "r": 213.68124389648438, "b": 142.6042022705078, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "GLYPH RCAC_NAME", "text": "GLYPH RCAC_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1168", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.70849609375, "t": 140.8154296875, "r": 227.56272888183594, "b": 130.60440063476562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "GLYPH RCAC_SCHEMA", "text": "GLYPH RCAC_SCHEMA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1169", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.59637451171875, "t": 129.17388916015625, "r": 262.728271484375, "b": 118.6045913696289, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "GLYPH SYSTEM_TABLE_NAME", "text": "GLYPH SYSTEM_TABLE_NAME", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1170", "parent": {"cref": "#/groups/139"}, "children": [], "label": "list_item", "prov": [{"page_no": 117, "bbox": {"l": 135.5303497314453, "t": 116.96820068359375, "r": 276.7511291503906, "b": 106.60478210449219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "GLYPH SYSTEM_TABLE_SCHEMA", "text": "GLYPH SYSTEM_TABLE_SCHEMA", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1171", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 117, "bbox": {"l": 136.2892303466797, "t": 94.78704833984375, "r": 495.9486389160156, "b": 84.58521270751953, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 81]}], "orig": "For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at:", "text": "For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at:"}, {"self_ref": "#/texts/1172", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 117, "bbox": {"l": 136.3297119140625, "t": 78.0645751953125, "r": 546.534423828125, "b": 55.894439697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 86]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en"}, {"self_ref": "#/texts/1173", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 117, "bbox": {"l": 370.6695251464844, "t": 37.12347412109375, "r": 517.9691772460938, "b": 28.1142578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1174", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 117, "bbox": {"l": 530.2025146484375, "t": 37.766845703125, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "101", "text": "101"}, {"self_ref": "#/texts/1175", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 118, "bbox": {"l": 64.48343658447266, "t": 722.143798828125, "r": 524.18310546875, "b": 687.0557861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "6.5 Views, materialized query tables, and query rewrite with RCAC", "text": "6.5 Views, materialized query tables, and query rewrite with RCAC", "level": 1}, {"self_ref": "#/texts/1176", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 118, "bbox": {"l": 135.83413696289062, "t": 670.753173828125, "r": 538.62841796875, "b": 648.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 133]}], "orig": "This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table.", "text": "This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table."}, {"self_ref": "#/texts/1177", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 118, "bbox": {"l": 64.00408935546875, "t": 628.84814453125, "r": 137.59872436523438, "b": 615.67724609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "6.5.1 Views", "text": "6.5.1 Views", "level": 1}, {"self_ref": "#/texts/1178", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 118, "bbox": {"l": 135.95098876953125, "t": 602.7352294921875, "r": 547.2675170898438, "b": 544.0421142578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 453]}], "orig": "Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query.", "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query."}, {"self_ref": "#/texts/1179", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 118, "bbox": {"l": 136.1767120361328, "t": 259.17498779296875, "r": 311.7160949707031, "b": 249.74176025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Figure 6-21 View definition and user query", "text": "Figure 6-21 View definition and user query"}, {"self_ref": "#/texts/1180", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 118, "bbox": {"l": 64.45819091796875, "t": 37.70367431640625, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "102", "text": "102"}, {"self_ref": "#/texts/1181", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 118, "bbox": {"l": 98.59468078613281, "t": 37.39764404296875, "r": 339.92059326171875, "b": 27.95623779296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1182", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 119, "bbox": {"l": 135.9568634033203, "t": 721.3858642578125, "r": 519.4752807617188, "b": 698.8374633789062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22.", "text": "What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22."}, {"self_ref": "#/texts/1183", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 119, "bbox": {"l": 135.89744567871094, "t": 401.9805908203125, "r": 291.39215087890625, "b": 392.4318542480469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 6-22 Query rewrite with RCAC", "text": "Figure 6-22 Query rewrite with RCAC"}, {"self_ref": "#/texts/1184", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 119, "bbox": {"l": 64.23944091796875, "t": 373.4521484375, "r": 255.48699951171875, "b": 360.3772888183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "6.5.2 Materialized query tables", "text": "6.5.2 Materialized query tables", "level": 1}, {"self_ref": "#/texts/1185", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 119, "bbox": {"l": 135.8983154296875, "t": 347.2080078125, "r": 547.2784423828125, "b": 312.9986572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 271]}], "orig": "When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data.", "text": "When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data."}, {"self_ref": "#/texts/1186", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 119, "bbox": {"l": 136.05838012695312, "t": 301.335205078125, "r": 547.2845458984375, "b": 266.9794616699219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 242]}], "orig": "Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried.", "text": "Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried."}, {"self_ref": "#/texts/1187", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 119, "bbox": {"l": 135.96612548828125, "t": 255.226806640625, "r": 547.2724609375, "b": 220.9602813720703, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 266]}], "orig": "When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks.", "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks."}, {"self_ref": "#/texts/1188", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 119, "bbox": {"l": 136.03353881835938, "t": 209.17041015625, "r": 342.15032958984375, "b": 199.00047302246094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "The following example illustrates this scenario:", "text": "The following example illustrates this scenario:"}, {"self_ref": "#/texts/1189", "parent": {"cref": "#/groups/140"}, "children": [], "label": "list_item", "prov": [{"page_no": 119, "bbox": {"l": 136.65509033203125, "t": 191.9061279296875, "r": 270.4134826660156, "b": 181.96090698242188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "1. Create schema and tables:", "text": "1. Create schema and tables:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1190", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 119, "bbox": {"l": 151.20018005371094, "t": 174.04469299316406, "r": 547.2555541992188, "b": 117.27072143554688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 248]}], "orig": "CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "text": "CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);"}, {"self_ref": "#/texts/1191", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 119, "bbox": {"l": 370.6492004394531, "t": 37.12176513671875, "r": 517.9691772460938, "b": 28.08099365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1192", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 119, "bbox": {"l": 530.1799926757812, "t": 37.73895263671875, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "103", "text": "103"}, {"self_ref": "#/texts/1193", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 120, "bbox": {"l": 64.42345428466797, "t": 37.64996337890625, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "104", "text": "104"}, {"self_ref": "#/texts/1194", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 120, "bbox": {"l": 98.57719421386719, "t": 37.33319091796875, "r": 339.839599609375, "b": 27.90020751953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1195", "parent": {"cref": "#/groups/141"}, "children": [], "label": "list_item", "prov": [{"page_no": 120, "bbox": {"l": 135.87754821777344, "t": 721.4038696289062, "r": 545.8660888671875, "b": 699.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 99]}], "orig": "2. Create a row permission that allows the employees to see only rows from the region they work in:", "text": "2. Create a row permission that allows the employees to see only rows from the region they work in:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1196", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 120, "bbox": {"l": 149.48439025878906, "t": 693.0859985351562, "r": 547.1957397460938, "b": 598.5888061523438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 281]}], "orig": "/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE;", "text": "/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE;"}, {"self_ref": "#/texts/1197", "parent": {"cref": "#/groups/142"}, "children": [], "label": "list_item", "prov": [{"page_no": 120, "bbox": {"l": 136.09523010253906, "t": 591.50830078125, "r": 362.0214538574219, "b": 581.0382690429688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "3. Create an MQT to summarize sales by location:", "text": "3. Create an MQT to summarize sales by location:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1198", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 149.7567138671875, "t": 574.7091064453125, "r": 545.9945678710938, "b": 468.5709228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 327]}], "orig": "-- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;", "text": "-- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"self_ref": "#/texts/1199", "parent": {"cref": "#/groups/143"}, "children": [], "label": "list_item", "prov": [{"page_no": 120, "bbox": {"l": 135.95851135253906, "t": 461.5218505859375, "r": 354.3462829589844, "b": 450.9034118652344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "4. Populate the MQT (permission is not applied):", "text": "4. Populate the MQT (permission is not applied):", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1200", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 150.7456512451172, "t": 443.83050537109375, "r": 416.03656005859375, "b": 421.72467041015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 93]}], "orig": "/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT", "text": "/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT"}, {"self_ref": "#/texts/1201", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 150.36888122558594, "t": 415.4218444824219, "r": 547.1997680664062, "b": 392.90313720703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 166]}], "orig": "The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission:"}, {"self_ref": "#/texts/1202", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 150.5345001220703, "t": 386.6250915527344, "r": 401.0367736816406, "b": 364.5924987792969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;", "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}, {"self_ref": "#/texts/1203", "parent": {"cref": "#/groups/144"}, "children": [], "label": "list_item", "prov": [{"page_no": 120, "bbox": {"l": 136.50941467285156, "t": 357.568115234375, "r": 385.903564453125, "b": 347.0646057128906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "5. Create an MQT to summarize by region and location:", "text": "5. Create an MQT to summarize by region and location:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1204", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 150.02435302734375, "t": 340.8066711425781, "r": 500.9953308105469, "b": 246.57443237304688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 273]}], "orig": "-- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;", "text": "-- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"self_ref": "#/texts/1205", "parent": {"cref": "#/groups/145"}, "children": [], "label": "list_item", "prov": [{"page_no": 120, "bbox": {"l": 136.33966064453125, "t": 239.47381591796875, "r": 452.1078186035156, "b": 228.83648681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "6. Populate the Region_location_Sales_MQT (permission not applied):", "text": "6. Populate the Region_location_Sales_MQT (permission not applied):", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1206", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 150.35263061523438, "t": 222.1837158203125, "r": 535.9747924804688, "b": 199.35321044921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT", "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT"}, {"self_ref": "#/texts/1207", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 150.33642578125, "t": 193.4903564453125, "r": 502.06903076171875, "b": 171.2867889404297, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 140]}], "orig": "The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission:", "text": "The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission:"}, {"self_ref": "#/texts/1208", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 120, "bbox": {"l": 150.63597106933594, "t": 163.86737060546875, "r": 401.0367736816406, "b": 142.13360595703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;", "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}, {"self_ref": "#/texts/1209", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 121, "bbox": {"l": 135.60304260253906, "t": 721.2241821289062, "r": 376.0711669921875, "b": 711.0797729492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "This example has the following additional implications:", "text": "This example has the following additional implications:"}, {"self_ref": "#/texts/1210", "parent": {"cref": "#/groups/146"}, "children": [], "label": "list_item", "prov": [{"page_no": 121, "bbox": {"l": 135.650634765625, "t": 704.3900756835938, "r": 547.2718505859375, "b": 670.2985229492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 199]}], "orig": "GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables.", "text": "GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1211", "parent": {"cref": "#/groups/146"}, "children": [], "label": "list_item", "prov": [{"page_no": 121, "bbox": {"l": 135.53536987304688, "t": 663.3336791992188, "r": 547.3106079101562, "b": 616.5928955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 300]}], "orig": "GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results.", "text": "GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1212", "parent": {"cref": "#/groups/146"}, "children": [], "label": "list_item", "prov": [{"page_no": 121, "bbox": {"l": 135.59909057617188, "t": 610.4366455078125, "r": 539.1951904296875, "b": 588.2799072265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 126]}], "orig": "GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT.", "text": "GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1213", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 121, "bbox": {"l": 64.1431655883789, "t": 568.83935546875, "r": 184.48561096191406, "b": 555.5803833007812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "6.5.3 Query rewrite", "text": "6.5.3 Query rewrite", "level": 1}, {"self_ref": "#/texts/1214", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 121, "bbox": {"l": 136.05111694335938, "t": 542.5366821289062, "r": 527.1223754882812, "b": 520.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 110]}], "orig": "Query rewrite is a technique that the optimizer can use to change the original request to improve performance.", "text": "Query rewrite is a technique that the optimizer can use to change the original request to improve performance."}, {"self_ref": "#/texts/1215", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 121, "bbox": {"l": 135.7935791015625, "t": 508.524169921875, "r": 547.158935546875, "b": 450.2796325683594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 401]}], "orig": "For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1.", "text": "For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1."}, {"self_ref": "#/texts/1216", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 121, "bbox": {"l": 135.94505310058594, "t": 437.9142761230469, "r": 547.3839721679688, "b": 403.91461181640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 197]}], "orig": "As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC.", "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC."}, {"self_ref": "#/texts/1217", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 121, "bbox": {"l": 64.35859680175781, "t": 376.3916931152344, "r": 436.9425048828125, "b": 360.5837097167969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "6.6 RCAC effects on performance and scalability", "text": "6.6 RCAC effects on performance and scalability", "level": 1}, {"self_ref": "#/texts/1218", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 121, "bbox": {"l": 135.86106872558594, "t": 344.4602966308594, "r": 547.3291625976562, "b": 249.62506103515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 696]}], "orig": "As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a \"query\", and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user's query, much like a query referencing a view.", "text": "As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a \"query\", and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user's query, much like a query referencing a view."}, {"self_ref": "#/texts/1219", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 121, "bbox": {"l": 135.9717254638672, "t": 238.62030029296875, "r": 547.2525634765625, "b": 180.28079223632812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 455]}], "orig": "For native record level access, this RCAC \"query\" is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user's permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned.", "text": "For native record level access, this RCAC \"query\" is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user's permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned."}, {"self_ref": "#/texts/1220", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 121, "bbox": {"l": 135.7317657470703, "t": 167.69171142578125, "r": 547.2844848632812, "b": 74.0277099609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 698]}], "orig": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original \"random read\" request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \"not found\" if the user is not entitled to any of the records.", "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original \"random read\" request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \"not found\" if the user is not entitled to any of the records."}, {"self_ref": "#/texts/1221", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 121, "bbox": {"l": 370.60284423828125, "t": 37.1180419921875, "r": 517.9691772460938, "b": 28.1068115234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1222", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 121, "bbox": {"l": 530.1432495117188, "t": 37.7501220703125, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "105", "text": "105"}, {"self_ref": "#/texts/1223", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 122, "bbox": {"l": 64.41461944580078, "t": 37.71966552734375, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "106", "text": "106"}, {"self_ref": "#/texts/1224", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 122, "bbox": {"l": 98.62214660644531, "t": 37.41748046875, "r": 339.8680725097656, "b": 27.96990966796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1225", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 122, "bbox": {"l": 135.8849639892578, "t": 721.650146484375, "r": 543.5155029296875, "b": 675.0093994140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the \"next record\" in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23.", "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the \"next record\" in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23."}, {"self_ref": "#/texts/1226", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 122, "bbox": {"l": 136.106201171875, "t": 388.0724182128906, "r": 333.33013916015625, "b": 378.3799743652344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "Figure 6-23 Native record access with no RCAC", "text": "Figure 6-23 Native record access with no RCAC"}, {"self_ref": "#/texts/1227", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 123, "bbox": {"l": 136.06326293945312, "t": 721.341064453125, "r": 547.295654296875, "b": 675.2687377929688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 305]}], "orig": "Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24.", "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24."}, {"self_ref": "#/texts/1228", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 123, "bbox": {"l": 135.92271423339844, "t": 384.0206298828125, "r": 341.2294616699219, "b": 374.3691101074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Figure 6-24 Native record level access with RCAC", "text": "Figure 6-24 Native record level access with RCAC"}, {"self_ref": "#/texts/1229", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 123, "bbox": {"l": 135.81785583496094, "t": 358.041748046875, "r": 525.8615112304688, "b": 335.78143310546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 134]}], "orig": "After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended.", "text": "After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended."}, {"self_ref": "#/texts/1230", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 123, "bbox": {"l": 64.4524917602539, "t": 308.724853515625, "r": 510.04888916015625, "b": 291.993896484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "6.7 Exclusive lock to implement RCAC (availability issues)", "text": "6.7 Exclusive lock to implement RCAC (availability issues)", "level": 1}, {"self_ref": "#/texts/1231", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 123, "bbox": {"l": 135.74249267578125, "t": 275.99029541015625, "r": 547.2496948242188, "b": 242.07867431640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 205]}], "orig": "When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC.", "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC."}, {"self_ref": "#/texts/1232", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 123, "bbox": {"l": 136.18580627441406, "t": 230.0118408203125, "r": 283.20501708984375, "b": 219.714111328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "Consider the following scenarios:", "text": "Consider the following scenarios:"}, {"self_ref": "#/texts/1233", "parent": {"cref": "#/groups/147"}, "children": [], "label": "list_item", "prov": [{"page_no": 123, "bbox": {"l": 135.5818634033203, "t": 213.38800048828125, "r": 464.85845947265625, "b": 203.0792999267578, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 84]}], "orig": "GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table:", "text": "GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1234", "parent": {"cref": "#/groups/147"}, "children": [], "label": "list_item", "prov": [{"page_no": 123, "bbox": {"l": 151.1683349609375, "t": 196.04046630859375, "r": 547.4009399414062, "b": 174.03993225097656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 106]}], "orig": "-Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data.", "text": "-Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1235", "parent": {"cref": "#/groups/147"}, "children": [], "label": "list_item", "prov": [{"page_no": 123, "bbox": {"l": 151.33261108398438, "t": 167.51373291015625, "r": 546.0185546875, "b": 145.06031799316406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 126]}], "orig": "-Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data.", "text": "-Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1236", "parent": {"cref": "#/groups/147"}, "children": [], "label": "list_item", "prov": [{"page_no": 123, "bbox": {"l": 151.21334838867188, "t": 138.00274658203125, "r": 546.8192749023438, "b": 127.65850830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 84]}], "orig": "-Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "text": "-Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1237", "parent": {"cref": "#/groups/147"}, "children": [], "label": "list_item", "prov": [{"page_no": 123, "bbox": {"l": 151.15476989746094, "t": 121.0460205078125, "r": 547.1649169921875, "b": 87.04132080078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 196]}], "orig": "-Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data.", "text": "-Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1238", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 123, "bbox": {"l": 150.30223083496094, "t": 80.0487060546875, "r": 545.1102905273438, "b": 57.88128662109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 134]}], "orig": "The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table.", "text": "The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table."}, {"self_ref": "#/texts/1239", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 123, "bbox": {"l": 370.56109619140625, "t": 37.179931640625, "r": 517.9691772460938, "b": 28.08575439453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1240", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 123, "bbox": {"l": 530.158935546875, "t": 37.82098388671875, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "107", "text": "107"}, {"self_ref": "#/texts/1241", "parent": {"cref": "#/groups/148"}, "children": [], "label": "list_item", "prov": [{"page_no": 124, "bbox": {"l": 135.47494506835938, "t": 721.363037109375, "r": 547.2257080078125, "b": 699.2672119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 171]}], "orig": "GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table.", "text": "GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1242", "parent": {"cref": "#/groups/148"}, "children": [], "label": "list_item", "prov": [{"page_no": 124, "bbox": {"l": 135.47486877441406, "t": 692.6351318359375, "r": 547.350341796875, "b": 646.2472534179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 375]}], "orig": "GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message:", "text": "GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1243", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 150.78724670410156, "t": 639.2891845703125, "r": 451.01605224609375, "b": 629.1058959960938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "SQ20471] INSERT or UPDATE does not satisfy row permissions.", "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions."}, {"self_ref": "#/texts/1244", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 150.4237060546875, "t": 622.5931396484375, "r": 532.7249145507812, "b": 588.2802734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 239]}], "orig": "To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission.", "text": "To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission."}, {"self_ref": "#/texts/1245", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 124, "bbox": {"l": 64.3337173461914, "t": 561.4805908203125, "r": 380.354736328125, "b": 545.0363159179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "6.8 Avoiding propagation of masked data", "text": "6.8 Avoiding propagation of masked data", "level": 1}, {"self_ref": "#/texts/1246", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 135.83189392089844, "t": 527.9580078125, "r": 547.30224609375, "b": 494.2587890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 275]}], "orig": "Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control.", "text": "Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control."}, {"self_ref": "#/texts/1247", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 136.41940307617188, "t": 482.62445068359375, "r": 547.1968383789062, "b": 460.2991638183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 178]}], "orig": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error:"}, {"self_ref": "#/texts/1248", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 136.7989959716797, "t": 452.32318115234375, "r": 331.6763000488281, "b": 443.54840087890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2"}, {"self_ref": "#/texts/1249", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 135.9666290283203, "t": 431.26483154296875, "r": 533.7767333984375, "b": 409.0923767089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 152]}], "orig": "The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint.", "text": "The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint."}, {"self_ref": "#/texts/1250", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 135.8269805908203, "t": 397.2376708984375, "r": 532.6522827148438, "b": 374.9996337890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 114]}], "orig": "There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger.", "text": "There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger."}, {"self_ref": "#/texts/1251", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 124, "bbox": {"l": 64.09215545654297, "t": 355.58514404296875, "r": 260.1020202636719, "b": 342.6772766113281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "6.8.1 Check constraint solution", "text": "6.8.1 Check constraint solution", "level": 1}, {"self_ref": "#/texts/1252", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 136.16067504882812, "t": 329.11370849609375, "r": 416.498779296875, "b": 319.16241455078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 64]}], "orig": "One way to prevent this problem is to define a check constraint.", "text": "One way to prevent this problem is to define a check constraint."}, {"self_ref": "#/texts/1253", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 135.7001190185547, "t": 307.400634765625, "r": 547.2566528320312, "b": 249.27944946289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 382]}], "orig": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements.", "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements."}, {"self_ref": "#/texts/1254", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 124, "bbox": {"l": 136.0422821044922, "t": 237.33502197265625, "r": 547.2803955078125, "b": 203.26028442382812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 217]}], "orig": "In the Example 6-4, the mask is defined to return a value of 'XXX-XX-nnnn' for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value.", "text": "In the Example 6-4, the mask is defined to return a value of 'XXX-XX-nnnn' for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value."}, {"self_ref": "#/texts/1255", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 124, "bbox": {"l": 64.23851013183594, "t": 191.49853515625, "r": 277.07000732421875, "b": 181.71978759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "Example 6-4 Check constraint to avoid masked data", "text": "Example 6-4 Check constraint to avoid masked data"}, {"self_ref": "#/texts/1256", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 124, "bbox": {"l": 64.16464233398438, "t": 173.89044189453125, "r": 414.59515380859375, "b": 55.4718017578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 297]}], "orig": "CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn", "text": "CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn"}, {"self_ref": "#/texts/1257", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 124, "bbox": {"l": 64.37716674804688, "t": 37.57183837890625, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "108", "text": "108"}, {"self_ref": "#/texts/1258", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 124, "bbox": {"l": 98.70913696289062, "t": 37.4007568359375, "r": 339.819580078125, "b": 27.999267578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1259", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 125, "bbox": {"l": 63.44700622558594, "t": 721.5032958984375, "r": 546.8219604492188, "b": 600.7581176757812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 418]}], "orig": "ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value.", "text": "ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value."}, {"self_ref": "#/texts/1260", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 125, "bbox": {"l": 64.23657989501953, "t": 576.9061279296875, "r": 240.5440673828125, "b": 563.4954223632812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "6.8.2 Before trigger solution", "text": "6.8.2 Before trigger solution", "level": 1}, {"self_ref": "#/texts/1261", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 125, "bbox": {"l": 136.24661254882812, "t": 550.7080688476562, "r": 547.3193359375, "b": 528.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 171]}], "orig": "The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5.", "text": "The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5."}, {"self_ref": "#/texts/1262", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 125, "bbox": {"l": 136.40687561035156, "t": 515.987548828125, "r": 336.7406311035156, "b": 506.462158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "Example 6-5 Before trigger to avoid masked data", "text": "Example 6-5 Before trigger to avoid masked data"}, {"self_ref": "#/texts/1263", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 125, "bbox": {"l": 135.9194793701172, "t": 500.95086669921875, "r": 506.87237548828125, "b": 379.7377624511719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 298]}], "orig": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END", "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"self_ref": "#/texts/1264", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 125, "bbox": {"l": 64.4358139038086, "t": 346.6530456542969, "r": 360.91705322265625, "b": 329.9898681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "6.9 Triggers and functions (SECURED)", "text": "6.9 Triggers and functions (SECURED)", "level": 1}, {"self_ref": "#/texts/1265", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 125, "bbox": {"l": 135.90432739257812, "t": 314.7923278808594, "r": 547.2467651367188, "b": 255.75531005859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 409]}], "orig": "There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see.", "text": "There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see."}, {"self_ref": "#/texts/1266", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 125, "bbox": {"l": 64.1463851928711, "t": 236.09356689453125, "r": 151.61126708984375, "b": 222.77587890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "6.9.1 Triggers", "text": "6.9.1 Triggers", "level": 1}, {"self_ref": "#/texts/1267", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 125, "bbox": {"l": 135.57107543945312, "t": 209.91900634765625, "r": 547.2885131835938, "b": 164.00341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 318]}], "orig": "Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission.", "text": "Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission."}, {"self_ref": "#/texts/1268", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 125, "bbox": {"l": 370.6949157714844, "t": 37.11236572265625, "r": 517.9691772460938, "b": 28.07379150390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1269", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 125, "bbox": {"l": 530.17626953125, "t": 37.8399658203125, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "109", "text": "109"}, {"self_ref": "#/texts/1270", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 126, "bbox": {"l": 64.38241577148438, "t": 37.776123046875, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "110", "text": "110"}, {"self_ref": "#/texts/1271", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 126, "bbox": {"l": 98.55854797363281, "t": 37.32958984375, "r": 339.819580078125, "b": 27.9803466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1272", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 126, "bbox": {"l": 135.9443817138672, "t": 721.4259643554688, "r": 547.1917114257812, "b": 675.0651245117188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 362]}], "orig": "Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over.", "text": "Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over."}, {"self_ref": "#/texts/1273", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 126, "bbox": {"l": 136.2041778564453, "t": 663.527587890625, "r": 269.5399475097656, "b": 653.5504760742188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "Example 6-6 Trigger SECURED", "text": "Example 6-6 Trigger SECURED"}, {"self_ref": "#/texts/1274", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 126, "bbox": {"l": 135.4769287109375, "t": 647.4617919921875, "r": 506.97552490234375, "b": 514.72314453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 347]}], "orig": "/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END", "text": "/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"self_ref": "#/texts/1275", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 126, "bbox": {"l": 64.11894226074219, "t": 489.5697021484375, "r": 166.5321044921875, "b": 476.65728759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "6.9.2 Functions", "text": "6.9.2 Functions", "level": 1}, {"self_ref": "#/texts/1276", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 126, "bbox": {"l": 135.63002014160156, "t": 463.57928466796875, "r": 547.2664794921875, "b": 429.1574401855469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 220]}], "orig": "Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7.", "text": "Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7."}, {"self_ref": "#/texts/1277", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 126, "bbox": {"l": 134.9473114013672, "t": 416.7194519042969, "r": 547.4903564453125, "b": 266.78814697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 275]}], "orig": "Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED", "text": "Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED"}, {"self_ref": "#/texts/1278", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 126, "bbox": {"l": 135.8338165283203, "t": 251.36279296875, "r": 547.2584838867188, "b": 205.03076171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 337]}], "orig": "The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure.", "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure."}, {"self_ref": "#/texts/1279", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 126, "bbox": {"l": 136.09840393066406, "t": 193.3720703125, "r": 282.6751708984375, "b": 183.0419921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "orig": "Consider the following examples:", "text": "Consider the following examples:"}, {"self_ref": "#/texts/1280", "parent": {"cref": "#/groups/149"}, "children": [], "label": "list_item", "prov": [{"page_no": 126, "bbox": {"l": 135.61990356445312, "t": 176.2091064453125, "r": 547.1887817382812, "b": 166.24098205566406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1.", "text": "GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1281", "parent": {"cref": "#/groups/149"}, "children": [], "label": "list_item", "prov": [{"page_no": 126, "bbox": {"l": 150.3736572265625, "t": 159.58026123046875, "r": 547.14794921875, "b": 137.1123046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 148]}], "orig": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED.", "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1282", "parent": {"cref": "#/groups/149"}, "children": [], "label": "list_item", "prov": [{"page_no": 126, "bbox": {"l": 150.47885131835938, "t": 130.7811279296875, "r": 517.9143676757812, "b": 108.28175354003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 88]}], "orig": "NOT SECURED is the default on the create function unless SECURED is explicitly selected.", "text": "NOT SECURED is the default on the create function unless SECURED is explicitly selected.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1283", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 126, "bbox": {"l": 150.35072326660156, "t": 101.58184814453125, "r": 523.39453125, "b": 78.7335205078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 108]}], "orig": "This same rule applies for any function that might be invoked with a masked column specified as an argument.", "text": "This same rule applies for any function that might be invoked with a masked column specified as an argument."}, {"self_ref": "#/texts/1284", "parent": {"cref": "#/groups/150"}, "children": [], "label": "list_item", "prov": [{"page_no": 127, "bbox": {"l": 135.3511199951172, "t": 721.4021606445312, "r": 419.7916259765625, "b": 711.2779541015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "GLYPH Table2 column SSN has a column mask that is defined on it.", "text": "GLYPH Table2 column SSN has a column mask that is defined on it.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1285", "parent": {"cref": "#/groups/150"}, "children": [], "label": "list_item", "prov": [{"page_no": 127, "bbox": {"l": 150.33642578125, "t": 704.7354736328125, "r": 537.510986328125, "b": 682.29833984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 131]}], "orig": "SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute.", "text": "SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1286", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 127, "bbox": {"l": 64.35963439941406, "t": 655.222900390625, "r": 387.579833984375, "b": 638.777587890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "6.10 RCAC is only one part of the solution", "text": "6.10 RCAC is only one part of the solution", "level": 1}, {"self_ref": "#/texts/1287", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 127, "bbox": {"l": 135.8172607421875, "t": 622.630615234375, "r": 547.2545776367188, "b": 564.21142578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 379]}], "orig": "When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges.", "text": "When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges."}, {"self_ref": "#/texts/1288", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 127, "bbox": {"l": 136.24098205566406, "t": 552.024658203125, "r": 544.8680419921875, "b": 529.3187866210938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 146]}], "orig": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files.", "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files."}, {"self_ref": "#/texts/1289", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 127, "bbox": {"l": 136.0601806640625, "t": 227.9825439453125, "r": 366.7088317871094, "b": 218.522216796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Figure 6-25 Object-level security and RCAC permissions", "text": "Figure 6-25 Object-level security and RCAC permissions"}, {"self_ref": "#/texts/1290", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 127, "bbox": {"l": 135.88059997558594, "t": 201.9534912109375, "r": 547.2168579101562, "b": 179.97857666015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test.", "text": "To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test."}, {"self_ref": "#/texts/1291", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 127, "bbox": {"l": 135.60548400878906, "t": 167.94500732421875, "r": 547.2177124023438, "b": 133.54364013671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver.", "text": "The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver."}, {"self_ref": "#/texts/1292", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 127, "bbox": {"l": 136.01368713378906, "t": 122.1590576171875, "r": 547.24267578125, "b": 87.8009033203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 222]}], "orig": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements.", "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements."}, {"self_ref": "#/texts/1293", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 127, "bbox": {"l": 370.63580322265625, "t": 37.11981201171875, "r": 517.9691772460938, "b": 28.08636474609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Chapter 6. Additional considerations", "text": "Chapter 6. Additional considerations"}, {"self_ref": "#/texts/1294", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 127, "bbox": {"l": 529.969970703125, "t": 37.74169921875, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "111", "text": "111"}, {"self_ref": "#/texts/1295", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 128, "bbox": {"l": 64.37667846679688, "t": 37.83319091796875, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "112", "text": "112"}, {"self_ref": "#/texts/1296", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 128, "bbox": {"l": 98.55838012695312, "t": 37.4378662109375, "r": 339.87249755859375, "b": 27.9609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1297", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 128, "bbox": {"l": 135.75006103515625, "t": 721.4137573242188, "r": 547.2962646484375, "b": 675.1400146484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 332]}], "orig": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of \"restricting access to data\", and \"needing access to data\".", "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of \"restricting access to data\", and \"needing access to data\"."}, {"self_ref": "#/texts/1298", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 129, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 7.", "text": "Chapter 7."}, {"self_ref": "#/texts/1299", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 129, "bbox": {"l": 500.3999938964844, "t": 698.831298828125, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "7", "text": "7"}, {"self_ref": "#/texts/1300", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 129, "bbox": {"l": 136.8000030517578, "t": 538.93505859375, "r": 547.2606201171875, "b": 481.8584899902344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Row and Column Access Control management", "text": "Row and Column Access Control management", "level": 1}, {"self_ref": "#/texts/1301", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 129, "bbox": {"l": 135.95159912109375, "t": 443.9356689453125, "r": 530.336181640625, "b": 409.8076477050781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 253]}], "orig": "After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered.", "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered."}, {"self_ref": "#/texts/1302", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 129, "bbox": {"l": 135.9311981201172, "t": 397.9674377441406, "r": 347.4121398925781, "b": 387.68560791015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "The following topics are covered in this chapter:", "text": "The following topics are covered in this chapter:"}, {"self_ref": "#/texts/1303", "parent": {"cref": "#/groups/151"}, "children": [], "label": "list_item", "prov": [{"page_no": 129, "bbox": {"l": 135.7118682861328, "t": 381.1703796386719, "r": 356.2835388183594, "b": 371.0793151855469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "GLYPH Managing row permissions and column masks", "text": "GLYPH Managing row permissions and column masks", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1304", "parent": {"cref": "#/groups/151"}, "children": [], "label": "list_item", "prov": [{"page_no": 129, "bbox": {"l": 135.60548400878906, "t": 369.25701904296875, "r": 406.06463623046875, "b": 359.0097351074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 69]}], "orig": "GLYPH Managing tables with row permissions and column masks", "text": "GLYPH Managing tables with row permissions and column masks", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1305", "parent": {"cref": "#/groups/151"}, "children": [], "label": "list_item", "prov": [{"page_no": 129, "bbox": {"l": 135.78424072265625, "t": 357.164306640625, "r": 323.0509338378906, "b": 346.86358642578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "GLYPH Monitoring and auditing function usage", "text": "GLYPH Monitoring and auditing function usage", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1306", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 129, "bbox": {"l": 63.72496032714844, "t": 37.267822265625, "r": 257.24334716796875, "b": 27.93780517578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/1307", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 129, "bbox": {"l": 530.0635986328125, "t": 37.69476318359375, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "113", "text": "113"}, {"self_ref": "#/texts/1308", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 130, "bbox": {"l": 64.16378021240234, "t": 718.4564208984375, "r": 449.7918701171875, "b": 702.5186157226562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "7.1 Managing row permissions and column masks", "text": "7.1 Managing row permissions and column masks", "level": 1}, {"self_ref": "#/texts/1309", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 135.75418090820312, "t": 685.8709106445312, "r": 541.12109375, "b": 675.7001342773438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 84]}], "orig": "This section focuses on the management of the RCAC row permissions and column masks.", "text": "This section focuses on the management of the RCAC row permissions and column masks."}, {"self_ref": "#/texts/1310", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 130, "bbox": {"l": 63.90059280395508, "t": 656.04248046875, "r": 228.30335998535156, "b": 643.1283569335938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 23]}], "orig": "7.1.1 Source management", "text": "7.1.1 Source management", "level": 1}, {"self_ref": "#/texts/1311", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 135.94558715820312, "t": 630.015625, "r": 546.4277954101562, "b": 583.6402587890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 287]}], "orig": "The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions.", "text": "The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions."}, {"self_ref": "#/texts/1312", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 135.89431762695312, "t": 571.918212890625, "r": 547.2933959960938, "b": 490.18017578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 596]}], "orig": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table.", "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table."}, {"self_ref": "#/texts/1313", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 130, "bbox": {"l": 63.8327522277832, "t": 470.3725891113281, "r": 231.4643096923828, "b": 457.04302978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "7.1.2 Modifying definitions", "text": "7.1.2 Modifying definitions", "level": 1}, {"self_ref": "#/texts/1314", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 135.9163360595703, "t": 443.97235107421875, "r": 547.1988525390625, "b": 397.6696472167969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 334]}], "orig": "After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition.", "text": "After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition."}, {"self_ref": "#/texts/1315", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 135.8429718017578, "t": 385.9662170410156, "r": 547.2922973632812, "b": 339.7766418457031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 296]}], "orig": "This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process.", "text": "This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process."}, {"self_ref": "#/texts/1316", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 130, "bbox": {"l": 64.0130844116211, "t": 320.2338562011719, "r": 214.6126708984375, "b": 307.0821228027344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "7.1.3 Turning on and off", "text": "7.1.3 Turning on and off", "level": 1}, {"self_ref": "#/texts/1317", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 136.03684997558594, "t": 293.85089111328125, "r": 547.182861328125, "b": 235.916259765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 435]}], "orig": "As described in 3.1.2, \"Enabling and activating RCAC\" on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table.", "text": "As described in 3.1.2, \"Enabling and activating RCAC\" on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table."}, {"self_ref": "#/texts/1318", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 142.16134643554688, "t": 218.0211181640625, "r": 541.1311645507812, "b": 171.52093505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 300]}], "orig": "Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages.", "text": "Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages."}, {"self_ref": "#/texts/1319", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 130, "bbox": {"l": 64.14586639404297, "t": 147.51336669921875, "r": 183.9399871826172, "b": 134.349365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "7.1.4 Regenerating", "text": "7.1.4 Regenerating", "level": 1}, {"self_ref": "#/texts/1320", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 130, "bbox": {"l": 136.13162231445312, "t": 121.35113525390625, "r": 547.3272705078125, "b": 99.15777587890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 172]}], "orig": "DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects.", "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects."}, {"self_ref": "#/texts/1321", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 130, "bbox": {"l": 64.35222625732422, "t": 37.7677001953125, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "114", "text": "114"}, {"self_ref": "#/texts/1322", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 130, "bbox": {"l": 98.60916137695312, "t": 37.29241943359375, "r": 339.819580078125, "b": 28.02947998046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1323", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 131, "bbox": {"l": 135.9884796142578, "t": 721.5679931640625, "r": 547.2010498046875, "b": 639.279052734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 498]}], "orig": "For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table.", "text": "For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table."}, {"self_ref": "#/texts/1324", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 131, "bbox": {"l": 135.99624633789062, "t": 627.4041137695312, "r": 547.1602172851562, "b": 580.9271240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 357]}], "orig": "Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error.", "text": "Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error."}, {"self_ref": "#/texts/1325", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 131, "bbox": {"l": 63.91755676269531, "t": 553.80029296875, "r": 536.6239013671875, "b": 537.7216796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "7.2 Managing tables with row permissions and column masks", "text": "7.2 Managing tables with row permissions and column masks", "level": 1}, {"self_ref": "#/texts/1326", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 131, "bbox": {"l": 135.8260498046875, "t": 521.4241943359375, "r": 547.2647094726562, "b": 499.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 94]}], "orig": "This section examines the object management considerations after RCAC is added to a DB2 table.", "text": "This section examines the object management considerations after RCAC is added to a DB2 table."}, {"self_ref": "#/texts/1327", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 131, "bbox": {"l": 63.97272872924805, "t": 479.5977783203125, "r": 205.3369598388672, "b": 466.6372985839844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 22]}], "orig": "7.2.1 Save and restore", "text": "7.2.1 Save and restore", "level": 1}, {"self_ref": "#/texts/1328", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 131, "bbox": {"l": 135.9362335205078, "t": 453.3270568847656, "r": 547.1621704101562, "b": 407.25885009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 261]}], "orig": "Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC.", "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC."}, {"self_ref": "#/texts/1329", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 131, "bbox": {"l": 135.97621154785156, "t": 395.47320556640625, "r": 547.2257080078125, "b": 361.052978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 268]}], "orig": "Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging.", "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging."}, {"self_ref": "#/texts/1330", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 131, "bbox": {"l": 283.8012390136719, "t": 37.15869140625, "r": 518.0120849609375, "b": 27.9959716796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Chapter 7. Row and Column Access Control management", "text": "Chapter 7. Row and Column Access Control management"}, {"self_ref": "#/texts/1331", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 131, "bbox": {"l": 530.0354614257812, "t": 37.67431640625, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "115", "text": "115"}, {"self_ref": "#/texts/1332", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 132, "bbox": {"l": 64.29827880859375, "t": 37.77142333984375, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "116", "text": "116"}, {"self_ref": "#/texts/1333", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 132, "bbox": {"l": 98.44544219970703, "t": 37.3984375, "r": 339.8977355957031, "b": 28.01568603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1334", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 132, "bbox": {"l": 135.94534301757812, "t": 721.4252319335938, "r": 546.4418334960938, "b": 591.2671508789062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 872]}], "orig": "For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, \"Regenerating\" on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026 SELECT C.CUSTOMER_ID FROM CUSTOMERS C \u2026). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1.", "text": "For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, \"Regenerating\" on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026 SELECT C.CUSTOMER_ID FROM CUSTOMERS C \u2026). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1."}, {"self_ref": "#/texts/1335", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 132, "bbox": {"l": 135.7970428466797, "t": 335.1150817871094, "r": 333.88006591796875, "b": 325.72674560546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Figure 7-1 Restoring tables to different schemas", "text": "Figure 7-1 Restoring tables to different schemas"}, {"self_ref": "#/texts/1336", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 132, "bbox": {"l": 135.7681427001953, "t": 309.2113342285156, "r": 547.2655639648438, "b": 238.95770263671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 477]}], "orig": "The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the \"Schema qualify names for objects\" and select the \"OR REPLACE clause\", and then run the generated script.", "text": "The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the \"Schema qualify names for objects\" and select the \"OR REPLACE clause\", and then run the generated script."}, {"self_ref": "#/texts/1337", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 132, "bbox": {"l": 63.921077728271484, "t": 219.65240478515625, "r": 196.41009521484375, "b": 206.39764404296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "7.2.2 Table migration", "text": "7.2.2 Table migration", "level": 1}, {"self_ref": "#/texts/1338", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 132, "bbox": {"l": 135.8064727783203, "t": 193.502197265625, "r": 538.5225830078125, "b": 146.933837890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 329]}], "orig": "There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes.", "text": "There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes."}, {"self_ref": "#/texts/1339", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 132, "bbox": {"l": 135.9099884033203, "t": 135.37615966796875, "r": 542.6978149414062, "b": 100.94818115234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 255]}], "orig": "The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing.", "text": "The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing."}, {"self_ref": "#/texts/1340", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 132, "bbox": {"l": 135.79965209960938, "t": 89.41839599609375, "r": 524.2598876953125, "b": 67.21551513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 132]}], "orig": "Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas.", "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas."}, {"self_ref": "#/texts/1341", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 133, "bbox": {"l": 64.03428649902344, "t": 721.896728515625, "r": 396.1838684082031, "b": 705.3358154296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "7.3 Monitoring and auditing function usage", "text": "7.3 Monitoring and auditing function usage", "level": 1}, {"self_ref": "#/texts/1342", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 133, "bbox": {"l": 135.9032745361328, "t": 689.2759399414062, "r": 546.3292236328125, "b": 619.1384887695312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 526]}], "orig": "While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events.", "text": "While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events."}, {"self_ref": "#/texts/1343", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 133, "bbox": {"l": 135.86427307128906, "t": 607.3901977539062, "r": 547.2933349609375, "b": 536.7468872070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 502]}], "orig": "The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization's data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed.", "text": "The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization's data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed."}, {"self_ref": "#/texts/1344", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 133, "bbox": {"l": 135.72532653808594, "t": 525.425537109375, "r": 546.2147216796875, "b": 491.26055908203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 193]}], "orig": "A new journal entry type of \"AX\" for journal entry code \"T\" (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents:", "text": "A new journal entry type of \"AX\" for journal entry code \"T\" (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents:"}, {"self_ref": "#/texts/1345", "parent": {"cref": "#/groups/152"}, "children": [], "label": "list_item", "prov": [{"page_no": 133, "bbox": {"l": 135.6563262939453, "t": 484.5631408691406, "r": 396.8944396972656, "b": 474.28076171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "GLYPH IBM i Version 7.2 Journal Management Guide , found at:", "text": "GLYPH IBM i Version 7.2 Journal Management Guide , found at:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1346", "parent": {"cref": "#/groups/152"}, "children": [], "label": "list_item", "prov": [{"page_no": 133, "bbox": {"l": 150.67897033691406, "t": 467.1967468261719, "r": 545.9945678710938, "b": 445.051025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 92]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1347", "parent": {"cref": "#/groups/152"}, "children": [], "label": "list_item", "prov": [{"page_no": 133, "bbox": {"l": 135.60202026367188, "t": 438.09796142578125, "r": 387.5917663574219, "b": 427.25750732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "GLYPH IBM i Version 7.2 Security Reference Guide , found at:", "text": "GLYPH IBM i Version 7.2 Security Reference Guide , found at:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1348", "parent": {"cref": "#/groups/152"}, "children": [], "label": "list_item", "prov": [{"page_no": 133, "bbox": {"l": 150.6260986328125, "t": 421.3846740722656, "r": 546.2595825195312, "b": 399.26019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 90]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1349", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 133, "bbox": {"l": 283.7824401855469, "t": 37.1876220703125, "r": 518.0120849609375, "b": 27.99267578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Chapter 7. Row and Column Access Control management", "text": "Chapter 7. Row and Column Access Control management"}, {"self_ref": "#/texts/1350", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 133, "bbox": {"l": 530.0186157226562, "t": 37.769775390625, "r": 547.265380859375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "117", "text": "117"}, {"self_ref": "#/texts/1351", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 134, "bbox": {"l": 64.53031158447266, "t": 37.923583984375, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "118", "text": "118"}, {"self_ref": "#/texts/1352", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 134, "bbox": {"l": 98.5851821899414, "t": 37.57379150390625, "r": 340.1449890136719, "b": 27.8642578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1353", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 135, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 8.", "text": "Chapter 8."}, {"self_ref": "#/texts/1354", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 135, "bbox": {"l": 136.7628173828125, "t": 538.7010498046875, "r": 479.93341064453125, "b": 482.1217956542969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "Designing and planning for success", "text": "Designing and planning for success", "level": 1}, {"self_ref": "#/texts/1355", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 135, "bbox": {"l": 135.9272003173828, "t": 444.05712890625, "r": 538.4698486328125, "b": 397.414794921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing.", "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing."}, {"self_ref": "#/texts/1356", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 135, "bbox": {"l": 135.9006805419922, "t": 385.872802734375, "r": 347.4120788574219, "b": 375.73284912109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "The following topics are covered in this chapter:", "text": "The following topics are covered in this chapter:"}, {"self_ref": "#/texts/1357", "parent": {"cref": "#/groups/153"}, "children": [], "label": "list_item", "prov": [{"page_no": 135, "bbox": {"l": 135.63284301757812, "t": 369.337890625, "r": 411.53955078125, "b": 359.0141296386719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "GLYPH Implementing RCAC with good design and proper planning", "text": "GLYPH Implementing RCAC with good design and proper planning", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1358", "parent": {"cref": "#/groups/153"}, "children": [], "label": "list_item", "prov": [{"page_no": 135, "bbox": {"l": 135.8564910888672, "t": 357.5201721191406, "r": 284.81951904296875, "b": 347.0796813964844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "GLYPH DB2 for i Center of Excellence", "text": "GLYPH DB2 for i Center of Excellence", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1359", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 135, "bbox": {"l": 63.695404052734375, "t": 37.26922607421875, "r": 257.24334716796875, "b": 27.91717529296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/1360", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 135, "bbox": {"l": 530.0399169921875, "t": 37.78558349609375, "r": 547.2623901367188, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "119", "text": "119"}, {"self_ref": "#/texts/1361", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 135, "bbox": {"l": 500.3999938964844, "t": 698.8610229492188, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "8", "text": "8"}, {"self_ref": "#/texts/1362", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 136, "bbox": {"l": 64.5673599243164, "t": 718.5274658203125, "r": 544.5512084960938, "b": 701.9832153320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "8.1 Implementing RCAC with good design and proper planning", "text": "8.1 Implementing RCAC with good design and proper planning", "level": 1}, {"self_ref": "#/texts/1363", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 135.9280242919922, "t": 686.1177368164062, "r": 544.7098999023438, "b": 652.1786499023438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 197]}], "orig": "By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i.", "text": "By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i."}, {"self_ref": "#/texts/1364", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 136.055419921875, "t": 640.219482421875, "r": 545.359375, "b": 593.98486328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 318]}], "orig": "RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility.", "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility."}, {"self_ref": "#/texts/1365", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 135.8184356689453, "t": 582.028076171875, "r": 547.2506103515625, "b": 524.1407470703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 365]}], "orig": "This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read.", "text": "This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read."}, {"self_ref": "#/texts/1366", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 135.80397033691406, "t": 511.94879150390625, "r": 500.5572509765625, "b": 501.5162048339844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "This paper has described the following pervasive power and advantages of RCAC:", "text": "This paper has described the following pervasive power and advantages of RCAC:"}, {"self_ref": "#/texts/1367", "parent": {"cref": "#/groups/154"}, "children": [], "label": "list_item", "prov": [{"page_no": 136, "bbox": {"l": 135.56689453125, "t": 495.3780212402344, "r": 429.4506530761719, "b": 484.64202880859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 79]}], "orig": "GLYPH Access can be controlled through simple or sophisticated logic.", "text": "GLYPH Access can be controlled through simple or sophisticated logic.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1368", "parent": {"cref": "#/groups/154"}, "children": [], "label": "list_item", "prov": [{"page_no": 136, "bbox": {"l": 135.60137939453125, "t": 483.2593688964844, "r": 351.649169921875, "b": 472.8739929199219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "GLYPH Virtually no application changes are required.", "text": "GLYPH Virtually no application changes are required.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1369", "parent": {"cref": "#/groups/154"}, "children": [], "label": "list_item", "prov": [{"page_no": 136, "bbox": {"l": 135.644775390625, "t": 471.4268798828125, "r": 491.7782287597656, "b": 460.9553527832031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 93]}], "orig": "GLYPH The implementation of the access policy is part of the DB2 data access layer.", "text": "GLYPH The implementation of the access policy is part of the DB2 data access layer.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1370", "parent": {"cref": "#/groups/154"}, "children": [], "label": "list_item", "prov": [{"page_no": 136, "bbox": {"l": 135.75515747070312, "t": 459.736572265625, "r": 426.24566650390625, "b": 448.82037353515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 81]}], "orig": "GLYPH Table data is protected regardless of the interface that is used.", "text": "GLYPH Table data is protected regardless of the interface that is used.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1371", "parent": {"cref": "#/groups/154"}, "children": [], "label": "list_item", "prov": [{"page_no": 136, "bbox": {"l": 135.80447387695312, "t": 447.8392333984375, "r": 433.2464599609375, "b": 436.8045959472656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 80]}], "orig": "GLYPH No user is inherently exempted from the access control policies.", "text": "GLYPH No user is inherently exempted from the access control policies.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1372", "parent": {"cref": "#/groups/154"}, "children": [], "label": "list_item", "prov": [{"page_no": 136, "bbox": {"l": 135.60531616210938, "t": 435.288330078125, "r": 383.5718688964844, "b": 424.9714660644531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "GLYPH Groups of users can share policies and permissions.", "text": "GLYPH Groups of users can share policies and permissions.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1373", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 135.60353088378906, "t": 413.26202392578125, "r": 547.245361328125, "b": 330.8507385253906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 623]}], "orig": "A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance.", "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance."}, {"self_ref": "#/texts/1374", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 135.79904174804688, "t": 319.08209228515625, "r": 547.19580078125, "b": 260.80133056640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 380]}], "orig": "With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown.", "text": "With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown."}, {"self_ref": "#/texts/1375", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 136, "bbox": {"l": 64.42830657958984, "t": 233.9404296875, "r": 324.01275634765625, "b": 217.91627502441406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "8.2 DB2 for i Center of Excellence", "text": "8.2 DB2 for i Center of Excellence", "level": 1}, {"self_ref": "#/texts/1376", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 135.96109008789062, "t": 201.5556640625, "r": 533.2318115234375, "b": 142.5989990234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 354]}], "orig": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design.", "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design."}, {"self_ref": "#/texts/1377", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 136, "bbox": {"l": 136.06277465820312, "t": 131.29010009765625, "r": 547.2406005859375, "b": 109.11979675292969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 114]}], "orig": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com .", "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com ."}, {"self_ref": "#/texts/1378", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 136, "bbox": {"l": 64.42459869384766, "t": 37.74468994140625, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "120", "text": "120"}, {"self_ref": "#/texts/1379", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 136, "bbox": {"l": 98.57987976074219, "t": 37.353759765625, "r": 339.84716796875, "b": 27.97216796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1380", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 137, "bbox": {"l": 74.4000015258789, "t": 523.457275390625, "r": 115.15289306640625, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Appendix A.", "text": "Appendix A."}, {"self_ref": "#/texts/1381", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 137, "bbox": {"l": 136.8000030517578, "t": 538.7255859375, "r": 485.7971496582031, "b": 481.131103515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "Database definitions for the RCAC banking example", "text": "Database definitions for the RCAC banking example", "level": 1}, {"self_ref": "#/texts/1382", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 137, "bbox": {"l": 135.599853515625, "t": 444.1184387207031, "r": 539.8473510742188, "b": 397.7381591796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 322]}], "orig": "This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, \"Implementing Row and Column Access Control: Banking example\" on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example.", "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, \"Implementing Row and Column Access Control: Banking example\" on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example."}, {"self_ref": "#/texts/1383", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 137, "bbox": {"l": 64.52754211425781, "t": 386.0654602050781, "r": 332.9858703613281, "b": 376.4199523925781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "Example A-1 DDL script to implement the RCAC banking example", "text": "Example A-1 DDL script to implement the RCAC banking example"}, {"self_ref": "#/texts/1384", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 137, "bbox": {"l": 62.520992279052734, "t": 371.1180419921875, "r": 541.1366577148438, "b": 61.56207275390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1229]}], "orig": "/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL ,", "text": "/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL ,"}, {"self_ref": "#/texts/1385", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 137, "bbox": {"l": 63.67854309082031, "t": 37.3470458984375, "r": 257.24334716796875, "b": 27.88531494140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/1386", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 137, "bbox": {"l": 530.0882568359375, "t": 37.70806884765625, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "121", "text": "121"}, {"self_ref": "#/texts/1387", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 137, "bbox": {"l": 496.9212951660156, "t": 699.434814453125, "r": 526.1300659179688, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "A", "text": "A"}, {"self_ref": "#/texts/1388", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 138, "bbox": {"l": 63.45902633666992, "t": 721.3632202148438, "r": 546.5369873046875, "b": 70.01904296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2754]}], "orig": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) );", "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) );"}, {"self_ref": "#/texts/1389", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 138, "bbox": {"l": 64.49662017822266, "t": 37.59820556640625, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "122", "text": "122"}, {"self_ref": "#/texts/1390", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 138, "bbox": {"l": 98.57022857666016, "t": 37.3040771484375, "r": 339.9194030761719, "b": 27.99407958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1391", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 139, "bbox": {"l": 62.7338981628418, "t": 720.3270263671875, "r": 546.5366821289062, "b": 61.7633056640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2313]}], "orig": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1", "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1"}, {"self_ref": "#/texts/1392", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 139, "bbox": {"l": 256.79608154296875, "t": 37.26806640625, "r": 517.9058227539062, "b": 28.0927734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "Appendix A. Database definitions for the RCAC banking example", "text": "Appendix A. Database definitions for the RCAC banking example"}, {"self_ref": "#/texts/1393", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 139, "bbox": {"l": 530.0982055664062, "t": 37.6234130859375, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "123", "text": "123"}, {"self_ref": "#/texts/1394", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 140, "bbox": {"l": 62.60613250732422, "t": 722.6401977539062, "r": 500.697265625, "b": 84.2364501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1998]}], "orig": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;", "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}, {"self_ref": "#/texts/1395", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 140, "bbox": {"l": 64.50080871582031, "t": 37.46612548828125, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "124", "text": "124"}, {"self_ref": "#/texts/1396", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 140, "bbox": {"l": 98.63966369628906, "t": 37.28564453125, "r": 339.882080078125, "b": 27.98992919921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1397", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 141, "bbox": {"l": 63.12764358520508, "t": 721.9608154296875, "r": 528.5969848632812, "b": 191.19879150390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1533]}], "orig": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */", "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */"}, {"self_ref": "#/texts/1398", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 141, "bbox": {"l": 256.8621520996094, "t": 37.23699951171875, "r": 517.9058227539062, "b": 28.05596923828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "Appendix A. Database definitions for the RCAC banking example", "text": "Appendix A. Database definitions for the RCAC banking example"}, {"self_ref": "#/texts/1399", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 141, "bbox": {"l": 530.1473999023438, "t": 37.67071533203125, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "125", "text": "125"}, {"self_ref": "#/texts/1400", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 142, "bbox": {"l": 64.55541229248047, "t": 37.9239501953125, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "126", "text": "126"}, {"self_ref": "#/texts/1401", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 142, "bbox": {"l": 98.59571838378906, "t": 37.586181640625, "r": 340.1140441894531, "b": 27.87689208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1402", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 143, "bbox": {"l": 64.80000305175781, "t": 719.0851440429688, "r": 299.2008056640625, "b": 695.3945922851562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 20]}], "orig": "Related publications", "text": "Related publications", "level": 1}, {"self_ref": "#/texts/1403", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 143, "bbox": {"l": 135.75408935546875, "t": 659.93994140625, "r": 530.0675048828125, "b": 637.64208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 150]}], "orig": "The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper.", "text": "The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper."}, {"self_ref": "#/texts/1404", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 143, "bbox": {"l": 64.5552978515625, "t": 610.62353515625, "r": 205.97418212890625, "b": 594.16162109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "Other publications", "text": "Other publications", "level": 1}, {"self_ref": "#/texts/1405", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 143, "bbox": {"l": 135.73150634765625, "t": 578.06201171875, "r": 413.18115234375, "b": 567.8068237304688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "These publications are relevant as further information sources:", "text": "These publications are relevant as further information sources:"}, {"self_ref": "#/texts/1406", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.81341552734375, "t": 561.2576904296875, "r": 414.05657958984375, "b": 551.03466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "GLYPH IBM DB2 for i indexing methods and strategies white paper:", "text": "GLYPH IBM DB2 for i indexing methods and strategies white paper:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1407", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.4676513671875, "t": 543.9222412109375, "r": 545.9945678710938, "b": 521.3193359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 108]}], "orig": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies", "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1408", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.8154296875, "t": 515.3950805664062, "r": 299.7695007324219, "b": 505.1793212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "GLYPH IBM i Memo to Users Version 7.2 :", "text": "GLYPH IBM i Memo to Users Version 7.2 :", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1409", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.4538116455078, "t": 497.8748474121094, "r": 536.3565673828125, "b": 487.5298767089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1410", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.64071655273438, "t": 481.50567626953125, "r": 371.4087829589844, "b": 471.1599426269531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide :", "text": "GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide :", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1411", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.3872833251953, "t": 463.9585876464844, "r": 545.9945678710938, "b": 442.33642578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 86]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1412", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.63323974609375, "t": 435.3125305175781, "r": 355.629150390625, "b": 425.1407470703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "GLYPH IBM i Version 7.2 Journal Management Guide :", "text": "GLYPH IBM i Version 7.2 Journal Management Guide :", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1413", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.4163360595703, "t": 417.87652587890625, "r": 545.9945678710938, "b": 395.97418212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 92]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1414", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.4580078125, "t": 389.5109558105469, "r": 346.3946838378906, "b": 378.82830810546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "GLYPH IBM i Version 7.2 Security Reference Guide :", "text": "GLYPH IBM i Version 7.2 Security Reference Guide :", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1415", "parent": {"cref": "#/groups/155"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.8020477294922, "t": 372.0950622558594, "r": 546.1087036132812, "b": 349.88922119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 90]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1416", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 143, "bbox": {"l": 64.61199188232422, "t": 322.6049499511719, "r": 195.1357421875, "b": 306.89630126953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "orig": "Online resources", "text": "Online resources", "level": 1}, {"self_ref": "#/texts/1417", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 143, "bbox": {"l": 135.812255859375, "t": 290.16766357421875, "r": 399.3615417480469, "b": 280.17840576171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "These websites are relevant as further information sources:", "text": "These websites are relevant as further information sources:"}, {"self_ref": "#/texts/1418", "parent": {"cref": "#/groups/156"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.69252014160156, "t": 273.29962158203125, "r": 457.8038635253906, "b": 263.091796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 81]}], "orig": "GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "text": "GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1419", "parent": {"cref": "#/groups/156"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.2280731201172, "t": 255.794677734375, "r": 545.9945678710938, "b": 234.15362548828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 86]}], "orig": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en", "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1420", "parent": {"cref": "#/groups/156"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.60523986816406, "t": 227.4852294921875, "r": 287.6324768066406, "b": 216.62274169921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "GLYPH Identity Theft Resource Center", "text": "GLYPH Identity Theft Resource Center", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1421", "parent": {"cref": "#/groups/156"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.68099975585938, "t": 209.80865478515625, "r": 291.11822509765625, "b": 199.8922119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "http://www.idtheftcenter.org", "text": "http://www.idtheftcenter.org", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1422", "parent": {"cref": "#/groups/156"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 135.6503448486328, "t": 193.26593017578125, "r": 231.24366760253906, "b": 183.16000366210938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "GLYPH Ponemon Institute", "text": "GLYPH Ponemon Institute", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1423", "parent": {"cref": "#/groups/156"}, "children": [], "label": "list_item", "prov": [{"page_no": 143, "bbox": {"l": 150.75747680664062, "t": 176.2340087890625, "r": 266.09869384765625, "b": 166.0797119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 23]}], "orig": "http://www.ponemon.org/", "text": "http://www.ponemon.org/", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/1424", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 143, "bbox": {"l": 63.680240631103516, "t": 37.23919677734375, "r": 257.24334716796875, "b": 27.890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/1425", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 143, "bbox": {"l": 530.1651000976562, "t": 37.71759033203125, "r": 547.2587890625, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "127", "text": "127"}, {"self_ref": "#/texts/1426", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 144, "bbox": {"l": 64.73175811767578, "t": 721.902587890625, "r": 172.86196899414062, "b": 705.8510131835938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 13]}], "orig": "Help from IBM", "text": "Help from IBM", "level": 1}, {"self_ref": "#/texts/1427", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 144, "bbox": {"l": 136.51719665527344, "t": 689.291015625, "r": 262.6037292480469, "b": 678.6181030273438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "IBM Support and downloads", "text": "IBM Support and downloads"}, {"self_ref": "#/texts/1428", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 144, "bbox": {"l": 136.8000030517578, "t": 671.5845336914062, "r": 211.73904418945312, "b": 661.7525634765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "orig": "ibm.com /support", "text": "ibm.com /support"}, {"self_ref": "#/texts/1429", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 144, "bbox": {"l": 136.5938720703125, "t": 650.671142578125, "r": 227.63221740722656, "b": 640.2989501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "IBM Global Services", "text": "IBM Global Services"}, {"self_ref": "#/texts/1430", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 144, "bbox": {"l": 136.8000030517578, "t": 632.98974609375, "r": 216.7190399169922, "b": 623.4984130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "ibm.com /services", "text": "ibm.com /services"}, {"self_ref": "#/texts/1431", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 144, "bbox": {"l": 64.5219497680664, "t": 37.608154296875, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "128", "text": "128"}, {"self_ref": "#/texts/1432", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 144, "bbox": {"l": 98.66630554199219, "t": 37.40533447265625, "r": 339.9003601074219, "b": 27.9249267578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/1433", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 287.2200012207031, "t": 763.4519653320312, "r": 414.24481201171875, "b": 741.251953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Back cover", "text": "Back cover"}, {"self_ref": "#/texts/1434", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 146, "bbox": {"l": 26.454715728759766, "t": 720.362060546875, "r": 447.3600158691406, "b": 650.9618530273438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i", "level": 1}, {"self_ref": "#/texts/1435", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 26.35322380065918, "t": 551.0213623046875, "r": 127.443603515625, "b": 524.7881469726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Implement roles and separation of duties", "text": "Implement roles and separation of duties"}, {"self_ref": "#/texts/1436", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 26.22105598449707, "t": 508.2904052734375, "r": 120.283203125, "b": 469.1280212402344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Leverage row permissions on the database", "text": "Leverage row permissions on the database"}, {"self_ref": "#/texts/1437", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 26.226221084594727, "t": 452.88134765625, "r": 121.44960021972656, "b": 413.14801025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Protect columns by defining column masks", "text": "Protect columns by defining column masks"}, {"self_ref": "#/texts/1438", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 152.25205993652344, "t": 550.1506958007812, "r": 414.084228515625, "b": 468.4081115722656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 464]}], "orig": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"self_ref": "#/texts/1439", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 152.3572540283203, "t": 461.4716796875, "r": 414.173828125, "b": 403.090087890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 309]}], "orig": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"self_ref": "#/texts/1440", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 146, "bbox": {"l": 170.78512573242188, "t": 161.494140625, "r": 232.11270141601562, "b": 152.3369903564453, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "REDP-5110-00", "text": "REDP-5110-00"}, {"self_ref": "#/texts/1441", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 466.3692626953125, "t": 544.606201171875, "r": 559.809326171875, "b": 489.8393859863281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION", "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"self_ref": "#/texts/1442", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 466.3262939453125, "t": 440.5700988769531, "r": 587.38916015625, "b": 405.52801513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE", "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"self_ref": "#/texts/1443", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 466.1037292480469, "t": 393.18768310546875, "r": 587.5205078125, "b": 250.36593627929688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 323]}], "orig": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment.", "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"self_ref": "#/texts/1444", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 146, "bbox": {"l": 466.66748046875, "t": 214.11181640625, "r": 571.0052490234375, "b": 190.48809814453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "For more information: ibm.com /redbooks", "text": "For more information: ibm.com /redbooks"}], "pictures": [{"self_ref": "#/pictures/0", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 1, "bbox": {"l": 513.4560546875, "t": 765.9149169921875, "r": 586.1583251953125, "b": 737.1808471679688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/1", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 3, "bbox": {"l": 80.21302032470703, "t": 720.9600830078125, "r": 142.7141876220703, "b": 696.1356811523438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/2", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 10, "bbox": {"l": 465.2912902832031, "t": 581.128173828125, "r": 487.54522705078125, "b": 568.2127075195312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/3", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 11, "bbox": {"l": 143.39866638183594, "t": 521.7388916015625, "r": 179.56256103515625, "b": 506.378662109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/4", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 11, "bbox": {"l": 64.16704559326172, "t": 188.49365234375, "r": 258.77435302734375, "b": 103.87176513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/5", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 12, "bbox": {"l": 309.1715087890625, "t": 634.2903442382812, "r": 372.07818603515625, "b": 608.7066650390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/6", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 12, "bbox": {"l": 309.91729736328125, "t": 434.16644287109375, "r": 327.7751159667969, "b": 415.996337890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/7", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 13, "bbox": {"l": 142.52883911132812, "t": 416.9550476074219, "r": 251.47850036621094, "b": 288.79351806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/8", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 13, "bbox": {"l": 145.41448974609375, "t": 264.7552490234375, "r": 252.08840942382812, "b": 156.616943359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/9", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 14, "bbox": {"l": 141.68251037597656, "t": 714.6685791015625, "r": 249.5221405029297, "b": 608.5074462890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/10", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 14, "bbox": {"l": 141.71910095214844, "t": 599.4354248046875, "r": 251.5185546875, "b": 472.5130920410156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/11", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 14, "bbox": {"l": 141.89089965820312, "t": 447.3857116699219, "r": 251.38380432128906, "b": 337.8795166015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/12", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 14, "bbox": {"l": 141.57579040527344, "t": 329.20159912109375, "r": 249.41360473632812, "b": 223.3951416015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/13", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 14, "bbox": {"l": 141.69131469726562, "t": 177.389892578125, "r": 250.86129760742188, "b": 67.85260009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/14", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 15, "bbox": {"l": 142.26431274414062, "t": 714.8782348632812, "r": 251.69140625, "b": 599.3118896484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/15", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 15, "bbox": {"l": 142.39024353027344, "t": 575.4408569335938, "r": 251.9964141845703, "b": 465.6423034667969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/16", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 17, "bbox": {"l": 32.05508804321289, "t": 721.5736083984375, "r": 239.62692260742188, "b": 553.958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/17", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 19, "bbox": {"l": 136.6387176513672, "t": 296.2513122558594, "r": 491.2538146972656, "b": 92.9403076171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "captions": [{"cref": "#/texts/185"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/18", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 20, "bbox": {"l": 135.92466735839844, "t": 416.0727844238281, "r": 546.4456176757812, "b": 103.39019775390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "captions": [{"cref": "#/texts/195"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/19", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 23, "bbox": {"l": 32.17647933959961, "t": 721.7350463867188, "r": 239.21856689453125, "b": 554.0392456054688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/20", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 29, "bbox": {"l": 32.1435661315918, "t": 721.603759765625, "r": 239.34097290039062, "b": 553.8724975585938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/21", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 31, "bbox": {"l": 135.9717559814453, "t": 684.5892944335938, "r": 545.4180908203125, "b": 381.39068603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 177]}], "captions": [{"cref": "#/texts/305"}, {"cref": "#/texts/306"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/22", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 32, "bbox": {"l": 135.58670043945312, "t": 672.6809692382812, "r": 545.5314331054688, "b": 377.8745422363281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "captions": [{"cref": "#/texts/314"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/23", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 33, "bbox": {"l": 136.23851013183594, "t": 714.2366943359375, "r": 507.5733642578125, "b": 444.80059814453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "captions": [{"cref": "#/texts/319"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/24", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 33, "bbox": {"l": 135.7325897216797, "t": 291.0432434082031, "r": 514.99365234375, "b": 70.57550048828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "captions": [{"cref": "#/texts/322"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/25", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 35, "bbox": {"l": 135.64837646484375, "t": 407.8262939453125, "r": 301.2367248535156, "b": 197.24334716796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "captions": [{"cref": "#/texts/348"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/26", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 40, "bbox": {"l": 136.4460906982422, "t": 454.37591552734375, "r": 227.48138427734375, "b": 421.7442932128906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "captions": [{"cref": "#/texts/432"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/27", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 42, "bbox": {"l": 64.00577545166016, "t": 489.8777160644531, "r": 547.3966674804688, "b": 302.76678466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "captions": [{"cref": "#/texts/453"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/28", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 44, "bbox": {"l": 63.801902770996094, "t": 696.6175537109375, "r": 547.11474609375, "b": 621.9678955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "captions": [{"cref": "#/texts/476"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/29", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 44, "bbox": {"l": 63.98516845703125, "t": 364.0950012207031, "r": 530.0479125976562, "b": 145.86041259765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "captions": [{"cref": "#/texts/485"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/30", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 45, "bbox": {"l": 135.93521118164062, "t": 685.1574096679688, "r": 547.290771484375, "b": 454.1453857421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "captions": [{"cref": "#/texts/489"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/31", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 45, "bbox": {"l": 137.24044799804688, "t": 243.1964111328125, "r": 225.1509246826172, "b": 209.55267333984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "captions": [{"cref": "#/texts/496"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/32", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 45, "bbox": {"l": 137.4537811279297, "t": 130.49932861328125, "r": 220.26930236816406, "b": 98.5223388671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "captions": [{"cref": "#/texts/498"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/33", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 46, "bbox": {"l": 136.77099609375, "t": 684.3360595703125, "r": 225.8523406982422, "b": 651.5640869140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "captions": [{"cref": "#/texts/504"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/34", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 46, "bbox": {"l": 136.36477661132812, "t": 572.2852172851562, "r": 228.86305236816406, "b": 539.6805419921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "captions": [{"cref": "#/texts/506"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/35", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 53, "bbox": {"l": 32.17905807495117, "t": 721.395263671875, "r": 238.82225036621094, "b": 553.8535766601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/36", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 55, "bbox": {"l": 136.02655029296875, "t": 562.2583618164062, "r": 494.36669921875, "b": 304.43743896484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/583"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/37", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 56, "bbox": {"l": 136.22354125976562, "t": 672.08544921875, "r": 529.123291015625, "b": 387.0466613769531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "captions": [{"cref": "#/texts/597"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/38", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 58, "bbox": {"l": 136.12950134277344, "t": 664.9310302734375, "r": 451.212158203125, "b": 490.5372619628906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "captions": [{"cref": "#/texts/612"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/39", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 58, "bbox": {"l": 135.7327880859375, "t": 221.14324951171875, "r": 415.3825988769531, "b": 163.08135986328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "captions": [{"cref": "#/texts/627"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/40", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 59, "bbox": {"l": 135.87620544433594, "t": 614.5701293945312, "r": 417.8246765136719, "b": 430.18212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "captions": [{"cref": "#/texts/634"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/41", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 60, "bbox": {"l": 135.36148071289062, "t": 660.7388916015625, "r": 533.2239379882812, "b": 486.9355163574219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "captions": [{"cref": "#/texts/642"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/42", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 60, "bbox": {"l": 134.96737670898438, "t": 421.118408203125, "r": 457.1007080078125, "b": 231.27545166015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "captions": [{"cref": "#/texts/644"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/43", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 61, "bbox": {"l": 63.629615783691406, "t": 468.0149230957031, "r": 546.4091796875, "b": 308.1072998046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "captions": [{"cref": "#/texts/648"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/44", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 62, "bbox": {"l": 135.87826538085938, "t": 684.625, "r": 451.5091857910156, "b": 495.53948974609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "captions": [{"cref": "#/texts/652"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/45", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 62, "bbox": {"l": 63.676544189453125, "t": 223.1519775390625, "r": 546.6666870117188, "b": 69.37261962890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "captions": [{"cref": "#/texts/656"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/46", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 63, "bbox": {"l": 135.87820434570312, "t": 537.927490234375, "r": 343.8211669921875, "b": 299.79180908203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "captions": [{"cref": "#/texts/664"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/47", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 64, "bbox": {"l": 136.17874145507812, "t": 684.837646484375, "r": 527.1444702148438, "b": 403.0865173339844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "captions": [{"cref": "#/texts/670"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/48", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 64, "bbox": {"l": 136.42279052734375, "t": 337.58477783203125, "r": 528.0494384765625, "b": 181.008544921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "captions": [{"cref": "#/texts/672"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/49", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 65, "bbox": {"l": 136.3659210205078, "t": 673.2913208007812, "r": 485.6257629394531, "b": 390.21917724609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/674"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/50", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 65, "bbox": {"l": 136.03775024414062, "t": 321.49188232421875, "r": 484.38336181640625, "b": 208.7786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "captions": [{"cref": "#/texts/676"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/51", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 66, "bbox": {"l": 134.8684539794922, "t": 684.35791015625, "r": 447.195556640625, "b": 519.525390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "captions": [{"cref": "#/texts/682"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/52", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 66, "bbox": {"l": 135.67332458496094, "t": 350.67633056640625, "r": 358.52606201171875, "b": 204.1165771484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/687"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/53", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 67, "bbox": {"l": 136.2171630859375, "t": 656.6912231445312, "r": 474.1829528808594, "b": 430.8948669433594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "captions": [{"cref": "#/texts/690"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/54", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 67, "bbox": {"l": 136.2489471435547, "t": 366.31561279296875, "r": 269.5424499511719, "b": 241.65252685546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "captions": [{"cref": "#/texts/692"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/55", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 68, "bbox": {"l": 135.9110107421875, "t": 596.0236206054688, "r": 454.9993896484375, "b": 386.7077941894531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "captions": [{"cref": "#/texts/699"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/56", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 68, "bbox": {"l": 64.25324249267578, "t": 298.9075012207031, "r": 546.2809448242188, "b": 83.63250732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "captions": [{"cref": "#/texts/701"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/57", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 69, "bbox": {"l": 136.07814025878906, "t": 672.6598510742188, "r": 346.28375244140625, "b": 552.4191284179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "captions": [{"cref": "#/texts/705"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/58", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 69, "bbox": {"l": 136.84584045410156, "t": 488.3529968261719, "r": 547.677978515625, "b": 215.39788818359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "captions": [{"cref": "#/texts/707"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/59", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 70, "bbox": {"l": 136.3912811279297, "t": 630.09716796875, "r": 467.3126220703125, "b": 371.8191833496094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "captions": [{"cref": "#/texts/713"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/60", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 71, "bbox": {"l": 136.22802734375, "t": 533.213134765625, "r": 507.9937438964844, "b": 265.47283935546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "captions": [{"cref": "#/texts/721"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/61", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 72, "bbox": {"l": 63.957679748535156, "t": 521.5117797851562, "r": 540.6087646484375, "b": 209.08831787109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "captions": [{"cref": "#/texts/729"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/62", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 73, "bbox": {"l": 63.73027801513672, "t": 445.1194763183594, "r": 535.9136352539062, "b": 80.55084228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "captions": [{"cref": "#/texts/738"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/63", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 74, "bbox": {"l": 64.10432434082031, "t": 672.0056762695312, "r": 545.318603515625, "b": 520.585693359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "captions": [{"cref": "#/texts/744"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/64", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 74, "bbox": {"l": 136.1191864013672, "t": 396.8784484863281, "r": 456.9282531738281, "b": 223.3760986328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "captions": [{"cref": "#/texts/748"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/65", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 75, "bbox": {"l": 136.62161254882812, "t": 603.1398315429688, "r": 533.3434448242188, "b": 189.4141845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "captions": [{"cref": "#/texts/754"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/66", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 76, "bbox": {"l": 64.02095031738281, "t": 684.545166015625, "r": 547.409912109375, "b": 611.1890258789062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "captions": [{"cref": "#/texts/765"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/67", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 76, "bbox": {"l": 136.29519653320312, "t": 429.86224365234375, "r": 545.3217163085938, "b": 323.4537048339844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "captions": [{"cref": "#/texts/770"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/68", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 76, "bbox": {"l": 64.00347900390625, "t": 258.30792236328125, "r": 546.5211181640625, "b": 191.1029052734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "captions": [{"cref": "#/texts/772"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/69", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 77, "bbox": {"l": 63.89818572998047, "t": 622.65625, "r": 543.365966796875, "b": 141.4451904296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "captions": [{"cref": "#/texts/779"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/70", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 78, "bbox": {"l": 63.67375564575195, "t": 684.8529052734375, "r": 546.8531494140625, "b": 408.3074645996094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "captions": [{"cref": "#/texts/783"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/71", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 78, "bbox": {"l": 63.88129806518555, "t": 330.7875061035156, "r": 543.3204956054688, "b": 191.6788330078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "captions": [{"cref": "#/texts/785"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/72", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 79, "bbox": {"l": 135.9375457763672, "t": 618.48974609375, "r": 546.1521606445312, "b": 459.0491638183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "captions": [{"cref": "#/texts/791"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/73", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 79, "bbox": {"l": 135.82846069335938, "t": 381.9046325683594, "r": 534.9657592773438, "b": 219.2965087890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "captions": [{"cref": "#/texts/793"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/74", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 80, "bbox": {"l": 136.07981872558594, "t": 672.8583984375, "r": 547.2720947265625, "b": 515.8709106445312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "captions": [{"cref": "#/texts/797"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/75", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 80, "bbox": {"l": 63.96348190307617, "t": 379.94091796875, "r": 546.8929443359375, "b": 210.73712158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "captions": [{"cref": "#/texts/801"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/76", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 81, "bbox": {"l": 136.34481811523438, "t": 684.5108642578125, "r": 467.5279846191406, "b": 553.552001953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "captions": [{"cref": "#/texts/805"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/77", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 81, "bbox": {"l": 63.714664459228516, "t": 464.8936767578125, "r": 502.0154113769531, "b": 196.12652587890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "captions": [{"cref": "#/texts/807"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/78", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 82, "bbox": {"l": 136.04849243164062, "t": 448.3782653808594, "r": 358.4311218261719, "b": 353.65679931640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "captions": [{"cref": "#/texts/823"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/79", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 82, "bbox": {"l": 135.9881591796875, "t": 300.3863525390625, "r": 393.8948669433594, "b": 166.849853515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "captions": [{"cref": "#/texts/825"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/80", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 83, "bbox": {"l": 135.97964477539062, "t": 227.32598876953125, "r": 354.29364013671875, "b": 106.57257080078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "captions": [{"cref": "#/texts/833"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/81", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 84, "bbox": {"l": 136.23712158203125, "t": 684.7537841796875, "r": 385.9791564941406, "b": 566.5540771484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 83]}], "captions": [{"cref": "#/texts/839"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/82", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 84, "bbox": {"l": 64.11683654785156, "t": 502.3402099609375, "r": 546.5642700195312, "b": 353.8417053222656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "captions": [{"cref": "#/texts/841"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/83", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 84, "bbox": {"l": 135.7608642578125, "t": 256.17401123046875, "r": 362.02239990234375, "b": 122.27850341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "captions": [{"cref": "#/texts/845"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/84", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 85, "bbox": {"l": 135.92535400390625, "t": 684.47216796875, "r": 388.818115234375, "b": 572.8428344726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "captions": [{"cref": "#/texts/847"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/85", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 85, "bbox": {"l": 64.41838073730469, "t": 495.8370361328125, "r": 548.2760009765625, "b": 121.37432861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 76]}], "captions": [{"cref": "#/texts/849"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/86", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 86, "bbox": {"l": 136.20846557617188, "t": 653.039794921875, "r": 352.89752197265625, "b": 569.3597412109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "captions": [{"cref": "#/texts/857"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/87", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 86, "bbox": {"l": 136.3792266845703, "t": 504.6051940917969, "r": 382.5545654296875, "b": 423.29107666015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "captions": [{"cref": "#/texts/859"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/88", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 87, "bbox": {"l": 136.11729431152344, "t": 207.35791015625, "r": 354.23046875, "b": 118.21148681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "captions": [{"cref": "#/texts/865"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/89", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 88, "bbox": {"l": 135.9663848876953, "t": 672.871826171875, "r": 547.538818359375, "b": 570.4339599609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "captions": [{"cref": "#/texts/871"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/90", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 88, "bbox": {"l": 136.12271118164062, "t": 506.2840881347656, "r": 395.9803466796875, "b": 272.61468505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "captions": [{"cref": "#/texts/873"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/91", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 88, "bbox": {"l": 136.00576782226562, "t": 207.84942626953125, "r": 382.0115966796875, "b": 107.967529296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "captions": [{"cref": "#/texts/875"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/92", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 89, "bbox": {"l": 64.07161712646484, "t": 684.5228271484375, "r": 546.6607055664062, "b": 541.043212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "captions": [{"cref": "#/texts/877"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/93", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 92, "bbox": {"l": 136.32431030273438, "t": 656.0142211914062, "r": 399.8092956542969, "b": 293.3769226074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "captions": [{"cref": "#/texts/898"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/94", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 93, "bbox": {"l": 136.5016632080078, "t": 672.7508544921875, "r": 545.4508666992188, "b": 314.4587707519531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "captions": [{"cref": "#/texts/900"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/95", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 93, "bbox": {"l": 64.27847290039062, "t": 238.41864013671875, "r": 506.39263916015625, "b": 127.9129638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "captions": [{"cref": "#/texts/902"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/96", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 94, "bbox": {"l": 64.13593292236328, "t": 672.543701171875, "r": 508.70513916015625, "b": 557.0508422851562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "captions": [{"cref": "#/texts/906"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/97", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 95, "bbox": {"l": 32.17748260498047, "t": 721.4505004882812, "r": 239.63507080078125, "b": 553.986572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/98", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 97, "bbox": {"l": 135.8197021484375, "t": 354.0295104980469, "r": 527.1633911132812, "b": 72.09771728515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "captions": [{"cref": "#/texts/955"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/99", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 101, "bbox": {"l": 32.03302764892578, "t": 721.64599609375, "r": 238.4545135498047, "b": 553.9920654296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/100", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 103, "bbox": {"l": 136.07940673828125, "t": 536.4542846679688, "r": 412.541015625, "b": 262.60601806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "captions": [{"cref": "#/texts/1021"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/101", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 104, "bbox": {"l": 135.86012268066406, "t": 616.7017211914062, "r": 497.2643127441406, "b": 502.79217529296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "captions": [{"cref": "#/texts/1026"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/102", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 105, "bbox": {"l": 135.99375915527344, "t": 636.4747314453125, "r": 491.57470703125, "b": 388.2860107421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "captions": [{"cref": "#/texts/1040"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/103", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 106, "bbox": {"l": 136.0791015625, "t": 636.4277954101562, "r": 499.302978515625, "b": 381.560791015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "captions": [{"cref": "#/texts/1050"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/104", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 107, "bbox": {"l": 136.0598907470703, "t": 660.60791015625, "r": 501.41558837890625, "b": 407.5401916503906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "captions": [{"cref": "#/texts/1057"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/105", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 108, "bbox": {"l": 136.11366271972656, "t": 684.66796875, "r": 502.8105773925781, "b": 475.9753112792969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "captions": [{"cref": "#/texts/1066"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/106", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 108, "bbox": {"l": 135.9275665283203, "t": 381.38775634765625, "r": 464.8796691894531, "b": 169.27420043945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "captions": [{"cref": "#/texts/1069"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/107", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 109, "bbox": {"l": 136.01123046875, "t": 604.3631591796875, "r": 470.03668212890625, "b": 371.52569580078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "captions": [{"cref": "#/texts/1072"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/108", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 110, "bbox": {"l": 136.0685272216797, "t": 634.4288330078125, "r": 478.2557678222656, "b": 419.78314208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "captions": [{"cref": "#/texts/1077"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/109", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 111, "bbox": {"l": 136.01914978027344, "t": 608.7029418945312, "r": 483.0831298828125, "b": 370.34381103515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "captions": [{"cref": "#/texts/1082"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/110", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 112, "bbox": {"l": 136.2607879638672, "t": 635.3245239257812, "r": 484.0173034667969, "b": 397.6853332519531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "captions": [{"cref": "#/texts/1087"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/111", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 112, "bbox": {"l": 135.89076232910156, "t": 307.9719543457031, "r": 485.4429931640625, "b": 72.65142822265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "captions": [{"cref": "#/texts/1089"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/112", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 114, "bbox": {"l": 64.05506134033203, "t": 696.6568603515625, "r": 546.421142578125, "b": 442.6709899902344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "captions": [{"cref": "#/texts/1108"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/113", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 114, "bbox": {"l": 64.03382873535156, "t": 389.9870300292969, "r": 546.9832153320312, "b": 249.7725830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/1110"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/114", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 114, "bbox": {"l": 63.78765869140625, "t": 185.0380859375, "r": 546.1412353515625, "b": 106.41729736328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "captions": [{"cref": "#/texts/1112"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/115", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 115, "bbox": {"l": 63.79280090332031, "t": 684.9020385742188, "r": 547.32080078125, "b": 574.2643432617188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "captions": [{"cref": "#/texts/1116"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/116", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 116, "bbox": {"l": 136.10072326660156, "t": 684.5394897460938, "r": 547.119140625, "b": 413.0294189453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "captions": [{"cref": "#/texts/1127"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/117", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 116, "bbox": {"l": 64.22953796386719, "t": 348.64111328125, "r": 510.0937805175781, "b": 237.27978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "captions": [{"cref": "#/texts/1129"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/118", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 118, "bbox": {"l": 136.61915588378906, "t": 529.6680908203125, "r": 491.90362548828125, "b": 262.054443359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "captions": [{"cref": "#/texts/1179"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/119", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 119, "bbox": {"l": 136.2811279296875, "t": 685.1424560546875, "r": 508.5420227050781, "b": 403.9203796386719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/1183"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/120", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 122, "bbox": {"l": 136.19158935546875, "t": 660.42138671875, "r": 506.083740234375, "b": 391.0660705566406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "captions": [{"cref": "#/texts/1226"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/121", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 123, "bbox": {"l": 135.89947509765625, "t": 660.6359252929688, "r": 513.2355346679688, "b": 387.1663513183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "captions": [{"cref": "#/texts/1228"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/122", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 127, "bbox": {"l": 136.06109619140625, "t": 515.9075927734375, "r": 509.6692199707031, "b": 230.63134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "captions": [{"cref": "#/texts/1289"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/123", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 129, "bbox": {"l": 32.251461029052734, "t": 721.334716796875, "r": 239.58355712890625, "b": 553.5812377929688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/124", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 132, "bbox": {"l": 136.1027374267578, "t": 576.7725830078125, "r": 522.8739013671875, "b": 338.3410949707031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "captions": [{"cref": "#/texts/1335"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/125", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 135, "bbox": {"l": 32.17782974243164, "t": 721.4134521484375, "r": 238.9773712158203, "b": 553.691162109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/126", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 137, "bbox": {"l": 31.834123611450195, "t": 721.0397338867188, "r": 238.2196044921875, "b": 553.590576171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/127", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 146, "bbox": {"l": 485.1698303222656, "t": 766.7407836914062, "r": 566.2962036132812, "b": 737.3182983398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/128", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 146, "bbox": {"l": 474.35540771484375, "t": 711.9486694335938, "r": 592.2726440429688, "b": 602.1873779296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}], "tables": [{"self_ref": "#/tables/0", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 5, "bbox": {"l": 136.15103149414062, "t": 659.9697265625, "r": 549.8472290039062, "b": 76.34722900390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 136.8000030517578, "t": 659.3513793945312, "r": 172.89404296875, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01951599121094, "t": 659.3513793945312, "r": 547.1898193359375, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901123046875, "t": 646.8715209960938, "r": 189.86537170410156, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.3968505859375, "t": 646.8715209960938, "r": 547.182861328125, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901123046875, "t": 624.3718872070312, "r": 279.3973083496094, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.6194152832031, "t": 624.3718872070312, "r": 547.1907958984375, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901123046875, "t": 601.8722534179688, "r": 172.84423828125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852416992188, "t": 601.8722534179688, "r": 547.182861328125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803466796875, "t": 589.3923950195312, "r": 547.1808471679688, "b": 580.1793823242188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803466796875, "t": 576.852783203125, "r": 339.18292236328125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.714111328125, "t": 576.852783203125, "r": 547.1387939453125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803466796875, "t": 564.3729248046875, "r": 529.9950561523438, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5494995117188, "t": 564.3729248046875, "r": 547.1978759765625, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 551.89306640625, "r": 284.0286560058594, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449462890625, "t": 551.89306640625, "r": 547.1211547851562, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 529.3934326171875, "r": 536.0958862304688, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6468505859375, "t": 529.3934326171875, "r": 547.1978149414062, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808044433594, "t": 517.3936157226562, "r": 549.8472290039062, "b": 508.18060302734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 504.85394287109375, "r": 536.1293334960938, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6611328125, "t": 504.85394287109375, "r": 547.19287109375, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 492.3740539550781, "r": 549.8472290039062, "b": 483.16107177734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 479.8941650390625, "r": 536.0551147460938, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015014648438, "t": 479.8941650390625, "r": 547.14794921875, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 467.3545227050781, "r": 536.080078125, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.635498046875, "t": 467.3545227050781, "r": 547.19091796875, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7970428466797, "t": 444.8548889160156, "r": 536.0908813476562, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.642822265625, "t": 444.8548889160156, "r": 547.1947631835938, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7970428466797, "t": 432.8550720214844, "r": 536.1271362304688, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6658935546875, "t": 432.8550720214844, "r": 547.2047119140625, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 420.37518310546875, "r": 535.9526977539062, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5558471679688, "t": 420.37518310546875, "r": 547.1590576171875, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 407.8952941894531, "r": 536.0410766601562, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.595947265625, "t": 407.8952941894531, "r": 547.1508178710938, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 395.35565185546875, "r": 536.0748901367188, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6302490234375, "t": 395.35565185546875, "r": 547.1856079101562, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 382.8757629394531, "r": 411.2704772949219, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.8177490234375, "t": 382.8757629394531, "r": 547.1786499023438, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 370.3958740234375, "r": 536.035888671875, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5989379882812, "t": 370.3958740234375, "r": 547.1619262695312, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 357.8562316894531, "r": 530.5731811523438, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1044311523438, "t": 357.8562316894531, "r": 547.1668701171875, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 345.3763427734375, "r": 530.5352172851562, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755004882812, "t": 345.3763427734375, "r": 547.156005859375, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7970428466797, "t": 332.8964538574219, "r": 547.256591796875, "b": 323.6834716796875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 310.3968200683594, "r": 530.5396118164062, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0916748046875, "t": 310.3968200683594, "r": 547.19580078125, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 298.3970031738281, "r": 530.4808959960938, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248046875, "t": 298.3970031738281, "r": 547.1657104492188, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 285.85736083984375, "r": 378.2078552246094, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713134765625, "t": 285.85736083984375, "r": 547.15576171875, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 273.3774719238281, "r": 530.4347534179688, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9962158203125, "t": 273.3774719238281, "r": 547.1190795898438, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 260.83782958984375, "r": 530.528076171875, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0670166015625, "t": 260.83782958984375, "r": 547.1448364257812, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 248.3579559326172, "r": 530.4978637695312, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0518798828125, "t": 248.3579559326172, "r": 547.159912109375, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 235.87808227539062, "r": 530.5602416992188, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912109375, "t": 235.87808227539062, "r": 547.1768798828125, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 223.33843994140625, "r": 530.5302734375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0615234375, "t": 223.33843994140625, "r": 547.1240234375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 210.8585662841797, "r": 530.6299438476562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1631469726562, "t": 210.8585662841797, "r": 547.2295532226562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.3206481933594, "t": 198.37869262695312, "r": 547.10009765625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701232910156, "t": 198.37869262695312, "r": 394.78179931640625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 173.3591766357422, "r": 530.4913940429688, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0463256835938, "t": 173.3591766357422, "r": 547.1561889648438, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 160.87930297851562, "r": 530.5645751953125, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0960083007812, "t": 160.87930297851562, "r": 547.1587524414062, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 148.33966064453125, "r": 530.5569458007812, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0881958007812, "t": 148.33966064453125, "r": 547.1507568359375, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 135.8597869873047, "r": 530.5341186523438, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.072998046875, "t": 135.8597869873047, "r": 547.15087890625, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 123.37991333007812, "r": 339.4510498046875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.9899597167969, "t": 123.37991333007812, "r": 547.160888671875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 110.84027099609375, "r": 530.541015625, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.087646484375, "t": 110.84027099609375, "r": 547.1808471679688, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 98.36038970947266, "r": 530.5750732421875, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1066284179688, "t": 98.36038970947266, "r": 547.169677734375, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 85.88050842285156, "r": 530.436279296875, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9984741210938, "t": 85.88050842285156, "r": 547.1228637695312, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 43, "num_cols": 2, "grid": [[{"bbox": {"l": 136.8000030517578, "t": 659.3513793945312, "r": 172.89404296875, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01951599121094, "t": 659.3513793945312, "r": 547.1898193359375, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79901123046875, "t": 646.8715209960938, "r": 189.86537170410156, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.3968505859375, "t": 646.8715209960938, "r": 547.182861328125, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79901123046875, "t": 624.3718872070312, "r": 279.3973083496094, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.6194152832031, "t": 624.3718872070312, "r": 547.1907958984375, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79901123046875, "t": 601.8722534179688, "r": 172.84423828125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852416992188, "t": 601.8722534179688, "r": 547.182861328125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79803466796875, "t": 589.3923950195312, "r": 547.1808471679688, "b": 580.1793823242188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79803466796875, "t": 576.852783203125, "r": 339.18292236328125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.714111328125, "t": 576.852783203125, "r": 547.1387939453125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79803466796875, "t": 564.3729248046875, "r": 529.9950561523438, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5494995117188, "t": 564.3729248046875, "r": 547.1978759765625, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 551.89306640625, "r": 284.0286560058594, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449462890625, "t": 551.89306640625, "r": 547.1211547851562, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 529.3934326171875, "r": 536.0958862304688, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6468505859375, "t": 529.3934326171875, "r": 547.1978149414062, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79808044433594, "t": 517.3936157226562, "r": 549.8472290039062, "b": 508.18060302734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 504.85394287109375, "r": 536.1293334960938, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6611328125, "t": 504.85394287109375, "r": 547.19287109375, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 492.3740539550781, "r": 549.8472290039062, "b": 483.16107177734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 479.8941650390625, "r": 536.0551147460938, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015014648438, "t": 479.8941650390625, "r": 547.14794921875, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 467.3545227050781, "r": 536.080078125, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.635498046875, "t": 467.3545227050781, "r": 547.19091796875, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7970428466797, "t": 444.8548889160156, "r": 536.0908813476562, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.642822265625, "t": 444.8548889160156, "r": 547.1947631835938, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7970428466797, "t": 432.8550720214844, "r": 536.1271362304688, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6658935546875, "t": 432.8550720214844, "r": 547.2047119140625, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 420.37518310546875, "r": 535.9526977539062, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5558471679688, "t": 420.37518310546875, "r": 547.1590576171875, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 407.8952941894531, "r": 536.0410766601562, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.595947265625, "t": 407.8952941894531, "r": 547.1508178710938, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 395.35565185546875, "r": 536.0748901367188, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6302490234375, "t": 395.35565185546875, "r": 547.1856079101562, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 382.8757629394531, "r": 411.2704772949219, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.8177490234375, "t": 382.8757629394531, "r": 547.1786499023438, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 370.3958740234375, "r": 536.035888671875, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5989379882812, "t": 370.3958740234375, "r": 547.1619262695312, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 357.8562316894531, "r": 530.5731811523438, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1044311523438, "t": 357.8562316894531, "r": 547.1668701171875, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 345.3763427734375, "r": 530.5352172851562, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755004882812, "t": 345.3763427734375, "r": 547.156005859375, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7970428466797, "t": 332.8964538574219, "r": 547.256591796875, "b": 323.6834716796875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 310.3968200683594, "r": 530.5396118164062, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0916748046875, "t": 310.3968200683594, "r": 547.19580078125, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 298.3970031738281, "r": 530.4808959960938, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248046875, "t": 298.3970031738281, "r": 547.1657104492188, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 285.85736083984375, "r": 378.2078552246094, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713134765625, "t": 285.85736083984375, "r": 547.15576171875, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 273.3774719238281, "r": 530.4347534179688, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9962158203125, "t": 273.3774719238281, "r": 547.1190795898438, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 260.83782958984375, "r": 530.528076171875, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0670166015625, "t": 260.83782958984375, "r": 547.1448364257812, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 248.3579559326172, "r": 530.4978637695312, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0518798828125, "t": 248.3579559326172, "r": 547.159912109375, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 235.87808227539062, "r": 530.5602416992188, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912109375, "t": 235.87808227539062, "r": 547.1768798828125, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 223.33843994140625, "r": 530.5302734375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0615234375, "t": 223.33843994140625, "r": 547.1240234375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 210.8585662841797, "r": 530.6299438476562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1631469726562, "t": 210.8585662841797, "r": 547.2295532226562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.3206481933594, "t": 198.37869262695312, "r": 547.10009765625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79701232910156, "t": 198.37869262695312, "r": 394.78179931640625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 173.3591766357422, "r": 530.4913940429688, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0463256835938, "t": 173.3591766357422, "r": 547.1561889648438, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 160.87930297851562, "r": 530.5645751953125, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0960083007812, "t": 160.87930297851562, "r": 547.1587524414062, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 148.33966064453125, "r": 530.5569458007812, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0881958007812, "t": 148.33966064453125, "r": 547.1507568359375, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 135.8597869873047, "r": 530.5341186523438, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.072998046875, "t": 135.8597869873047, "r": 547.15087890625, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 123.37991333007812, "r": 339.4510498046875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.9899597167969, "t": 123.37991333007812, "r": 547.160888671875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 110.84027099609375, "r": 530.541015625, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.087646484375, "t": 110.84027099609375, "r": 547.1808471679688, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 98.36038970947266, "r": 530.5750732421875, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1066284179688, "t": 98.36038970947266, "r": 547.169677734375, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 85.88050842285156, "r": 530.436279296875, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9984741210938, "t": 85.88050842285156, "r": 547.1228637695312, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/1", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 6, "bbox": {"l": 135.92572021484375, "t": 721.1874389648438, "r": 547.7196044921875, "b": 57.76904296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 136.8000030517578, "t": 720.4913330078125, "r": 530.5958862304688, "b": 711.2783203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1328125, "t": 720.4913330078125, "r": 547.2067260742188, "b": 711.2783203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80001831054688, "t": 708.4915161132812, "r": 530.5200805664062, "b": 699.2785034179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0591430664062, "t": 708.4915161132812, "r": 547.13720703125, "b": 699.2785034179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80001831054688, "t": 696.0116577148438, "r": 372.6776123046875, "b": 686.7986450195312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.2168884277344, "t": 696.0116577148438, "r": 547.1648559570312, "b": 686.7986450195312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80001831054688, "t": 683.4720458984375, "r": 530.5362548828125, "b": 674.259033203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0903930664062, "t": 683.4720458984375, "r": 547.19873046875, "b": 674.259033203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 670.9921875, "r": 400.5744323730469, "b": 661.7791748046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10546875, "t": 670.9921875, "r": 547.14697265625, "b": 661.7791748046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 658.5123291015625, "r": 516.9255981445312, "b": 649.29931640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.4603881835938, "t": 658.5123291015625, "r": 547.3670654296875, "b": 649.29931640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 645.9727172851562, "r": 530.5675659179688, "b": 636.7597045898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0989379882812, "t": 645.9727172851562, "r": 547.1617431640625, "b": 636.7597045898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 633.4928588867188, "r": 411.620849609375, "b": 624.2798461914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.15240478515625, "t": 633.4928588867188, "r": 547.1438598632812, "b": 624.2798461914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 621.0130004882812, "r": 530.5370483398438, "b": 611.7999877929688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0759887695312, "t": 621.0130004882812, "r": 547.1538696289062, "b": 611.7999877929688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 608.473388671875, "r": 339.45404052734375, "b": 599.2603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.9929504394531, "t": 608.473388671875, "r": 547.1638793945312, "b": 599.2603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 595.9935302734375, "r": 530.539306640625, "b": 586.780517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.078125, "t": 595.9935302734375, "r": 547.15576171875, "b": 586.780517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 570.9740600585938, "r": 530.4820556640625, "b": 561.7610473632812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.036376953125, "t": 570.9740600585938, "r": 547.14501953125, "b": 561.7610473632812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 558.4942016601562, "r": 530.44921875, "b": 549.2811889648438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0194702148438, "t": 558.4942016601562, "r": 547.1600341796875, "b": 549.2811889648438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 546.0143432617188, "r": 530.4335327148438, "b": 536.8013305664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0037231445312, "t": 546.0143432617188, "r": 547.1441040039062, "b": 536.8013305664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80001831054688, "t": 523.5147094726562, "r": 530.5385131835938, "b": 514.3016967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0916137695312, "t": 523.5147094726562, "r": 547.1978149414062, "b": 514.3016967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524169921875, "t": 511.5148620605469, "r": 547.1768798828125, "b": 502.3018798828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80001831054688, "t": 486.4953308105469, "r": 530.4937744140625, "b": 477.2823486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0474853515625, "t": 486.4953308105469, "r": 547.1549072265625, "b": 477.2823486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80001831054688, "t": 474.01544189453125, "r": 530.5643310546875, "b": 464.8024597167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0958251953125, "t": 474.01544189453125, "r": 547.158935546875, "b": 464.8024597167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 461.4757995605469, "r": 530.4598999023438, "b": 452.2628173828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0228271484375, "t": 461.4757995605469, "r": 547.148681640625, "b": 452.2628173828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0770874023438, "t": 448.99591064453125, "r": 547.1549682617188, "b": 439.7829284667969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018005371094, "t": 448.99591064453125, "r": 530.5381469726562, "b": 427.30303955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.5494384765625, "t": 251.95913696289062, "r": 547.1646118164062, "b": 242.7461395263672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0574340820312, "t": 436.5160217285156, "r": 547.182861328125, "b": 427.30303955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80001831054688, "t": 414.0163879394531, "r": 530.5385131835938, "b": 404.80340576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 400.59185791015625, "t": 364.51715087890625, "r": 547.1687622070312, "b": 342.7645263671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003356933594, "t": 389.4769287109375, "r": 530.5139770507812, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2001953125, "t": 376.9970397949219, "r": 400.1688232421875, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0606079101562, "t": 376.9970397949219, "r": 547.15380859375, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003356933594, "t": 351.9775085449219, "r": 530.5997924804688, "b": 330.2846374511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1390991210938, "t": 339.49761962890625, "r": 547.2177734375, "b": 330.2846374511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.2001953125, "t": 327.0177307128906, "r": 547.2595825195312, "b": 317.80474853515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016479492188, "t": 314.47808837890625, "r": 547.2595825195312, "b": 305.2651062011719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016479492188, "t": 301.9981994628906, "r": 530.481201171875, "b": 292.78521728515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.051025390625, "t": 301.9981994628906, "r": 547.1907348632812, "b": 292.78521728515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.8000030517578, "t": 289.45855712890625, "r": 372.92724609375, "b": 280.2455749511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.115966796875, "t": 289.45855712890625, "r": 547.1796264648438, "b": 280.2455749511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 378.45904541015625, "t": 289.45855712890625, "r": 530.5841674804688, "b": 280.2455749511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 178.8563232421875, "t": 276.9786682128906, "r": 547.1707763671875, "b": 267.76568603515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20016479492188, "t": 264.498779296875, "r": 530.5306396484375, "b": 255.28578186035156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.093017578125, "t": 264.498779296875, "r": 547.2177124023438, "b": 255.28578186035156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013427734375, "t": 251.95913696289062, "r": 525.0111083984375, "b": 242.7461395263672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 136.7999725341797, "t": 239.47926330566406, "r": 524.8056640625, "b": 230.26626586914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905029296875, "t": 239.47926330566406, "r": 547.14501953125, "b": 230.26626586914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013427734375, "t": 214.45974731445312, "r": 524.8568115234375, "b": 205.2467498779297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.4345092773438, "t": 214.45974731445312, "r": 547.1676635742188, "b": 205.2467498779297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5247192382812, "t": 201.97987365722656, "r": 547.1878051757812, "b": 192.76687622070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013427734375, "t": 201.97987365722656, "r": 524.9703979492188, "b": 180.28700256347656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 136.7999725341797, "t": 189.5, "r": 150.70437622070312, "b": 180.28700256347656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.4845581054688, "t": 189.5, "r": 547.1698608398438, "b": 180.28700256347656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43701171875, "t": 176.96035766601562, "r": 547.1228637695312, "b": 167.7473602294922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999725341797, "t": 176.96035766601562, "r": 525.0469970703125, "b": 155.26748657226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.5781860351562, "t": 164.48048400878906, "r": 547.1717529296875, "b": 155.26748657226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4888916015625, "t": 152.0006103515625, "r": 547.19970703125, "b": 142.78761291503906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359375, "t": 126.98108673095703, "r": 547.1167602539062, "b": 117.7680892944336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.662841796875, "t": 114.50121307373047, "r": 547.258544921875, "b": 105.2882080078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5514526367188, "t": 66.98204803466797, "r": 547.2017211914062, "b": 57.76904296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.3995361328125, "t": 89.481689453125, "r": 547.1510009765625, "b": 80.26868438720703, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79995727539062, "t": 66.98204803466797, "r": 525.0014038085938, "b": 57.76904296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}], "num_rows": 47, "num_cols": 2, "grid": [[{"bbox": {"l": 136.8000030517578, "t": 720.4913330078125, "r": 530.5958862304688, "b": 711.2783203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1328125, "t": 720.4913330078125, "r": 547.2067260742188, "b": 711.2783203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80001831054688, "t": 708.4915161132812, "r": 530.5200805664062, "b": 699.2785034179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0591430664062, "t": 708.4915161132812, "r": 547.13720703125, "b": 699.2785034179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80001831054688, "t": 696.0116577148438, "r": 372.6776123046875, "b": 686.7986450195312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.2168884277344, "t": 696.0116577148438, "r": 547.1648559570312, "b": 686.7986450195312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80001831054688, "t": 683.4720458984375, "r": 530.5362548828125, "b": 674.259033203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0903930664062, "t": 683.4720458984375, "r": 547.19873046875, "b": 674.259033203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 670.9921875, "r": 400.5744323730469, "b": 661.7791748046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10546875, "t": 670.9921875, "r": 547.14697265625, "b": 661.7791748046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 658.5123291015625, "r": 516.9255981445312, "b": 649.29931640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.4603881835938, "t": 658.5123291015625, "r": 547.3670654296875, "b": 649.29931640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 645.9727172851562, "r": 530.5675659179688, "b": 636.7597045898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0989379882812, "t": 645.9727172851562, "r": 547.1617431640625, "b": 636.7597045898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 633.4928588867188, "r": 411.620849609375, "b": 624.2798461914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.15240478515625, "t": 633.4928588867188, "r": 547.1438598632812, "b": 624.2798461914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 621.0130004882812, "r": 530.5370483398438, "b": 611.7999877929688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0759887695312, "t": 621.0130004882812, "r": 547.1538696289062, "b": 611.7999877929688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 608.473388671875, "r": 339.45404052734375, "b": 599.2603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.9929504394531, "t": 608.473388671875, "r": 547.1638793945312, "b": 599.2603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 595.9935302734375, "r": 530.539306640625, "b": 586.780517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.078125, "t": 595.9935302734375, "r": 547.15576171875, "b": 586.780517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 570.9740600585938, "r": 530.4820556640625, "b": 561.7610473632812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.036376953125, "t": 570.9740600585938, "r": 547.14501953125, "b": 561.7610473632812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 558.4942016601562, "r": 530.44921875, "b": 549.2811889648438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0194702148438, "t": 558.4942016601562, "r": 547.1600341796875, "b": 549.2811889648438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 546.0143432617188, "r": 530.4335327148438, "b": 536.8013305664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0037231445312, "t": 546.0143432617188, "r": 547.1441040039062, "b": 536.8013305664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80001831054688, "t": 523.5147094726562, "r": 530.5385131835938, "b": 514.3016967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0916137695312, "t": 523.5147094726562, "r": 547.1978149414062, "b": 514.3016967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524169921875, "t": 511.5148620605469, "r": 547.1768798828125, "b": 502.3018798828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80001831054688, "t": 486.4953308105469, "r": 530.4937744140625, "b": 477.2823486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0474853515625, "t": 486.4953308105469, "r": 547.1549072265625, "b": 477.2823486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80001831054688, "t": 474.01544189453125, "r": 530.5643310546875, "b": 464.8024597167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0958251953125, "t": 474.01544189453125, "r": 547.158935546875, "b": 464.8024597167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 461.4757995605469, "r": 530.4598999023438, "b": 452.2628173828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.0228271484375, "t": 461.4757995605469, "r": 547.148681640625, "b": 452.2628173828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0770874023438, "t": 448.99591064453125, "r": 547.1549682617188, "b": 439.7829284667969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20018005371094, "t": 448.99591064453125, "r": 530.5381469726562, "b": 427.30303955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.5494384765625, "t": 251.95913696289062, "r": 547.1646118164062, "b": 242.7461395263672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0574340820312, "t": 436.5160217285156, "r": 547.182861328125, "b": 427.30303955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80001831054688, "t": 414.0163879394531, "r": 530.5385131835938, "b": 404.80340576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 400.59185791015625, "t": 364.51715087890625, "r": 547.1687622070312, "b": 342.7645263671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80003356933594, "t": 389.4769287109375, "r": 530.5139770507812, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 136.80003356933594, "t": 389.4769287109375, "r": 530.5139770507812, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}], [{"bbox": {"l": 151.2001953125, "t": 376.9970397949219, "r": 400.1688232421875, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2001953125, "t": 376.9970397949219, "r": 400.1688232421875, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0606079101562, "t": 376.9970397949219, "r": 547.15380859375, "b": 367.7840576171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.80003356933594, "t": 351.9775085449219, "r": 530.5997924804688, "b": 330.2846374511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1390991210938, "t": 339.49761962890625, "r": 547.2177734375, "b": 330.2846374511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.2001953125, "t": 327.0177307128906, "r": 547.2595825195312, "b": 317.80474853515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2001953125, "t": 327.0177307128906, "r": 547.2595825195312, "b": 317.80474853515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}], [{"bbox": {"l": 151.20016479492188, "t": 314.47808837890625, "r": 547.2595825195312, "b": 305.2651062011719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016479492188, "t": 314.47808837890625, "r": 547.2595825195312, "b": 305.2651062011719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}], [{"bbox": {"l": 151.20016479492188, "t": 301.9981994628906, "r": 530.481201171875, "b": 292.78521728515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.051025390625, "t": 301.9981994628906, "r": 547.1907348632812, "b": 292.78521728515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.8000030517578, "t": 289.45855712890625, "r": 372.92724609375, "b": 280.2455749511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.115966796875, "t": 289.45855712890625, "r": 547.1796264648438, "b": 280.2455749511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 378.45904541015625, "t": 289.45855712890625, "r": 530.5841674804688, "b": 280.2455749511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 178.8563232421875, "t": 276.9786682128906, "r": 547.1707763671875, "b": 267.76568603515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20016479492188, "t": 264.498779296875, "r": 530.5306396484375, "b": 255.28578186035156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.093017578125, "t": 264.498779296875, "r": 547.2177124023438, "b": 255.28578186035156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20013427734375, "t": 251.95913696289062, "r": 525.0111083984375, "b": 242.7461395263672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20013427734375, "t": 251.95913696289062, "r": 525.0111083984375, "b": 242.7461395263672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}], [{"bbox": {"l": 136.7999725341797, "t": 239.47926330566406, "r": 524.8056640625, "b": 230.26626586914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905029296875, "t": 239.47926330566406, "r": 547.14501953125, "b": 230.26626586914062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20013427734375, "t": 214.45974731445312, "r": 524.8568115234375, "b": 205.2467498779297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.4345092773438, "t": 214.45974731445312, "r": 547.1676635742188, "b": 205.2467498779297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5247192382812, "t": 201.97987365722656, "r": 547.1878051757812, "b": 192.76687622070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20013427734375, "t": 201.97987365722656, "r": 524.9703979492188, "b": 180.28700256347656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20013427734375, "t": 201.97987365722656, "r": 524.9703979492188, "b": 180.28700256347656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}], [{"bbox": {"l": 136.7999725341797, "t": 189.5, "r": 150.70437622070312, "b": 180.28700256347656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.4845581054688, "t": 189.5, "r": 547.1698608398438, "b": 180.28700256347656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43701171875, "t": 176.96035766601562, "r": 547.1228637695312, "b": 167.7473602294922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7999725341797, "t": 176.96035766601562, "r": 525.0469970703125, "b": 155.26748657226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.5781860351562, "t": 164.48048400878906, "r": 547.1717529296875, "b": 155.26748657226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4888916015625, "t": 152.0006103515625, "r": 547.19970703125, "b": 142.78761291503906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359375, "t": 126.98108673095703, "r": 547.1167602539062, "b": 117.7680892944336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.662841796875, "t": 114.50121307373047, "r": 547.258544921875, "b": 105.2882080078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5514526367188, "t": 66.98204803466797, "r": 547.2017211914062, "b": 57.76904296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.3995361328125, "t": 89.481689453125, "r": 547.1510009765625, "b": 80.26868438720703, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79995727539062, "t": 66.98204803466797, "r": 525.0014038085938, "b": 57.76904296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 136.79995727539062, "t": 66.98204803466797, "r": 525.0014038085938, "b": 57.76904296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}]]}}, {"self_ref": "#/tables/2", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 7, "bbox": {"l": 135.83180236816406, "t": 721.3062744140625, "r": 547.9264526367188, "b": 482.2618713378906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 136.79989624023438, "t": 720.490966796875, "r": 524.9435424804688, "b": 711.2779541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4978637695312, "t": 720.490966796875, "r": 547.1608276367188, "b": 711.2779541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20005798339844, "t": 708.0111083984375, "r": 524.9487915039062, "b": 698.798095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.510986328125, "t": 708.0111083984375, "r": 547.1976318359375, "b": 698.798095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20005798339844, "t": 695.4714965820312, "r": 524.9796752929688, "b": 686.2584838867188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5341796875, "t": 695.4714965820312, "r": 547.1976928710938, "b": 686.2584838867188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20005798339844, "t": 682.9916381835938, "r": 525.0257568359375, "b": 673.7786254882812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5559692382812, "t": 682.9916381835938, "r": 547.1466064453125, "b": 673.7786254882812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20005798339844, "t": 670.5117797851562, "r": 238.93310546875, "b": 661.2987670898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48696899414062, "t": 670.5117797851562, "r": 547.1724853515625, "b": 661.2987670898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79989624023438, "t": 657.97216796875, "r": 524.9177856445312, "b": 648.7591552734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4720458984375, "t": 657.97216796875, "r": 547.134765625, "b": 648.7591552734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20005798339844, "t": 645.4923095703125, "r": 524.933349609375, "b": 636.279296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4951782226562, "t": 645.4923095703125, "r": 547.1807250976562, "b": 636.279296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20005798339844, "t": 633.012451171875, "r": 524.9628295898438, "b": 623.7994384765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5087280273438, "t": 633.012451171875, "r": 547.1466064453125, "b": 623.7994384765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79989624023438, "t": 620.4728393554688, "r": 524.9552612304688, "b": 611.2598266601562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5089111328125, "t": 620.4728393554688, "r": 547.1697998046875, "b": 611.2598266601562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79989624023438, "t": 597.9732055664062, "r": 362.6678466796875, "b": 588.7601928710938, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.9595947265625, "t": 597.9732055664062, "r": 547.1986694335938, "b": 588.7601928710938, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7998809814453, "t": 585.973388671875, "r": 416.633056640625, "b": 576.7603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.1871643066406, "t": 585.973388671875, "r": 547.1546020507812, "b": 576.7603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7998809814453, "t": 573.4935302734375, "r": 524.86376953125, "b": 564.280517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.440185546875, "t": 573.4935302734375, "r": 547.1694946289062, "b": 564.280517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7998809814453, "t": 550.993896484375, "r": 447.0309753417969, "b": 541.7808837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968017578125, "t": 550.993896484375, "r": 547.2036743164062, "b": 541.7808837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79989624023438, "t": 528.9743041992188, "r": 234.45175170898438, "b": 519.7612915039062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15985107421875, "t": 528.9743041992188, "r": 547.1917114257812, "b": 519.7612915039062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79989624023438, "t": 516.494384765625, "r": 217.75054931640625, "b": 507.2814025878906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541870117188, "t": 516.494384765625, "r": 547.258544921875, "b": 507.2814025878906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999267578125, "t": 504.0144958496094, "r": 212.61610412597656, "b": 494.801513671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.1934814453125, "t": 504.0144958496094, "r": 547.258544921875, "b": 494.801513671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999267578125, "t": 491.474853515625, "r": 200.54580688476562, "b": 482.2618713378906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.0924072265625, "t": 491.474853515625, "r": 547.2077026367188, "b": 482.2618713378906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 17, "num_cols": 2, "grid": [[{"bbox": {"l": 136.79989624023438, "t": 720.490966796875, "r": 524.9435424804688, "b": 711.2779541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4978637695312, "t": 720.490966796875, "r": 547.1608276367188, "b": 711.2779541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20005798339844, "t": 708.0111083984375, "r": 524.9487915039062, "b": 698.798095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.510986328125, "t": 708.0111083984375, "r": 547.1976318359375, "b": 698.798095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20005798339844, "t": 695.4714965820312, "r": 524.9796752929688, "b": 686.2584838867188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5341796875, "t": 695.4714965820312, "r": 547.1976928710938, "b": 686.2584838867188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20005798339844, "t": 682.9916381835938, "r": 525.0257568359375, "b": 673.7786254882812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5559692382812, "t": 682.9916381835938, "r": 547.1466064453125, "b": 673.7786254882812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20005798339844, "t": 670.5117797851562, "r": 238.93310546875, "b": 661.2987670898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48696899414062, "t": 670.5117797851562, "r": 547.1724853515625, "b": 661.2987670898438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79989624023438, "t": 657.97216796875, "r": 524.9177856445312, "b": 648.7591552734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4720458984375, "t": 657.97216796875, "r": 547.134765625, "b": 648.7591552734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20005798339844, "t": 645.4923095703125, "r": 524.933349609375, "b": 636.279296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.4951782226562, "t": 645.4923095703125, "r": 547.1807250976562, "b": 636.279296875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.20005798339844, "t": 633.012451171875, "r": 524.9628295898438, "b": 623.7994384765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5087280273438, "t": 633.012451171875, "r": 547.1466064453125, "b": 623.7994384765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79989624023438, "t": 620.4728393554688, "r": 524.9552612304688, "b": 611.2598266601562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.5089111328125, "t": 620.4728393554688, "r": 547.1697998046875, "b": 611.2598266601562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79989624023438, "t": 597.9732055664062, "r": 362.6678466796875, "b": 588.7601928710938, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.9595947265625, "t": 597.9732055664062, "r": 547.1986694335938, "b": 588.7601928710938, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7998809814453, "t": 585.973388671875, "r": 416.633056640625, "b": 576.7603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.1871643066406, "t": 585.973388671875, "r": 547.1546020507812, "b": 576.7603759765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7998809814453, "t": 573.4935302734375, "r": 524.86376953125, "b": 564.280517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.440185546875, "t": 573.4935302734375, "r": 547.1694946289062, "b": 564.280517578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7998809814453, "t": 550.993896484375, "r": 447.0309753417969, "b": 541.7808837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968017578125, "t": 550.993896484375, "r": 547.2036743164062, "b": 541.7808837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79989624023438, "t": 528.9743041992188, "r": 234.45175170898438, "b": 519.7612915039062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15985107421875, "t": 528.9743041992188, "r": 547.1917114257812, "b": 519.7612915039062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79989624023438, "t": 516.494384765625, "r": 217.75054931640625, "b": 507.2814025878906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541870117188, "t": 516.494384765625, "r": 547.258544921875, "b": 507.2814025878906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7999267578125, "t": 504.0144958496094, "r": 212.61610412597656, "b": 494.801513671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.1934814453125, "t": 504.0144958496094, "r": 547.258544921875, "b": 494.801513671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7999267578125, "t": 491.474853515625, "r": 200.54580688476562, "b": 482.2618713378906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.0924072265625, "t": 491.474853515625, "r": 547.2077026367188, "b": 482.2618713378906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/3", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 26, "bbox": {"l": 135.52508544921875, "t": 502.2750244140625, "r": 545.87060546875, "b": 349.9494934082031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/258"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 142.8000030517578, "t": 495.4620056152344, "r": 202.2449951171875, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.8087921142578, "t": 495.4620056152344, "r": 257.210693359375, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479248046875, "t": 495.4620056152344, "r": 338.8946838378906, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8000030517578, "t": 476.4422912597656, "r": 203.2322998046875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.785400390625, "t": 476.4422912597656, "r": 276.00360107421875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.45770263671875, "t": 476.4422912597656, "r": 359.85394287109375, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8000030517578, "t": 457.48199462890625, "r": 198.66929626464844, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74130249023438, "t": 457.48199462890625, "r": 275.9234924316406, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.382080078125, "t": 457.48199462890625, "r": 515.0535888671875, "b": 438.1166687011719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79998779296875, "t": 427.48138427734375, "r": 173.98318481445312, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.773681640625, "t": 427.48138427734375, "r": 270.9797668457031, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.416259765625, "t": 427.48138427734375, "r": 539.1071166992188, "b": 397.13604736328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8000030517578, "t": 386.44134521484375, "r": 196.2248992919922, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75210571289062, "t": 386.44134521484375, "r": 270.99871826171875, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4316101074219, "t": 386.44134521484375, "r": 448.11962890625, "b": 356.15631103515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 5, "num_cols": 3, "grid": [[{"bbox": {"l": 142.8000030517578, "t": 495.4620056152344, "r": 202.2449951171875, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.8087921142578, "t": 495.4620056152344, "r": 257.210693359375, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479248046875, "t": 495.4620056152344, "r": 338.8946838378906, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8000030517578, "t": 476.4422912597656, "r": 203.2322998046875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.785400390625, "t": 476.4422912597656, "r": 276.00360107421875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.45770263671875, "t": 476.4422912597656, "r": 359.85394287109375, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8000030517578, "t": 457.48199462890625, "r": 198.66929626464844, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74130249023438, "t": 457.48199462890625, "r": 275.9234924316406, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.382080078125, "t": 457.48199462890625, "r": 515.0535888671875, "b": 438.1166687011719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.79998779296875, "t": 427.48138427734375, "r": 173.98318481445312, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.773681640625, "t": 427.48138427734375, "r": 270.9797668457031, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.416259765625, "t": 427.48138427734375, "r": 539.1071166992188, "b": 397.13604736328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8000030517578, "t": 386.44134521484375, "r": 196.2248992919922, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75210571289062, "t": 386.44134521484375, "r": 270.99871826171875, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4316101074219, "t": 386.44134521484375, "r": 448.11962890625, "b": 356.15631103515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/4", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 27, "bbox": {"l": 64.41139221191406, "t": 398.3863525390625, "r": 547.3950805664062, "b": 70.39208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/272"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 70.80030059814453, "t": 391.4817199707031, "r": 119.78550720214844, "b": 383.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93804931640625, "t": 344.4774475097656, "r": 433.2629699707031, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.1380615234375, "t": 390.3999328613281, "r": 458.4629821777344, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.9383544921875, "t": 390.465576171875, "r": 484.2632751464844, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13836669921875, "t": 390.385498046875, "r": 509.4632873535156, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.3986206054688, "t": 359.2005615234375, "r": 534.7235717773438, "b": 304.9799499511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80000305175781, "t": 293.4420166015625, "r": 220.1568145751953, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 293.4420166015625, "r": 435.00299072265625, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00030517578125, "t": 293.4420166015625, "r": 486.0032958984375, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 274.4817199707031, "r": 264.5538024902344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 274.4817199707031, "r": 435.0030212402344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 274.4817199707031, "r": 486.0033264160156, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800048828125, "t": 255.46202087402344, "r": 322.5057373046875, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 255.46202087402344, "r": 435.0030212402344, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 255.46202087402344, "r": 486.0033264160156, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800048828125, "t": 236.44232177734375, "r": 381.0218505859375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 236.44232177734375, "r": 435.0030212402344, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 236.44232177734375, "r": 486.0033264160156, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606201171875, "t": 236.44232177734375, "r": 511.26361083984375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603149414062, "t": 236.44232177734375, "r": 536.7633056640625, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800048828125, "t": 217.48202514648438, "r": 359.5173645019531, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 217.48202514648438, "r": 435.0030517578125, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 217.48202514648438, "r": 486.00335693359375, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 217.48202514648438, "r": 511.263671875, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 198.4623260498047, "r": 220.7517852783203, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 198.4623260498047, "r": 435.0030517578125, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 198.4623260498047, "r": 486.00335693359375, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 198.4623260498047, "r": 511.263671875, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603759765625, "t": 198.4623260498047, "r": 536.7633666992188, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 179.442626953125, "r": 236.65480041503906, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 179.442626953125, "r": 435.0030517578125, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 179.442626953125, "r": 486.00335693359375, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 160.48233032226562, "r": 213.1296844482422, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 160.48233032226562, "r": 435.0030517578125, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 160.48233032226562, "r": 486.00335693359375, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 141.46263122558594, "r": 199.87808227539062, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 141.46263122558594, "r": 435.0030517578125, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 141.46263122558594, "r": 486.00335693359375, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 122.44291687011719, "r": 208.36776733398438, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 122.44291687011719, "r": 435.0030517578125, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 122.44291687011719, "r": 486.00335693359375, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 103.42323303222656, "r": 411.20263671875, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 103.42323303222656, "r": 435.0030517578125, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 103.42323303222656, "r": 486.00335693359375, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 84.46292877197266, "r": 377.1258544921875, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 84.46292877197266, "r": 435.0030517578125, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 84.46292877197266, "r": 486.00335693359375, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 13, "num_cols": 6, "grid": [[{"bbox": {"l": 70.80030059814453, "t": 391.4817199707031, "r": 119.78550720214844, "b": 383.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93804931640625, "t": 344.4774475097656, "r": 433.2629699707031, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.1380615234375, "t": 390.3999328613281, "r": 458.4629821777344, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.9383544921875, "t": 390.465576171875, "r": 484.2632751464844, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13836669921875, "t": 390.385498046875, "r": 509.4632873535156, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.3986206054688, "t": 359.2005615234375, "r": 534.7235717773438, "b": 304.9799499511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80000305175781, "t": 293.4420166015625, "r": 220.1568145751953, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 293.4420166015625, "r": 435.00299072265625, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00030517578125, "t": 293.4420166015625, "r": 486.0032958984375, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 274.4817199707031, "r": 264.5538024902344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 274.4817199707031, "r": 435.0030212402344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 274.4817199707031, "r": 486.0033264160156, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800048828125, "t": 255.46202087402344, "r": 322.5057373046875, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 255.46202087402344, "r": 435.0030212402344, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 255.46202087402344, "r": 486.0033264160156, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800048828125, "t": 236.44232177734375, "r": 381.0218505859375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 236.44232177734375, "r": 435.0030212402344, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 236.44232177734375, "r": 486.0033264160156, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606201171875, "t": 236.44232177734375, "r": 511.26361083984375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603149414062, "t": 236.44232177734375, "r": 536.7633056640625, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800048828125, "t": 217.48202514648438, "r": 359.5173645019531, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 217.48202514648438, "r": 435.0030517578125, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 217.48202514648438, "r": 486.00335693359375, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 217.48202514648438, "r": 511.263671875, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 198.4623260498047, "r": 220.7517852783203, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 198.4623260498047, "r": 435.0030517578125, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 198.4623260498047, "r": 486.00335693359375, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 198.4623260498047, "r": 511.263671875, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603759765625, "t": 198.4623260498047, "r": 536.7633666992188, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 179.442626953125, "r": 236.65480041503906, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 179.442626953125, "r": 435.0030517578125, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 179.442626953125, "r": 486.00335693359375, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 160.48233032226562, "r": 213.1296844482422, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 160.48233032226562, "r": 435.0030517578125, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 160.48233032226562, "r": 486.00335693359375, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 141.46263122558594, "r": 199.87808227539062, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 141.46263122558594, "r": 435.0030517578125, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 141.46263122558594, "r": 486.00335693359375, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 122.44291687011719, "r": 208.36776733398438, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 122.44291687011719, "r": 435.0030517578125, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 122.44291687011719, "r": 486.00335693359375, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 103.42323303222656, "r": 411.20263671875, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 103.42323303222656, "r": 435.0030517578125, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 103.42323303222656, "r": 486.00335693359375, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 84.46292877197266, "r": 377.1258544921875, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 84.46292877197266, "r": 435.0030517578125, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 84.46292877197266, "r": 486.00335693359375, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/5", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 28, "bbox": {"l": 64.12763214111328, "t": 721.4774780273438, "r": 547.230224609375, "b": 222.45916748046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 70.80136108398438, "t": 714.4642333984375, "r": 119.78656768798828, "b": 706.1392822265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93804931640625, "t": 667.4706420898438, "r": 433.262939453125, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.1380615234375, "t": 713.3759765625, "r": 458.46295166015625, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.9383544921875, "t": 713.3759765625, "r": 484.26324462890625, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13836669921875, "t": 713.437255859375, "r": 509.4632568359375, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.3987426757812, "t": 682.131591796875, "r": 534.7235107421875, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80060577392578, "t": 616.4822998046875, "r": 278.5827331542969, "b": 608.1573486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0005798339844, "t": 616.4822998046875, "r": 435.0035705566406, "b": 608.1573486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0008850097656, "t": 616.4822998046875, "r": 486.0038757324219, "b": 608.1573486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80059814453125, "t": 597.4625854492188, "r": 269.4494934082031, "b": 589.1376342773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0005798339844, "t": 597.4625854492188, "r": 435.0035705566406, "b": 589.1376342773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0008850097656, "t": 597.4625854492188, "r": 486.0038757324219, "b": 589.1376342773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80059814453125, "t": 578.44287109375, "r": 293.976318359375, "b": 570.117919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0005798339844, "t": 578.44287109375, "r": 435.0035705566406, "b": 570.117919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0008850097656, "t": 578.44287109375, "r": 486.0038757324219, "b": 570.117919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80059814453125, "t": 559.4825439453125, "r": 311.2257385253906, "b": 551.1575927734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 559.4825439453125, "r": 460.5032958984375, "b": 551.1575927734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80059814453125, "t": 540.4628295898438, "r": 303.5882873535156, "b": 532.1378784179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 540.4628295898438, "r": 460.5032958984375, "b": 532.1378784179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80059814453125, "t": 521.443115234375, "r": 264.57958984375, "b": 513.1181640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 521.443115234375, "r": 460.5032958984375, "b": 513.1181640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80059814453125, "t": 502.48284912109375, "r": 299.39697265625, "b": 494.1578369140625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 502.48284912109375, "r": 460.5032958984375, "b": 494.1578369140625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80059814453125, "t": 483.463134765625, "r": 266.843994140625, "b": 475.13812255859375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5002746582031, "t": 483.463134765625, "r": 460.5032653808594, "b": 475.13812255859375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80056762695312, "t": 464.44342041015625, "r": 271.78857421875, "b": 456.118408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 464.44342041015625, "r": 460.50323486328125, "b": 456.118408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537109375, "t": 445.4831237792969, "r": 257.3543395996094, "b": 437.1581115722656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 445.4831237792969, "r": 460.50323486328125, "b": 437.1581115722656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537109375, "t": 426.4634094238281, "r": 271.1882629394531, "b": 418.1383972167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 426.4634094238281, "r": 460.50323486328125, "b": 418.1383972167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537109375, "t": 407.4436950683594, "r": 237.0242462158203, "b": 399.1186828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 407.4436950683594, "r": 460.50323486328125, "b": 399.1186828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537109375, "t": 388.4833984375, "r": 238.51824951171875, "b": 380.15838623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5011291503906, "t": 388.4833984375, "r": 460.5041198730469, "b": 380.15838623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80142211914062, "t": 369.46368408203125, "r": 284.7251281738281, "b": 361.138671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 369.46368408203125, "r": 460.50408935546875, "b": 361.138671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.8013916015625, "t": 350.4439697265625, "r": 297.70037841796875, "b": 342.11895751953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 350.4439697265625, "r": 460.50408935546875, "b": 342.11895751953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.8013916015625, "t": 331.4836730957031, "r": 299.32037353515625, "b": 323.1586608886719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 331.4836730957031, "r": 460.50408935546875, "b": 323.1586608886719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.8013916015625, "t": 312.4639587402344, "r": 299.32037353515625, "b": 304.1389465332031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 312.4639587402344, "r": 460.50408935546875, "b": 304.1389465332031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.8013916015625, "t": 293.4442443847656, "r": 269.78509521484375, "b": 285.1192321777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 293.4442443847656, "r": 460.50408935546875, "b": 285.1192321777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.8013916015625, "t": 274.48394775390625, "r": 313.63848876953125, "b": 266.158935546875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 274.48394775390625, "r": 460.50408935546875, "b": 266.158935546875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.8013916015625, "t": 255.46424865722656, "r": 253.48878479003906, "b": 247.1392364501953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010681152344, "t": 255.46424865722656, "r": 460.5040588378906, "b": 247.1392364501953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80136108398438, "t": 236.44454956054688, "r": 281.80908203125, "b": 228.11953735351562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010681152344, "t": 236.44454956054688, "r": 460.5040588378906, "b": 228.11953735351562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 22, "num_cols": 6, "grid": [[{"bbox": {"l": 70.80136108398438, "t": 714.4642333984375, "r": 119.78656768798828, "b": 706.1392822265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93804931640625, "t": 667.4706420898438, "r": 433.262939453125, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.1380615234375, "t": 713.3759765625, "r": 458.46295166015625, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.9383544921875, "t": 713.3759765625, "r": 484.26324462890625, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13836669921875, "t": 713.437255859375, "r": 509.4632568359375, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.3987426757812, "t": 682.131591796875, "r": 534.7235107421875, "b": 628.02001953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80060577392578, "t": 616.4822998046875, "r": 278.5827331542969, "b": 608.1573486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0005798339844, "t": 616.4822998046875, "r": 435.0035705566406, "b": 608.1573486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0008850097656, "t": 616.4822998046875, "r": 486.0038757324219, "b": 608.1573486328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80059814453125, "t": 597.4625854492188, "r": 269.4494934082031, "b": 589.1376342773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0005798339844, "t": 597.4625854492188, "r": 435.0035705566406, "b": 589.1376342773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0008850097656, "t": 597.4625854492188, "r": 486.0038757324219, "b": 589.1376342773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80059814453125, "t": 578.44287109375, "r": 293.976318359375, "b": 570.117919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0005798339844, "t": 578.44287109375, "r": 435.0035705566406, "b": 570.117919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0008850097656, "t": 578.44287109375, "r": 486.0038757324219, "b": 570.117919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80059814453125, "t": 559.4825439453125, "r": 311.2257385253906, "b": 551.1575927734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 559.4825439453125, "r": 460.5032958984375, "b": 551.1575927734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80059814453125, "t": 540.4628295898438, "r": 303.5882873535156, "b": 532.1378784179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 540.4628295898438, "r": 460.5032958984375, "b": 532.1378784179688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80059814453125, "t": 521.443115234375, "r": 264.57958984375, "b": 513.1181640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 521.443115234375, "r": 460.5032958984375, "b": 513.1181640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80059814453125, "t": 502.48284912109375, "r": 299.39697265625, "b": 494.1578369140625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.50030517578125, "t": 502.48284912109375, "r": 460.5032958984375, "b": 494.1578369140625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80059814453125, "t": 483.463134765625, "r": 266.843994140625, "b": 475.13812255859375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5002746582031, "t": 483.463134765625, "r": 460.5032653808594, "b": 475.13812255859375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80056762695312, "t": 464.44342041015625, "r": 271.78857421875, "b": 456.118408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 464.44342041015625, "r": 460.50323486328125, "b": 456.118408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800537109375, "t": 445.4831237792969, "r": 257.3543395996094, "b": 437.1581115722656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 445.4831237792969, "r": 460.50323486328125, "b": 437.1581115722656, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800537109375, "t": 426.4634094238281, "r": 271.1882629394531, "b": 418.1383972167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 426.4634094238281, "r": 460.50323486328125, "b": 418.1383972167969, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800537109375, "t": 407.4436950683594, "r": 237.0242462158203, "b": 399.1186828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.500244140625, "t": 407.4436950683594, "r": 460.50323486328125, "b": 399.1186828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800537109375, "t": 388.4833984375, "r": 238.51824951171875, "b": 380.15838623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5011291503906, "t": 388.4833984375, "r": 460.5041198730469, "b": 380.15838623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80142211914062, "t": 369.46368408203125, "r": 284.7251281738281, "b": 361.138671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 369.46368408203125, "r": 460.50408935546875, "b": 361.138671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.8013916015625, "t": 350.4439697265625, "r": 297.70037841796875, "b": 342.11895751953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 350.4439697265625, "r": 460.50408935546875, "b": 342.11895751953125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.8013916015625, "t": 331.4836730957031, "r": 299.32037353515625, "b": 323.1586608886719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 331.4836730957031, "r": 460.50408935546875, "b": 323.1586608886719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.8013916015625, "t": 312.4639587402344, "r": 299.32037353515625, "b": 304.1389465332031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 312.4639587402344, "r": 460.50408935546875, "b": 304.1389465332031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.8013916015625, "t": 293.4442443847656, "r": 269.78509521484375, "b": 285.1192321777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 293.4442443847656, "r": 460.50408935546875, "b": 285.1192321777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.8013916015625, "t": 274.48394775390625, "r": 313.63848876953125, "b": 266.158935546875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010986328125, "t": 274.48394775390625, "r": 460.50408935546875, "b": 266.158935546875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.8013916015625, "t": 255.46424865722656, "r": 253.48878479003906, "b": 247.1392364501953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010681152344, "t": 255.46424865722656, "r": 460.5040588378906, "b": 247.1392364501953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80136108398438, "t": 236.44454956054688, "r": 281.80908203125, "b": 228.11953735351562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 454.5010681152344, "t": 236.44454956054688, "r": 460.5040588378906, "b": 228.11953735351562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/6", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 35, "bbox": {"l": 134.54624938964844, "t": 688.5811157226562, "r": 542.0460815429688, "b": 587.7283935546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/341"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 142.8000030517578, "t": 681.4619750976562, "r": 209.67091369628906, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18911743164062, "t": 681.4619750976562, "r": 319.9352722167969, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80001831054688, "t": 662.5016479492188, "r": 212.7012176513672, "b": 643.1364135742188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2197265625, "t": 662.5016479492188, "r": 467.9906921386719, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003356933594, "t": 632.441650390625, "r": 216.63963317871094, "b": 624.11669921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19813537597656, "t": 632.441650390625, "r": 535.6508178710938, "b": 613.13671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009033203125, "t": 602.4419555664062, "r": 209.73570251464844, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.24490356445312, "t": 602.4419555664062, "r": 425.64569091796875, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 4, "num_cols": 2, "grid": [[{"bbox": {"l": 142.8000030517578, "t": 681.4619750976562, "r": 209.67091369628906, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18911743164062, "t": 681.4619750976562, "r": 319.9352722167969, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.80001831054688, "t": 662.5016479492188, "r": 212.7012176513672, "b": 643.1364135742188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2197265625, "t": 662.5016479492188, "r": 467.9906921386719, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.80003356933594, "t": 632.441650390625, "r": 216.63963317871094, "b": 624.11669921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19813537597656, "t": 632.441650390625, "r": 535.6508178710938, "b": 613.13671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8009033203125, "t": 602.4419555664062, "r": 209.73570251464844, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.24490356445312, "t": 602.4419555664062, "r": 425.64569091796875, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/7", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 36, "bbox": {"l": 63.556331634521484, "t": 687.76611328125, "r": 548.5687255859375, "b": 495.7753601074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/357"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 70.80000305175781, "t": 681.4619750976562, "r": 134.99070739746094, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.889404296875, "t": 681.4619750976562, "r": 223.34640502929688, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8247985839844, "t": 681.4619750976562, "r": 331.3428039550781, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80000305175781, "t": 662.5016479492188, "r": 132.7209014892578, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89028930664062, "t": 662.5016479492188, "r": 267.0765075683594, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8473205566406, "t": 662.5016479492188, "r": 510.17547607421875, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 643.48193359375, "r": 140.66522216796875, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.872314453125, "t": 643.48193359375, "r": 267.077392578125, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8454895019531, "t": 643.48193359375, "r": 509.6058349609375, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 624.4622192382812, "r": 134.98263549804688, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90293884277344, "t": 624.4622192382812, "r": 242.80084228515625, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7978515625, "t": 624.4622192382812, "r": 527.5922241210938, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 605.4425048828125, "r": 143.50924682617188, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80575561523438, "t": 605.4425048828125, "r": 267.0693664550781, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85186767578125, "t": 605.4425048828125, "r": 436.5726013183594, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 586.482177734375, "r": 156.01654052734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83544921875, "t": 586.482177734375, "r": 267.0864562988281, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8707580566406, "t": 586.482177734375, "r": 470.44677734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 567.4624633789062, "r": 157.89932250976562, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72471618652344, "t": 567.4624633789062, "r": 261.9825439453125, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7492370605469, "t": 567.4624633789062, "r": 478.84381103515625, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 548.4427490234375, "r": 154.419921875, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312133789062, "t": 548.4427490234375, "r": 267.0927429199219, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164306640625, "t": 548.4427490234375, "r": 464.2602233886719, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 529.482421875, "r": 188.43991088867188, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8444061279297, "t": 529.482421875, "r": 267.03692626953125, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682373046875, "t": 529.482421875, "r": 430.40045166015625, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80003356933594, "t": 510.4627380371094, "r": 139.4313507080078, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635314941406, "t": 510.4627380371094, "r": 239.2899627685547, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7906494140625, "t": 510.4627380371094, "r": 425.09130859375, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 10, "num_cols": 3, "grid": [[{"bbox": {"l": 70.80000305175781, "t": 681.4619750976562, "r": 134.99070739746094, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.889404296875, "t": 681.4619750976562, "r": 223.34640502929688, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8247985839844, "t": 681.4619750976562, "r": 331.3428039550781, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80000305175781, "t": 662.5016479492188, "r": 132.7209014892578, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89028930664062, "t": 662.5016479492188, "r": 267.0765075683594, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8473205566406, "t": 662.5016479492188, "r": 510.17547607421875, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 643.48193359375, "r": 140.66522216796875, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.872314453125, "t": 643.48193359375, "r": 267.077392578125, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8454895019531, "t": 643.48193359375, "r": 509.6058349609375, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 624.4622192382812, "r": 134.98263549804688, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90293884277344, "t": 624.4622192382812, "r": 242.80084228515625, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7978515625, "t": 624.4622192382812, "r": 527.5922241210938, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 605.4425048828125, "r": 143.50924682617188, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80575561523438, "t": 605.4425048828125, "r": 267.0693664550781, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85186767578125, "t": 605.4425048828125, "r": 436.5726013183594, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 586.482177734375, "r": 156.01654052734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83544921875, "t": 586.482177734375, "r": 267.0864562988281, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8707580566406, "t": 586.482177734375, "r": 470.44677734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 567.4624633789062, "r": 157.89932250976562, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72471618652344, "t": 567.4624633789062, "r": 261.9825439453125, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7492370605469, "t": 567.4624633789062, "r": 478.84381103515625, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 548.4427490234375, "r": 154.419921875, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312133789062, "t": 548.4427490234375, "r": 267.0927429199219, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164306640625, "t": 548.4427490234375, "r": 464.2602233886719, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 529.482421875, "r": 188.43991088867188, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8444061279297, "t": 529.482421875, "r": 267.03692626953125, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682373046875, "t": 529.482421875, "r": 430.40045166015625, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80003356933594, "t": 510.4627380371094, "r": 139.4313507080078, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635314941406, "t": 510.4627380371094, "r": 239.2899627685547, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7906494140625, "t": 510.4627380371094, "r": 425.09130859375, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/8", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 57, "bbox": {"l": 135.74551391601562, "t": 684.2587280273438, "r": 529.2235107421875, "b": 393.6541442871094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/599"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 287.8096923828125, "t": 680.1975708007812, "r": 355.4244689941406, "b": 668.81640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.24420166015625, "t": 680.1975708007812, "r": 488.26617431640625, "b": 668.81640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 150.03750610351562, "t": 618.352294921875, "r": 193.05224609375, "b": 608.87744140625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.63400268554688, "t": 616.476318359375, "r": 248.9210205078125, "b": 607.9304809570312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.1838073730469, "t": 635.3184814453125, "r": 382.3654479980469, "b": 589.69384765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256103515625, "t": 615.3514404296875, "r": 482.86053466796875, "b": 609.6608276367188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 174.79660034179688, "t": 565.1068725585938, "r": 193.04815673828125, "b": 555.6320190429688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331024169922, "t": 564.56201171875, "r": 248.37786865234375, "b": 556.0161743164062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.1838073730469, "t": 583.404296875, "r": 382.3654479980469, "b": 537.7796020507812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.8116149902344, "t": 563.437255859375, "r": 482.92327880859375, "b": 557.7466430664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.38710021972656, "t": 530.99658203125, "r": 193.08364868164062, "b": 521.521728515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331024169922, "t": 528.9542236328125, "r": 248.45372009277344, "b": 520.4083862304688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.5306091308594, "t": 527.829345703125, "r": 330.12255859375, "b": 522.1387329101562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.0835266113281, "t": 527.829345703125, "r": 462.67547607421875, "b": 522.1387329101562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 161.48519897460938, "t": 498.5502014160156, "r": 193.04367065429688, "b": 489.0753479003906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331024169922, "t": 497.3398132324219, "r": 248.45372009277344, "b": 488.7939453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.1838073730469, "t": 512.1885375976562, "r": 382.3654479980469, "b": 474.550537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916259765625, "t": 496.2148742675781, "r": 462.6711120605469, "b": 490.52423095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 141.65139770507812, "t": 467.2019958496094, "r": 193.06382751464844, "b": 457.7271423339844, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.84030151367188, "t": 465.7253112792969, "r": 252.7267608642578, "b": 457.179443359375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.5306091308594, "t": 464.6005859375, "r": 330.12255859375, "b": 458.9099426269531, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.0835266113281, "t": 464.6005859375, "r": 462.67547607421875, "b": 458.9099426269531, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.8197021484375, "t": 431.9934997558594, "r": 193.05859375, "b": 422.5186462402344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.63400268554688, "t": 430.11749267578125, "r": 248.9210205078125, "b": 421.5716247558594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353271484375, "t": 448.9596862792969, "r": 382.3654479980469, "b": 403.33502197265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256103515625, "t": 428.9927673339844, "r": 482.86053466796875, "b": 423.3021240234375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 7, "num_cols": 4, "grid": [[{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 287.8096923828125, "t": 680.1975708007812, "r": 355.4244689941406, "b": 668.81640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.24420166015625, "t": 680.1975708007812, "r": 488.26617431640625, "b": 668.81640625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 150.03750610351562, "t": 618.352294921875, "r": 193.05224609375, "b": 608.87744140625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.63400268554688, "t": 616.476318359375, "r": 248.9210205078125, "b": 607.9304809570312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.1838073730469, "t": 635.3184814453125, "r": 382.3654479980469, "b": 589.69384765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256103515625, "t": 615.3514404296875, "r": 482.86053466796875, "b": 609.6608276367188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 174.79660034179688, "t": 565.1068725585938, "r": 193.04815673828125, "b": 555.6320190429688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331024169922, "t": 564.56201171875, "r": 248.37786865234375, "b": 556.0161743164062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.1838073730469, "t": 583.404296875, "r": 382.3654479980469, "b": 537.7796020507812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.8116149902344, "t": 563.437255859375, "r": 482.92327880859375, "b": 557.7466430664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 160.38710021972656, "t": 530.99658203125, "r": 193.08364868164062, "b": 521.521728515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331024169922, "t": 528.9542236328125, "r": 248.45372009277344, "b": 520.4083862304688, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.5306091308594, "t": 527.829345703125, "r": 330.12255859375, "b": 522.1387329101562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.0835266113281, "t": 527.829345703125, "r": 462.67547607421875, "b": 522.1387329101562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 161.48519897460938, "t": 498.5502014160156, "r": 193.04367065429688, "b": 489.0753479003906, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331024169922, "t": 497.3398132324219, "r": 248.45372009277344, "b": 488.7939453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.1838073730469, "t": 512.1885375976562, "r": 382.3654479980469, "b": 474.550537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916259765625, "t": 496.2148742675781, "r": 462.6711120605469, "b": 490.52423095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 141.65139770507812, "t": 467.2019958496094, "r": 193.06382751464844, "b": 457.7271423339844, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.84030151367188, "t": 465.7253112792969, "r": 252.7267608642578, "b": 457.179443359375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.5306091308594, "t": 464.6005859375, "r": 330.12255859375, "b": 458.9099426269531, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.0835266113281, "t": 464.6005859375, "r": 462.67547607421875, "b": 458.9099426269531, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 160.8197021484375, "t": 431.9934997558594, "r": 193.05859375, "b": 422.5186462402344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.63400268554688, "t": 430.11749267578125, "r": 248.9210205078125, "b": 421.5716247558594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353271484375, "t": 448.9596862792969, "r": 382.3654479980469, "b": 403.33502197265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256103515625, "t": 428.9927673339844, "r": 482.86053466796875, "b": 423.3021240234375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/9", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 102, "bbox": {"l": 143.16891479492188, "t": 479.0935363769531, "r": 300.13482666015625, "b": 327.46435546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 149.45120239257812, "t": 474.97100830078125, "r": 233.62379455566406, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74920654296875, "t": 474.97100830078125, "r": 279.168212890625, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592041015625, "t": 461.4362487792969, "r": 221.83938598632812, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42230224609375, "t": 461.4362487792969, "r": 295.6497497558594, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592041015625, "t": 447.92901611328125, "r": 221.83853149414062, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42144775390625, "t": 447.92901611328125, "r": 295.6488952636719, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 434.3937072753906, "r": 221.84132385253906, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4057922363281, "t": 434.3937072753906, "r": 295.6465759277344, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 420.85870361328125, "r": 221.85214233398438, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.1250305175781, "t": 420.85870361328125, "r": 295.6675109863281, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 407.3514709472656, "r": 221.83880615234375, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4217529296875, "t": 407.3514709472656, "r": 295.6492004394531, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 393.8165283203125, "r": 221.83880615234375, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.646484375, "t": 393.8165283203125, "r": 295.6483154296875, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 380.2817687988281, "r": 221.83880615234375, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4217529296875, "t": 380.2817687988281, "r": 295.6492004394531, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 366.7742004394531, "r": 221.84132385253906, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813049316406, "t": 366.7742004394531, "r": 295.6460266113281, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 353.2392272949219, "r": 221.83880615234375, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4217529296875, "t": 353.2392272949219, "r": 295.6492004394531, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50619506835938, "t": 339.7044677734375, "r": 221.83880615234375, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.646484375, "t": 339.7044677734375, "r": 295.6483154296875, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 11, "num_cols": 2, "grid": [[{"bbox": {"l": 149.45120239257812, "t": 474.97100830078125, "r": 233.62379455566406, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74920654296875, "t": 474.97100830078125, "r": 279.168212890625, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50592041015625, "t": 461.4362487792969, "r": 221.83938598632812, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42230224609375, "t": 461.4362487792969, "r": 295.6497497558594, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50592041015625, "t": 447.92901611328125, "r": 221.83853149414062, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42144775390625, "t": 447.92901611328125, "r": 295.6488952636719, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 434.3937072753906, "r": 221.84132385253906, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4057922363281, "t": 434.3937072753906, "r": 295.6465759277344, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 420.85870361328125, "r": 221.85214233398438, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.1250305175781, "t": 420.85870361328125, "r": 295.6675109863281, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 407.3514709472656, "r": 221.83880615234375, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4217529296875, "t": 407.3514709472656, "r": 295.6492004394531, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 393.8165283203125, "r": 221.83880615234375, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.646484375, "t": 393.8165283203125, "r": 295.6483154296875, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 380.2817687988281, "r": 221.83880615234375, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4217529296875, "t": 380.2817687988281, "r": 295.6492004394531, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 366.7742004394531, "r": 221.84132385253906, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813049316406, "t": 366.7742004394531, "r": 295.6460266113281, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 353.2392272949219, "r": 221.83880615234375, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4217529296875, "t": 353.2392272949219, "r": 295.6492004394531, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 148.50619506835938, "t": 339.7044677734375, "r": 221.83880615234375, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.646484375, "t": 339.7044677734375, "r": 295.6483154296875, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/10", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 102, "bbox": {"l": 313.3494567871094, "t": 479.4356994628906, "r": 470.7187805175781, "b": 327.06817626953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/1015"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 318.9862060546875, "t": 474.97100830078125, "r": 403.1588134765625, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424072265625, "t": 474.97100830078125, "r": 448.7032470703125, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 318.041015625, "t": 461.4362487792969, "r": 390.6849365234375, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.9682312011719, "t": 461.4362487792969, "r": 465.16064453125, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.041015625, "t": 447.92901611328125, "r": 390.6849365234375, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.9682312011719, "t": 447.92901611328125, "r": 465.16064453125, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 434.3937072753906, "r": 390.6543273925781, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.9408874511719, "t": 434.3937072753906, "r": 465.1816711425781, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 420.85870361328125, "r": 390.69854736328125, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.6726379394531, "t": 420.85870361328125, "r": 465.1684265136719, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 407.3514709472656, "r": 390.6852111816406, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.968505859375, "t": 407.3514709472656, "r": 465.1609191894531, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 393.8165283203125, "r": 390.6852111816406, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.19329833984375, "t": 393.8165283203125, "r": 465.16595458984375, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 380.2817687988281, "r": 390.6852111816406, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.968505859375, "t": 380.2817687988281, "r": 465.1609191894531, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 366.7745361328125, "r": 390.6678771972656, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164001464844, "t": 366.7742004394531, "r": 465.1811218261719, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 353.2392272949219, "r": 390.6852111816406, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.968505859375, "t": 353.2392272949219, "r": 465.1609191894531, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.0412902832031, "t": 339.7044677734375, "r": 390.6852111816406, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.19329833984375, "t": 339.7044677734375, "r": 465.16595458984375, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 11, "num_cols": 2, "grid": [[{"bbox": {"l": 318.9862060546875, "t": 474.97100830078125, "r": 403.1588134765625, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424072265625, "t": 474.97100830078125, "r": 448.7032470703125, "b": 467.8338623046875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.041015625, "t": 461.4362487792969, "r": 390.6849365234375, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.9682312011719, "t": 461.4362487792969, "r": 465.16064453125, "b": 454.30743408203125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.041015625, "t": 447.92901611328125, "r": 390.6849365234375, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.9682312011719, "t": 447.92901611328125, "r": 465.16064453125, "b": 440.8002014160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 434.3937072753906, "r": 390.6543273925781, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.9408874511719, "t": 434.3937072753906, "r": 465.1816711425781, "b": 427.264892578125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 420.85870361328125, "r": 390.69854736328125, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.6726379394531, "t": 420.85870361328125, "r": 465.1684265136719, "b": 413.7298889160156, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 407.3514709472656, "r": 390.6852111816406, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.968505859375, "t": 407.3514709472656, "r": 465.1609191894531, "b": 400.22265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 393.8165283203125, "r": 390.6852111816406, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.19329833984375, "t": 393.8165283203125, "r": 465.16595458984375, "b": 386.6877136230469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 380.2817687988281, "r": 390.6852111816406, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.968505859375, "t": 380.2817687988281, "r": 465.1609191894531, "b": 373.1529541015625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 366.7745361328125, "r": 390.6678771972656, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164001464844, "t": 366.7742004394531, "r": 465.1811218261719, "b": 359.6453857421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 353.2392272949219, "r": 390.6852111816406, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.968505859375, "t": 353.2392272949219, "r": 465.1609191894531, "b": 346.11041259765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 318.0412902832031, "t": 339.7044677734375, "r": 390.6852111816406, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.19329833984375, "t": 339.7044677734375, "r": 465.16595458984375, "b": 332.5756530761719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]]}}], "key_value_items": [], "pages": {"1": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 1}, "2": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 2}, "3": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 3}, "4": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 4}, "5": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 5}, "6": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 6}, "7": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 7}, "8": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 8}, "9": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 9}, "10": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 10}, "11": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 11}, "12": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 12}, "13": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 13}, "14": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 14}, "15": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 15}, "16": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 16}, "17": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 17}, "18": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 18}, "19": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 19}, "20": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 20}, "21": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 21}, "22": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 22}, "23": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 23}, "24": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 24}, "25": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 25}, "26": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 26}, "27": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 27}, "28": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 28}, "29": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 29}, "30": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 30}, "31": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 31}, "32": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 32}, "33": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 33}, "34": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 34}, "35": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 35}, "36": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 36}, "37": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 37}, "38": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 38}, "39": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 39}, "40": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 40}, "41": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 41}, "42": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 42}, "43": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 43}, "44": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 44}, "45": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 45}, "46": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 46}, "47": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 47}, "48": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 48}, "49": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 49}, "50": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 50}, "51": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 51}, "52": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 52}, "53": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 53}, "54": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 54}, "55": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 55}, "56": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 56}, "57": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 57}, "58": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 58}, "59": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 59}, "60": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 60}, "61": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 61}, "62": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 62}, "63": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 63}, "64": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 64}, "65": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 65}, "66": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 66}, "67": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 67}, "68": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 68}, "69": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 69}, "70": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 70}, "71": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 71}, "72": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 72}, "73": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 73}, "74": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 74}, "75": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 75}, "76": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 76}, "77": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 77}, "78": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 78}, "79": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 79}, "80": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 80}, "81": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 81}, "82": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 82}, "83": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 83}, "84": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 84}, "85": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 85}, "86": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 86}, "87": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 87}, "88": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 88}, "89": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 89}, "90": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 90}, "91": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 91}, "92": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 92}, "93": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 93}, "94": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 94}, "95": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 95}, "96": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 96}, "97": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 97}, "98": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 98}, "99": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 99}, "100": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 100}, "101": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 101}, "102": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 102}, "103": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 103}, "104": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 104}, "105": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 105}, "106": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 106}, "107": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 107}, "108": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 108}, "109": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 109}, "110": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 110}, "111": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 111}, "112": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 112}, "113": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 113}, "114": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 114}, "115": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 115}, "116": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 116}, "117": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 117}, "118": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 118}, "119": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 119}, "120": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 120}, "121": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 121}, "122": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 122}, "123": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 123}, "124": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 124}, "125": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 125}, "126": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 126}, "127": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 127}, "128": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 128}, "129": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 129}, "130": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 130}, "131": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 131}, "132": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 132}, "133": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 133}, "134": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 134}, "135": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 135}, "136": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 136}, "137": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 137}, "138": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 138}, "139": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 139}, "140": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 140}, "141": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 141}, "142": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 142}, "143": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 143}, "144": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 144}, "145": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 145}, "146": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 146}}} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110.md b/tests/data/groundtruth/docling_v2/redp5110.md deleted file mode 100644 index 961f6af5..00000000 --- a/tests/data/groundtruth/docling_v2/redp5110.md +++ /dev/null @@ -1,2615 +0,0 @@ -Front cover - - - -## Row and Column Access Control Support in IBM DB2 for i - -Implement roles and separation of duties - -Leverage row permissions on the database - -Protect columns by defining column masks - -Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan - -Redpaper - - - -## International Technical Support Organization - -## Row and Column Access Control Support in IBM DB2 for i - -November 2014 - -Note: Before using this information and the product it supports, read the information in "Notices" on page vii. - -## First Edition (November 2014) - -This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1). - -Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. - -## Contents - -| Notices | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii | -|------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| -| Trademarks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii | -| DB2 for i Center of Excellence | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix | -| Preface | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | -| Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | | -| Now you can become a published author, too! | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii | -| Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | xiii | -| Stay connected to IBM Redbooks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv | -| Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1 | -| 1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | | -| 1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 2 | -| 1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | | -| 1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 4 | -| 1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . . | 5 | -| Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 7 | -| 2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 8 | -| 2.1.1 DDM and DRDA application server access: QIBM\_DB\_DDMDRDA . . . . . . . . . . . | 8 | -| 2.1.2 Toolbox application server access: QIBM\_DB\_ZDA. . . . . . . . . . . . . . . . . . . . . . . . | 8 | -| 2.1.3 Database Administrator function: QIBM\_DB\_SQLADM . . . . . . . . . . . . . . . . . . . . . | 9 | -| 2.1.4 Database Information function: QIBM\_DB\_SYSMON | . . . . . . . . . . . . . . . . . . . . . . 9 | -| 2.1.5 Security Administrator function: QIBM\_DB\_SECADM . . . . . . . . . . . . . . . . . . . . . . | 9 | -| 2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 10 | -| 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION\_USAGE view . . . . . | 10 | -| 2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | | -| Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 13 | -| 3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . . | 14 | -| 3.1.1 Row permission and column mask definitions | . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | -| 3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 16 | -| 3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | -| 3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | -| 3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 19 | -| 3.3 VERIFY\_GROUP\_FOR\_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 20 | -| 3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . . | 21 | -| | . . . . . . . . . . . . . . . . . . . . . . . . 22 | -| 3.5 SELECT, INSERT, and UPDATE behavior with RCAC | | -| 3.6.1 Assigning the QIBM\_DB\_SECADM function ID to the consultants. . . . . . . . . . . . | 23 | -| 3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . . | 23 | -| 3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 24 | -| 3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 25 | -| 3.6.5 Defining and creating column masks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | -| 3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 28 | -| 3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 29 | -| 3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . . | 32 | - -| Chapter 4. Implementing Row and Column Access Control: Banking example . . . . . | 37 | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . . | 38 | -| 4.2 Description of the users roles and responsibilities | . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | -| 4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 42 | -| 4.3.1 Reviewing the tables that are used in this example | . . . . . . . . . . . . . . . . . . . . . . . 42 | -| 4.3.2 Assigning function ID QIBM\_DB\_SECADM to the Database Engineers group | . . 47 | -| 4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . . | 50 | -| 4.3.4 Creating the CUSTOMER\_LOGIN\_ID global variable | . . . . . . . . . . . . . . . . . . . . . 52 | -| 4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 54 | -| 4.3.6 Defining and creating column masks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | -| 4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . . | 60 | -| 4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 64 | -| 4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 66 | -| 4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 75 | -| Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 79 | -| | Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 | -| 5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 81 | -| 5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 82 | -| 5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . . | 82 | -| | 82 | -| 5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 100 | -| | 83 | -| Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . 89 90 | -| 6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | -| 6.2.1 Effects when RCAC is defined on the source table | 6.2.1 Effects when RCAC is defined on the source table | -| | 88 | -| 6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 91 | -| 6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 | 6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 | -| 6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 | 6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 | -| 6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 96 | -| 6.4 Monitoring, analyzing, and debugging with RCAC | 97 | -| . . . . . . . . . . . . . . . . . . . . . . . . . . . . | Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 | -| 6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 99 | -| 6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | -| 6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . . | 102 | -| 6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 103 | -| | 105 | -| 6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | -| 6.6 | 105 | -| | 107 | -| 6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 108 | -| | 108 | -| | 109 | -| | 109 | -| | 113 | -| | 111 | -| Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . . | Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . . | - -| 7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -|---------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------| -| 7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -| 7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -| 7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 114 | -| 7.1.4 Regenerating | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 | -| 7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . . | 115 | -| 7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 115 | -| 7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 116 | -| 7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 117 | -| Chapter 8. Designing and planning for success | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 | -| 8.1 Implementing RCAC with good design and proper planning | . . . . . . . . . . . . . . . . . . . 120 | -| 8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 120 | -| Appendix A. Database definitions for the RCAC banking example | . . . . . . . . . . . . . . 121 | -| Related publications | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 | -| Other publications | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 | -| Online resources | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 | -| Help from IBM | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 | - -## Notices - -This information was developed for products and services offered in the U.S.A. - -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. - -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: - -IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A. - -The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. - -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. - -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. - -IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. - -Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment. - -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. - -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. - -## COPYRIGHT LICENSE: - -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. - -## Trademarks - -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or ™), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml - -The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: - -AS/400fi - -DB2fi - -DRDAfi - -IBMfi - -Power Systems™ - -Redbooksfi - -Redpaper™ - -Redbooks (log o) fi System - -ifi - -The following terms are trademarks of other companies: - -Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. - -Other company, product, or service names may be trademarks or service marks of others. - - - -DB2 for i Center of Excellence - -Solution Brief IBM Systems Lab Services and Training - - - -## Highlights - -- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH -- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH - - - -Power Services - -## DB2 for i Center of Excellence - -Expert help to achieve your business requirements - -## We build confident, satisfied clients - -No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. - -Because no one else is IBM. - -With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. - -## Who we are, some of what we do - -Global CoE engagements cover topics including: - -- r Database performance and scalability -- r Advanced SQL knowledge and skills transfer -- r Business intelligence and analytics -- r DB2 Web Query -- r Query/400 modernization for better reporting and analysis capabilities -- r Database modernization and re-engineering -- r Data-centric architecture and design -- r Extremely large database and overcoming limits to growth -- r ISV education and enablement - -## What you can expect - -Depending on the engagement, our team of consultants offer: - -- r Briefings, consulting and guidance on demand -- r Illumination of the DB2 for i capabilities and leadership to exploit them -- r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation -- r Configuration of systems, operating system and products to fully leverage database capabilities - -## Key client benefits - -T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes. - -## For more information - -Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit: - -ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH - - - -© Copyright IBM Corporation 2013 - -IBM Corporation Route 100 Somers, NY 10589 - -Produced in the United States of America March 2013 - -IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at www.ibm.com/legal/ copytrade.shtml . - -This document is current as of the initial date of publication and may be changed by IBM at any time. - -Not all offerings are available in every country in which IBM operates. - - - -Please Recycle - -QLS12392-USEN-00 - -## Preface - -This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. - -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. - -This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. - - - - - -Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. - -Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . - -## Authors - - - - - - - - - - - -Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i. - -Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes. - -Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services. - -Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead "JDE on i" analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i. - -Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems™ Lab Services organization. Doug's 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings. - - - - - -Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36. - -Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester. - -Thanks to the following people for their contributions to this project: - -Debra Landon - -International Technical Support Organization, Rochester Center - -Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development - -## Now you can become a published author, too! - -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. - -Find out more about the residency program, browse the residency index, and apply online at: - -ibm.com /redbooks/residencies.html - -## Comments welcome - -Your comments are important to us! - -We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways: - -- GLYPH Use the online Contact us review Redbooks form found at: - -ibm.com /redbooks - -- GLYPH Send your comments in an email to: - -redbooks@us.ibm.com - -- GLYPH Mail your comments to: - -IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400 - -## Stay connected to IBM Redbooks - -- GLYPH Find us on Facebook: - -http://www.facebook.com/IBMRedbooks - -- GLYPH Follow us on Twitter: - -http://twitter.com/ibmredbooks - -- GLYPH Look for us on LinkedIn: - -http://www.linkedin.com/groups?home=&gid=2130806 - -- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: - -https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm - -- GLYPH Stay current on recent Redbooks publications with RSS Feeds: - -http://www.redbooks.ibm.com/rss.html - - - -Chapter 1. - -1 - -## Securing and protecting IBM DB2 data - -Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. - -Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. - -This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: - -- GLYPH Security fundamentals -- GLYPH Current state of IBM i security -- GLYPH DB2 for i security controls - -## 1.1 Security fundamentals - -Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: - -- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. -- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. - -A security policy is what defines whether the system and its settings are secure (or not). - -- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. - -With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. - -## 1.2 Current state of IBM i security - -Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. - -Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. - -Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. - -Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day. - -Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces. - -An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level. - -## 1.3 DB2 for i security controls - -As described in 1.2, "Current state of IBM i security" on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table. - -As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table. - -Figure 1-1 All-or-nothing access to the rows of a table - - - -Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. - -## 1.3.1 Existing row and column control - -Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. - -Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. - -Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. - -Figure 1-2 Existing row and column controls - - - -## 1.3.2 New controls: Row and Column Access Control - -Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC). - -The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place. - - - -Chapter 2. - -2 - -## Roles and separation of duties - -One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs. - -To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks. - -This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics: - -- GLYPH Roles -- GLYPH Separation of duties - -## 2.1 Roles - -Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization's requirements for limiting access to data or separation of duties. - -To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service. - -Roles are divided among the following DB2 functions and their corresponding function usage IDs: - -- GLYPH DDM and IBM DRDAfi application server access: QIBM\_DB\_DDMDRDA -- GLYPH Toolbox application server access: QIBM\_DB\_ZDA -- GLYPH Database Administrator function: QIBM\_DB\_SQLADM -- GLYPH Database Information function: QIBM\_DB\_SYSMON -- GLYPH Security Administrator function: QIBM\_DB\_SECADM - -## 2.1.1 DDM and DRDA application server access: QIBM\_DB\_DDMDRDA - -The QIBM\_DB\_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. - -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. - -## 2.1.2 Toolbox application server access: QIBM\_DB\_ZDA - -The QIBM\_DB\_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console. - -This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups. - -This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable. - -## 2.1.3 Database Administrator function: QIBM\_DB\_SQLADM - -The Database Administrator function (QIBM\_DB\_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own. - -The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization. - -To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM\_DB\_SQLADM. - -## Granting QIBM\_DB\_SQLADM function usage - -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions. - -## 2.1.4 Database Information function: QIBM\_DB\_SYSMON - -The Database Information function (QIBM\_DB\_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties. - -For example, a user that does not have *JOBCTL or QIBM\_DB\_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM\_DB\_SYSMON. Without granting this authority, the default behavior is to deny authorization. - -## Granting QIBM\_DB\_SYSMON function usage - -Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions. - -## 2.1.5 Security Administrator function: QIBM\_DB\_SECADM - -The Security Administrator function (QIBM\_DB\_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. - -Only those users with the QIBM\_DB\_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization. - -## Granting QIBM\_DB\_SECADM function usage - -Only QSECOFR or a user with *SECADM special authority can grant the QIBM\_DB\_SECADM function usage to a user or group. - -## 2.1.6 Change Function Usage CL command - -The following CL commands can be used to work with, display, or change function usage IDs: - -- GLYPH Work Function Usage ( WRKFCNUSG ) -- GLYPH Change Function Usage ( CHGFCNUSG ) -- GLYPH Display Function Usage ( DSPFCNUSG ) - -For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: - -CHGFCNUSG FCNID(QIBM\_DB\_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) - -## 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION\_USAGE view - -The FUNCTION\_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION\_USAGE view. - -Table 2-1 FUNCTION\_USAGE view - -| Column name | Data type | Description | -|---------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| FUNCTION\_ID | VARCHAR(30) | ID of the function. | -| USER\_NAME | VARCHAR(10) | Name of the user profile that has a usage setting for this function. | -| USAGE | VARCHAR(7) | Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. | -| USER\_TYPE | VARCHAR(5) | Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. | - -To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. - -Example 2-1 Query to determine who has authority to define and manage RCAC - -SELECT function\_id, user\_name, usage, user\_type FROM function\_usage WHERE function\_id='QIBM\_DB\_SECADM' ORDER BY user\_name; - -## 2.2 Separation of duties - -Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. - -For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. - -In IBM i 7.2, the QIBM\_DB\_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. - -QIBM\_DB\_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. - -QIBM\_DB\_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. - -A preferred practice is that the RCAC administrator has the QIBM\_DB\_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. - -Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. - -Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority - -| User action | *JOBCTL | QIBM\_DB\_SECADM | QIBM\_DB\_SQLADM | QIBM\_DB\_SYSMON | No Authority | -|--------------------------------------------------------------------------------|-----------|------------------|------------------|------------------|----------------| -| SET CURRENT DEGREE (SQL statement) | X | | X | | | -| CHGQRYA command targeting a different user's job | X | | X | | | -| STRDBMON or ENDDBMON commands targeting a different user's job | X | | X | | | -| STRDBMON or ENDDBMON commands targeting a job that matches the current user | X | | X | X | X | -| QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job | X | | X | X | | -| Visual Explain within Run SQL scripts | X | | X | X | X | -| Visual Explain outside of Run SQL scripts | X | | X | | | -| ANALYZE PLAN CACHE procedure | X | | X | | | -| DUMP PLAN CACHE procedure | X | | X | | | -| MODIFY PLAN CACHE procedure | X | | X | | | -| MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority) | X | | X | | | -| CHANGE PLAN CACHE SIZE procedure (currently does not check authority) | X | | X | | | - -| User action | *JOBCTL | QIBM\_DB\_SECADM | QIBM\_DB\_SQLADM | QIBM\_DB\_SYSMON | No Authority | -|--------------------------------------------------------------|-----------|------------------|------------------|------------------|----------------| -| START PLAN CACHE EVENT MONITOR procedure | X | | X | | | -| END PLAN CACHE EVENT MONITOR procedure | X | | X | | | -| END ALL PLAN CACHE EVENT MONITORS procedure | X | | X | | | -| Work with RCAC row permissions (Create, modify, or delete) | | X | | | | -| Work with RCAC column masks (Create, modify, or delete) | | X | | | | -| Change Object Owner ( CHGOBJOWN ) CL command | | X | | | | -| Change Object Primary Group ( CHGOBJPGP ) CL command | | X | | | | -| Grant Object Authority ( GRTOBJAUT ) CL command | | X | | | | -| Revoke Object Authority ( RVKOBJAUT ) CL command | | X | | | | -| Edit Object Authority ( EDTOBJAUT ) CL command | | X | | | | -| Display Object Authority ( DSPOBJAUT ) CL command | | X | | | | -| Work with Objects ( WRKOBJ ) CL command | | X | | | | -| Work with Libraries ( WRKLIB ) CL command | | X | | | | -| Add Authorization List Entry ( ADDAUTLE ) CL command | | X | | | | -| Change Authorization List Entry ( CHGAUTLE ) CL command | | X | | | | -| Remove Authorization List Entry ( RMVAUTLE ) CL command | | X | | | | -| Retrieve Authorization List Entry ( RTVAUTLE ) CL command | | X | | | | -| Display Authorization List ( DSPAUTL ) CL command | | X | | | | -| Display Authorization List Objects ( DSPAUTLOBJ ) CL command | | X | | | | -| Edit Authorization List ( EDTAUTL ) CL command | | X | | | | -| Work with Authorization Lists ( WRKAUTL ) CL command | | X | | | | - - - -Chapter 3. - -3 - -## Row and Column Access Control - -This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example. - -The following topics are covered in this chapter: - -- GLYPH Explanation of RCAC and the concept of access control -- GLYPH Special registers and built-in global variables -- GLYPH VERIFY\_GROUP\_FOR\_USER function -- GLYPH Establishing and controlling accessibility by using the RCAC rule text -- GLYPH SELECT, INSERT, and UPDATE behavior with RCAC -- GLYPH Human resources example - -## 3.1 Explanation of RCAC and the concept of access control - -RCAC limits data access to those users who have a business "need to know". RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called "IBM Advanced Data Security for i", also known as option 47 of IBM i 7.2. - -In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms: - -- GLYPH Row permissions -- GLYPH Column masks - -Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements. - -Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data. - -RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic. - -Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility. - -## 3.1.1 Row permission and column mask definitions - -The following sections define row permission and column masks. - -## Row permission - -A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees. - -The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement - - - -## Column mask - -A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. - -Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules. - -Figure 3-2 CREATE MASK SQL statement - - - -## 3.1.2 Enabling and activating RCAC - -You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17. - -Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table. - -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. - -Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements - - - -You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC. - -Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed. - -Figure 3-4 ALTER TABLE SQL statement - - - -When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM\_DEFAULT\_ \_. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set. - -It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user's ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first. - -Note: If a user does not have permission to access the row, the column mask logic is not invoked. - -## 3.2 Special registers and built-in global variables - -This section describes how you can use special registers and built-in global variables to implement RCAC. - -## 3.2.1 Special registers - -A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server. - -IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers: - -- GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION . -- GLYPH SESSION\_USER is the same as the USER register, except that it has a data type of VARCHAR(128). -- GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller's or the owner's user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner's authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT\_USER. It has a data type of VARCHAR(128). -- GLYPH SYSTEM\_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM\_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128). - -In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text. - -Table 3-1 summarizes these special registers and their values. - -Table 3-1 Special registers and their corresponding values - -| Special register | Corresponding value | -|----------------------|---------------------------------------------------------------------------------------------------------------------------------------| -| USER or SESSION\_USER | The effective user of the thread excluding adopted authority. | -| CURRENT\_USER | The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. | -| SYSTEM\_USER | The authorization ID that initiated the connection. | - -Figure 3-5 shows the difference in the special register values when an adopted authority is used: - -- GLYPH A user connects to the server using the user profile ALICE. -- GLYPH USER and CURRENT USER initially have the same value of ALICE. -- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. -- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. -- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. - -Figure 3-5 Special registers and adopted authority - - - -## 3.2.2 Built-in global variables - -Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. - -IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. - -Table 3-2 lists the nine built-in global variables. - -Table 3-2 Built-in global variables - -| Global variable | Type | Description | -|-----------------------|--------------|----------------------------------------------------------------| -| CLIENT\_HOST | VARCHAR(255) | Host name of the current client as returned by the system | -| CLIENT\_IPADDR | VARCHAR(128) | IP address of the current client as returned by the system | -| CLIENT\_PORT | INTEGER | Port used by the current client to communicate with the server | -| PACKAGE\_NAME | VARCHAR(128) | Name of the currently running package | -| PACKAGE\_SCHEMA | VARCHAR(128) | Schema name of the currently running package | -| PACKAGE\_VERSION | VARCHAR(64) | Version identifier of the currently running package | -| ROUTINE\_SCHEMA | VARCHAR(128) | Schema name of the currently running routine | -| ROUTINE\_SPECIFIC\_NAME | VARCHAR(128) | Name of the currently running routine | -| ROUTINE\_TYPE | CHAR(1) | Type of the currently running routine | - -## 3.3 VERIFY\_GROUP\_FOR\_USER function - -The VERIFY\_GROUP\_FOR\_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION\_USER, USER, or CURRENT\_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. - -If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. - -Here is an example of using the VERIFY\_GROUP\_FOR\_USER function: - -- 1. There are user profiles for MGR, JANE, JUDY, and TONY. -- 2. The user profile JANE specifies a group profile of MGR. -- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: - -``` -VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'MGR') VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'JANE', 'MGR') VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'JUDY', 'TONY') -``` - -## 3.4 Establishing and controlling accessibility by using the RCAC rule text - -When defining a row permission or column mask, the "magic" of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine. - -In the case of a row permission, the rule text is the "test" of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot. - -In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value. - -For a simple example of implementing row permissions and column masks, see 3.6, "Human resources example" on page 22. - -In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause. - -For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking. - -For more information about what is permitted, see the "Database programming" topic of the IBM i 7.2 Knowledge Center, found at: - -http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzahg/rzahgdbp.htm?lang =en - -One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user's identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques. - -More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1. - -Example 3-1 Subquery that is used as part of the rule - -DATE\_MASTER D - -D.BUSINESS\_DAY = 'Y') - -CURRENT\_DATE IN (SELECT D.DATE\_KEY FROM WHERE - -Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS\_DAY value in the DATE\_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions. - -## 3.5 SELECT, INSERT, and UPDATE behavior with RCAC - -RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis. - -Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you. - -For more information and considerations about data movement in an RCAC environment, see Chapter 6, "Additional considerations" on page 85. - -Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data. - -## 3.6 Human resources example - -This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users: - -- GLYPH Tax\_Id information -- GLYPH YEAR of the birth date of the employee (hiding the age of the employee) - -In this example, there are four different types of users: - -- GLYPH Employees -- GLYPH Managers -- GLYPH Human Resources Manager -- GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.) - -The following sections describe step-by-step what is needed to be done to implement RCAC in this environment. - -## 3.6.1 Assigning the QIBM\_DB\_SECADM function ID to the consultants - -The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, "Security Administrator function: QIBM\_DB\_SECADM" on page 9). Complete the following steps: - -- 1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority. - -Example 3-2 Function ID required to implement RCAC - -CHGFCNUSG FCNID(QIBM\_DB\_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM\_DB\_SECADM) USER(MCAIN) USAGE(*ALLOWED) - -- 2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3. - -Example 3-3 Verifying what user profiles have authorization to implement RCAC - -SELECT function\_id, user\_name, usage, user\_type FROM qsys2.function\_usage WHERE function\_id ='QIBM\_DB\_SECADM' ORDER BY user\_name; - -- 3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database. - -Figure 3-6 Result of the function ID query - -## 3.6.2 Creating group profiles for the users and their roles - -Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps: - -- 1. In this example, there are three group profiles: -- -HR (Human Resource personnel) -- -MGR (Managers) -- -EMP (Employees) - -These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles. - -Example 3-4 Creating group profiles - -CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group') - -- 2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS). - -Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile. - -## 3.6.3 Demonstrating data access without RCAC - -Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps: - -- 1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table. - -Example 3-5 Counting the number of employees - -SELECT COUNT(*) as ROW\_COUNT FROM HR\_SCHEMA.EMPLOYEES; - -The result of this query is shown in Figure 3-7, which is the total number of employees of the company. - -Figure 3-7 Number of employees - - - -- 2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are. - -Example 3-6 Displaying the information of the Employees - -SELECT EMPLOYEE\_ID, LAST\_NAME, JOB\_DESCRIPTION, DATE\_OF\_BIRTH, TAX\_ID, USER\_ID, MANAGER\_OF\_EMPLOYEE FROM HR\_SCHEMA.EMPLOYEES - -## The result of this query is shown in Figure 3-8. - -Figure 3-8 List of employees without RCAC enabled - -## 3.6.4 Defining and creating row permissions - -Implement RCAC on the EMPLOYEES table by completing the following steps: - -- 1. Start by defining a row permission. In this example, the rules to enforce include the following ones: -- -Human Resources employees can see all the rows. -- -Managers can see only information for the employees that they manage. -- -Employees can see only their own information. -- -Consultants are not allowed to see any rows in the table. - -To implement this row permission, run the SQL statement that is shown in Example 3-7. - -Example 3-7 Creating a permission for the EMPLOYEE table - -``` -CREATE PERMISSION HR\_SCHEMA.PERMISSION1\_ON\_EMPLOYEES ON HR\_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'HR' ) = 1 ) OR ( VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER\_OF\_EMPLOYEE = SESSION\_USER OR EMPLOYEES . USER\_ID = SESSION\_USER ) ) OR ( VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'EMP' ) = 1 AND EMPLOYEES . USER\_ID = SESSION\_USER ) ENFORCED FOR ALL ACCESS ENABLE ; -``` - -- 2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM\_DEFAULT\_EMPLOYEE\_HR\_SCHEMA is the default permission, as described in 3.1.2, "Enabling and activating RCAC" on page 16. - -Figure 3-9 Row permissions that are shown in System i Navigator - - - -## 3.6.5 Defining and creating column masks - -Define the different masks for the columns that are sensitive by completing the following steps: - -- 1. Start with the DAY\_OF\_BIRTH column. In this example, the rules to enforce include the following ones: -- -Human Resources can see the entire date of birth of the employees. -- -Employees can see only their own date of birth. -- -Managers can see the date of birth of their employees masked with YEAR being 9999. - -To implement this column mask, run the SQL statement that is shown in Example 3-8. - -Example 3-8 Creation of a mask on the DATE\_OF\_BIRTH column - -CREATE MASK HR\_SCHEMA.MASK\_DATE\_OF\_BIRTH\_ON\_EMPLOYEES ON HR\_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE\_OF\_BIRTH - -RETURN CASE - -``` -WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE\_OF\_BIRTH WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER = EMPLOYEES . USER\_ID THEN EMPLOYEES . DATE\_OF\_BIRTH WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER <> EMPLOYEES . USER\_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE\_OF\_BIRTH ) || '-' || DAY (EMPLOYEES.DATE\_OF\_BIRTH )) ELSE NULL END ENABLE ; -``` - -- 2. The other column to mask in this example is the TAX\_ID information. In this example, the rules to enforce include the following ones: -- -Human Resources can see the unmasked TAX\_ID of the employees. -- -Employees can see only their own unmasked TAX\_ID. -- -Managers see a masked version of TAX\_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). -- -Any other person sees the entire TAX\_ID as masked, for example, XXX-XX-XXXX. -- To implement this column mask, run the SQL statement that is shown in Example 3-9. - -Example 3-9 Creating a mask on the TAX\_ID column - -``` -CREATE MASK HR\_SCHEMA.MASK\_TAX\_ID\_ON\_EMPLOYEES ON HR\_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX\_ID RETURN CASE WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX\_ID WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER = EMPLOYEES . USER\_ID THEN EMPLOYEES . TAX\_ID WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER <> EMPLOYEES . USER\_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX\_ID , 8 , 4 ) ) WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX\_ID ELSE 'XXX-XX-XXXX' END ENABLE ; -``` - -- 3. Figure 3-10 shows the masks that are created in the HR\_SCHEMA. - -Figure 3-10 Column masks shown in System i Navigator - - - -## 3.6.6 Activating RCAC - -Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: - -- 1. Run the SQL statements that are shown in Example 3-10. - -## Example 3-10 Activating RCAC on the EMPLOYEES table - -- /* Active Row Access Control (permissions) */ - -/* Active Column Access Control (masks) ALTER TABLE HR\_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; - -*/ - -- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR\_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . - -Figure 3-11 Selecting the EMPLOYEES table from System i Navigator - - - -- 3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked. - -Figure 3-12 RCAC enabled on the EMPLOYEES table - - - -## 3.6.7 Demonstrating data access with RCAC - -You are now ready to start testing RCAC with the four different users. Complete the following steps: - -- 1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, "Demonstrating data access without RCAC" on page 24). - -Example 3-11 EMPLOYEES count - -SELECT COUNT(*) as ROW\_COUNT FROM HR\_SCHEMA.EMPLOYEES; - -- 2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees). - -Figure 3-13 Count of EMPLOYEES by HR - - - -- 3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6. - -Figure 3-14 Count of EMPLOYEES by a manager - - - -- 4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row). - -Figure 3-15 Count of EMPLOYEES by an employee - - - -- 5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all. - -Figure 3-16 Count of EMPLOYEES by a consultant - - - -Does the result make sense? Yes, it does because RCAC is enabled. - -- 6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, "Demonstrating data access without RCAC" on page 24. It is shown in Example 3-12. - -Example 3-12 SELECT statement to test with the different users - -``` -SELECT EMPLOYEE\_ID, LAST\_NAME, JOB\_DESCRIPTION, DATE\_OF\_BIRTH, TAX\_ID, USER\_ID, MANAGER\_OF\_EMPLOYEE FROM HR\_SCHEMA.EMPLOYEES -``` - -- 7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns. - -Figure 3-17 SQL statement result by Human Resources user profile - -- 8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE\_OF\_BIRTH and TAX\_ID columns. - -Figure 3-18 SQL statement result by Manager profile - -- 9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all. - -Figure 3-19 SQL statement result by an employee profile - -- 10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company's employees. - -Figure 3-20 SQL statement result by Consultant/DBE profile - -## 3.6.8 Demonstrating data access with a view and RCAC - -This section covers data access with a view and RCAC. Complete the following steps: - -- 1. The EMPLOYEES table has a column that is called On\_Leave\_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave. - -Figure 3-21 Employees on leave - -- 2. Example 3-13 shows the definition of the view. - -Example 3-13 VIew of employees on leave - -``` -CREATE VIEW HR\_SCHEMA.EMPLOYEES\_ON\_LEAVE (EMPLOYEE\_ID, FIRST\_NAME, MIDDLE\_INITIAL, LAST\_NAME, WORK\_DEPARTMENT, PHONE\_EXTENSION, JOB\_DESCRIPTION, DATE\_OF\_BIRTH, -``` - -TAX\_ID, USER\_ID, MANAGER\_OF\_EMPLOYEE, ON\_LEAVE\_FLAG ) - -AS - -SELECT EMPLOYEE\_ID, FIRST\_NAME , MIDDLE\_INITIAL, LAST\_NAME , WORK\_DEPARTMENT, PHONE\_EXTENSION, JOB\_DESCRIPTION, DATE\_OF\_BIRTH, TAX\_ID, USER\_ID, MANAGER\_OF\_EMPLOYEE, - -ON\_LEAVE\_FLAG - -FROM - -HR\_SCHEMA.EMPLOYEES - -WHERE - -ON\_LEAVE\_FLAG = 'Y'; - -- 3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14: - -Example 3-14 SQL statement for employees on leave - -SELECT EMPLOYEE\_ID, LAST\_NAME, JOB\_DESCRIPTION, DATE\_OF\_BIRTH, TAX\_ID, USER\_ID, MANAGER\_OF\_EMPLOYEE FROM - -HR\_SCHEMA.EMPLOYEES\_ON\_LEAVE; - -- 4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE\_OF\_BIRTH and TAX\_ID columns. The results of the query are shown in Figure 3-22. - -Figure 3-22 Employees on leave - Human Resources user - -- 5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well. - -Figure 3-23 Employee on leave - Manager of Field Reps user - -- 6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave. - -. - -Figure 3-24 Employees on leave - employee user - - - -Chapter 4. - -4 - -## Implementing Row and Column Access Control: Banking example - -This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. - -The following topics are covered in this chapter: - -- GLYPH Business requirements for the RCAC banking scenario -- GLYPH Description of the users roles and responsibilities -- GLYPH Implementation of RCAC - -## 4.1 Business requirements for the RCAC banking scenario - -As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application: - -- GLYPH CUSTOMERS -- GLYPH ACCOUNTS -- GLYPH TRANSACTIONS - -RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values. - -In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee's personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet. - -Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile. - -The customer's identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER\_LOGIN\_ID variable to the customer's login value. This value is compared to the customer's login value that is found in the CUSTOMER\_LOGIN\_ID column of the CUSTOMERS table. - -Applications that do not use the web interface do not have to be changed because the global variable is NULL by default. - -A diagram of the internet banking architecture is shown in Figure 4-1: - -- GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested. -- GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent). -- GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent). - -Figure 4-1 Internet banking example - - - -## 4.2 Description of the users roles and responsibilities - -During the requirements gathering phase, the following groups of users are identified and codified: - -- GLYPH SECURITY: Security officer and security administrators -- GLYPH DBE: Database engineers -- GLYPH ADMIN: Bank business administrators -- GLYPH TELLER: Bank tellers -- GLYPH CUSTOMER: Bank customers using the internet -- GLYPH PUBLIC: Anyone not already in a group - -Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example. - -Figure 4-2 Rules for row and column access - - - -The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table. - -Figure 4-3 Column masks - -| | | CUSTOMERS | ACCOUNTS | -|----------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------| -| SECURITY | No Rows | CUSTOMER\_DRIVERS\_LICENSE\_NUMBER CUSTOMER\_EMAIL CUSTOMER\_LOGIN\_ID CUSTOMER\_SECURITY\_QUESTION CUSTOMER\_SECURITY\_QUESTION\_ANSWER CUSTOMER\_TAX\_ID | ACCOUNT\_NUMBER | -| DBE | All Rows | CUSTOMER\_DRIVERS\_LICENSE\_NUMBER CUSTOMER\_EMAIL CUSTOMER\_LOGIN\_ID CUSTOMER\_SECURITY\_QUESTION CUSTOMER\_SECURITY\_QUESTION\_ANSWER CUSTOMER\_TAX\_ID | ACCOUNT NUMBER ACCOUNT\_NUMBER | -| ADMIN | All Rows | None | None | -| TELLER | All Rows | CUSTOMER\_EMAIL CUSTOMER\_LOGIN\_ID CUSTOMER\_SECURITY\_QUESTION CUSTOMER\_SECURITY\_QUESTION\_ANSWER CUSTOMER TAX ID \_ \_ | None | -| CUSTOMER | Own Rows | None | None | -| PUBLIC | No Rows | CUSTOMER\_DRIVERS\_LICENSE\_NUMBER CUSTOMER\_EMAIL CUSTOMER LOGIN ID CUSTOMER\_LOGIN\_ID CUSTOMER\_SECURITY\_QUESTION CUSTOMER\_SECURITY\_QUESTION\_ANSWER CUSTOMER\_TAX\_ID | ACCOUNT\_NUMBER | - -For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur. - -- GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group. -- GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group. -- GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group. -- GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group. -- GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group. -- GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed. -- GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG. - -## 4.3 Implementation of RCAC - -Figure 4-4 shows the data model of the banking scenario that is used in this example. - -Figure 4-4 Data model of the banking scenario - - - -This section covers the following steps: - -- GLYPH Reviewing the tables that are used in this example -- GLYPH Assigning function ID QIBM\_DB\_SECADM to the Database Engineers group -- GLYPH Creating group profiles for the users and their roles -- GLYPH Creating the CUSTOMER\_LOGIN\_ID global variable -- GLYPH Defining and creating row permissions -- GLYPH Defining and creating column masks -- GLYPH Restricting the inserting and updating of masked data -- GLYPH Activating row and column access control -- GLYPH Reviewing row permissions -- GLYPH Demonstrating data access with RCAC -- GLYPH Query implementation with RCAC activated - -## 4.3.1 Reviewing the tables that are used in this example - -This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers. - -Figure 4-5 Tables that are used in the banking example - - - -Note: Appendix A, "Database definitions for the RCAC banking example" on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example. - -To review the attributes of each table that is used in this banking example, complete the following steps: - -- 1. Review the columns of each the tables through System i Navigator. Expand Database  named Database  Schemas  BANK\_SCHEMA  Tables . -- 2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented. - -Figure 4-6 CUSTOMERS table attributes - - - -- 3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7. - -Figure 4-7 Column definitions of the CUSTOMERS table - -- 4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table. - -Figure 4-8 Reviewing the constraints on the CUSTOMERS table - - - -- 5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet. - -Figure 4-9 ACCOUNTS table attributes - - - -- 6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10. - -Figure 4-10 Column definitions of the ACCOUNTS table - -- 7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table. - -Figure 4-11 Reviewing the constraints on the ACCOUNTS table - - - -- 8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet. - -Figure 4-12 TRANSACTIONS table attributes - - - -- 9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13. - -Figure 4-13 Column definitions of the TRANSACTIONS table - -- 10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table. - -Figure 4-14 Reviewing the constraints on the TRANSACTIONS table - - - -Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario. - -## 4.3.2 Assigning function ID QIBM\_DB\_SECADM to the Database Engineers group - -The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, "Roles" on page 8. In this example, the DBEs are users MCAIN and HBEDOYA. - -## Complete the following steps: - -- 1. Right-click the database connection and select Application Administration , as shown in Figure 4-15. - -Figure 4-15 Application administration - - - -- 2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i  Database and select the function usage ID of Database Security Administrator . - -Figure 4-16 Application administration for IBM i - - - -- 3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17. - -Figure 4-17 Customizing the Database Security Administrator function usage ID - - - -- 4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK . - -Figure 4-18 Customize Access window - - - -- 5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19. - -Figure 4-19 Function usage ID Database Security Administrator customized - - - -- 6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20. - -Figure 4-20 Query to display user profiles with function usage ID for RCAC - - - -## 4.3.3 Creating group profiles for the users and their roles - -The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, "Description of the users roles and responsibilities" on page 39. - -## Complete the following steps: - -- 1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21. - -Figure 4-21 Creating group profiles - - - -- 2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add . - -Figure 4-22 shows adding user TQSPENCER to the TELLER group profile. - -Figure 4-22 Creating group profiles and adding users - - - -- 3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups  Groups , as shown in Figure 4-23. - -Figure 4-23 Newly created group profiles - - - -## 4.3.4 Creating the CUSTOMER\_LOGIN\_ID global variable - -In this step, you create a global variable that is used to capture the Customer\_Login\_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, "Built-in global variables" on page 19. - -## Complete the following steps: - -- 1. From System i Navigator, under the schema Bank\_Schema, right-click Global Variable and select New  Global Variable , as shown in Figure 4-24. - -Figure 4-24 Creating a global variable - - - -- 2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER\_LOGIN\_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK . - -Figure 4-25 Creating a global variable called CUSTOMER\_LOGIN\_ID - - - -- 3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER\_LOGIN\_ID global variable and select Permissions , as shown in Figure 4-26. - -Figure 4-26 Setting permissions on the CUSTOMER\_LOGIN\_ID global variable - - - -- 4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable. - -Figure 4-27 Setting change permissions for Webuser on the CUSTOMER\_LOGIN\_ID global variable - - - -## 4.3.5 Defining and creating row permissions - -You now ready to define the row permissions of the tables. Complete the following steps: - -- 1. From the navigation pane of System i Navigator, click Schemas  BANK\_SCHEMA , right-click Row Permissions , and select New  Row Permission , as shown in Figure 4-28. - -Figure 4-28 Selecting new row permissions - - - -- 2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy: -- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows. -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER\_LOGIN\_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER\_LOGIN\_ID column value in the CUSTOMERS table. -- -Any other user profile cannot see any rows at all. - -Select the Enabled option. Click OK . - -Figure 4-29 New row permissions on the CUSTOMERS table - - - -- 3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy: -- -User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows. -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER\_LOGIN\_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER\_LOGIN\_ID column value in the CUSTOMERS table. -- -Any other user profile cannot see any rows at all. - -Select the Enabled option. Click OK . - -Figure 4-30 New row permissions on the ACCOUNTS table - - - -- 4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy: -- -User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows. -- -User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER\_LOGIN\_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER\_LOGIN\_ID column value in the CUSTOMERS table. - -Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER\_LOGIN\_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored. - -- -Any other user profile cannot see any rows at all. - -Select the Enabled option. Click OK . - -Figure 4-31 New row permissions on the TRANSACTIONS table - - - -- 5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled. - -Figure 4-32 List of row permissions on BANK\_SCHEMA - - - -## 4.3.6 Defining and creating column masks - -This section defines the masks on the columns. Complete the following steps: - -- 1. From the main navigation pane of System i Navigator, click Schemas  BANK\_SCHEMA , right-click Column Masks , and select New  Column Mask , as shown in Figure 4-33. - -Figure 4-33 Creating a column mask - - - -- 2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information: -- -Select the CUSTOMERS table on which to create the column mask. -- -Select the Column to mask; in this example, it is CUSTOMER\_EMAIL. -- -Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****. - -Select the Enabled option. Click OK . - -Figure 4-34 Defining a column mask on the CUSTOMERS table - - - -- 3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns: -- -MASK\_DRIVERS\_LICENSE\_ON\_CUSTOMERS -- -MASK\_LOGIN\_ID\_ON\_CUSTOMERS -- -MASK\_SECURITY\_QUESTION\_ANSWER\_ON\_CUSTOMERS -- -MASK\_ACCOUNT\_NUMBER\_ON\_ACCOUNTS -- -MASK\_SECURITY\_QUESTION\_ON\_CUSTOMERS -- -MASK\_TAX\_ID\_ON\_CUSTOMERS - -- 4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled. - -Figure 4-35 List of column masks on BANK\_SCHEMA - - - -## 4.3.7 Restricting the inserting and updating of masked data - -This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, "Avoiding propagation of masked data" on page 108. - -## Complete the following steps: - -- 1. Create a check constraint on the column CUSTOMER\_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36 - -Figure 4-36 Definition of the CUSTOMERS table - - - -- 2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37. - -Figure 4-37 Adding a check constraint - - - -- 3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps: -- a. Select the CUSTOMER\_EMAIL column. -- b. Enter the check constraint condition. In this example, specify CUSTOMER\_EMAIL to be different from ****@****, which is the mask value. -- c. Select the On update violation, preserve column value option and click OK . - -Figure 4-38 Specifying a new check constraint on the CUSTOMERS table - - - -- 4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER\_EMAIL column. - -Figure 4-39 Check constraint on the CUSTOMERS table - - - -- 5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40. - -Figure 4-40 List of check constraints on the CUSTOMERS table - - - -## 4.3.8 Activating row and column access control - -You are now ready to activate RCAC on all three tables in this example. Complete the following steps: - -- 1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK . - -Figure 4-41 Enabling RCAC on the CUSTOMERS table - - - -- 2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK . - -Figure 4-42 Enabling RCAC on ACCOUNTS - - - -- 3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK . - -Figure 4-43 Enabling RCAC on TRANSACTIONS - - - -## 4.3.9 Reviewing row permissions - -This section displays all the row permissions after enabling RCAC. Complete the following steps: - -- 1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM\_DEFAULT*). There is one per each row permission. - -Figure 4-44 Row permissions after enabling RCAC - - - -- 2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45. - -Figure 4-45 Selecting row permission definition - - - -- 3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM\_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied. - -Figure 4-46 Search condition of the QIBM\_DEFAULT row permission - - - -## 4.3.10 Demonstrating data access with RCAC - -You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER): - -- GLYPH A SELECT statement that returns the SESSION\_USER. -- GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table. -- GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer\_name: -- -c u s t o m e r \_ i d -- -customer\_name -- -customer\_email -- -c u s t o m e r \_ t a x \_ i d -- -customer\_drivers\_license\_number - -## Data access for a DBE user with RCAC - -To test a DBE (MCAIN) user, complete the following steps: - -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user. - -Figure 4-47 DBE session user - - - -- 2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48. - -Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table - - - -- 3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked. - -Figure 4-49 SQL statement that is run by the DBE user with masked columns - -## Data access for SECURITY user with RCAC - -To test a SECURITY user, complete the following steps: - -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer. - -Figure 4-50 SECURITY session user - - - -- 2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all. - -Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table - - - -- 3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer. - -Figure 4-52 SQL statement that is run by the SECURITY user - no results - - - -## Data access for TELLER user with RCAC - -To test a Teller (TQSPENCER) user, complete the following steps: - -- 1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user. - -Figure 4-53 TELLER session user - - - -- 2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows. - -Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table - - - -- 3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked. - -Figure 4-55 SQL statement that is run by the TELLER user with masked columns - - - -## Data access for ADMIN user with RCAC - -To test an ADMIN (VGLUCCHESS) user, complete the following steps: - -- 1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user. - -Figure 4-56 ADMIN session user - - - -- 2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows. - -Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table - - - -- 3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns. - -Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns - -## Data access for WEBUSER user with RCAC - -To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps: - -- 1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user. - -Figure 4-59 WEBUSER session user - - - -- 2. A global variable (CUSTOMER\_LOGIN\_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID. - -Figure 4-60 Setting the global variable CUSTOMER\_LOGIN\_ID - - - -- 3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61. - -Figure 4-61 Viewing the global variable value - - - -- 4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID. - -Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table - - - -- 5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user's own row. - -Figure 4-63 SQL statement that is run by WEBUSER - no masked columns - - - -## Other examples of data access with RCAC - -To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps: - -- 1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts. - -Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile - -- 2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions. - -Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile - -- 3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table. - -Figure 4-66 List of accounts and current balance by customer using a TELLER user profile - -## 4.3.11 Query implementation with RCAC activated - -This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer. - -## Complete the following steps: - -- 1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing. - -Figure 4-67 Visual Explain with no RCAC enabled - - - -- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. - -Figure 4-68 Visual Explain with RCAC enabled - - - -- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. - -Figure 4-69 Index advice with no RCAC - - - -- 4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, "Index advisor" on page 99. - -Figure 4-70 Index advice with RCAC enabled - - - - - -Chapter 5. - -5 - -## RCAC and non-SQL interfaces - -A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF ). - -This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter. - -The following topics are covered in this chapter in this chapter: - -- GLYPH Unsupported interfaces -- GLYPH Native query result differences -- GLYPH Accidental updates with masked values -- GLYPH System CL commands considerations - -## 5.1 Unsupported interfaces - -It is not possible to create a row permission or column mask on a distributed table or a program-described file. - -After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message: - -- GLYPH A logical file with multiple formats if the open attempt requests more than one format. -- GLYPH A table or query that specifies an ICU 2.6.1 sort sequence. -- GLYPH A table with read triggers. - -This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated. - -For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1. - -Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC. - -## 5.2 Native query result differences - -The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items: - -- GLYPH Query/400 -- GLYPH QQQQRY API -- GLYPH Open Query File ( OPNQRYF ) command -- GLYPH Run Query ( RUNQRY ) command -- GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view - -Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default. - -The following list documents some of the query output differences that can occur when native query requests are processed by CQE: - -- GLYPH Different ordering in the result set -- GLYPH Different values for null columns or columns with errors -- GLYPH Suppression of some mapping error messages -- GLYPH Loss of RRN positioning capabilities -- GLYPH Duplicate key processing behavior differences -- GLYPH Missing key feedback - -For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at: - -http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzahg/rzahgmtu.htm - -In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance. - -Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces. - -## 5.3 Accidental updates with masked values - -The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access. - -For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program's record buffer, as shown Figure 5-1. - -In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value. - -Figure 5-1 Accidental update with masked values scenario - - - -Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values. - -DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, "Check constraint solution" on page 108. - -## 5.4 System CL commands considerations - -As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC. - -## 5.4.1 Create Duplicate Object (CRTDUPOBJ) command - -The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL . - -If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error. - -When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object. - -## 5.4.2 Copy File (CPYF) command - -The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table. - -When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command. - -If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received. - -## 5.4.3 Copy Library (CPYLIB) command - -The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, "Create Duplicate Object (CRTDUPOBJ) command" on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL . - - - -Chapter 6. - -## Additional considerations - -This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions: - -- GLYPH Timing of column masking -- GLYPH Data movement -- GLYPH Joins -- GLYPH Views -- GLYPH Materialized query tables -- GLYPH Index advisor -- GLYPH Monitoring, analysis, and debugging -- GLYPH Performance and scalability - -The following topics are covered in this chapter: - -- GLYPH Timing of column masking -- GLYPH RCAC effects on data movement -- GLYPH RCAC effects on joins -- GLYPH Monitoring, analyzing, and debugging with RCAC -- GLYPH Views, materialized query tables, and query rewrite with RCAC -- GLYPH RCAC effects on performance and scalability -- GLYPH Exclusive lock to implement RCAC (availability issues) -- GLYPH Avoiding propagation of masked data -- GLYPH Triggers and functions (SECURED) -- GLYPH RCAC is only one part of the solution - -6 - -## 6.1 Timing of column masking - -An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking. - -An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values. - -SELECT - -CREDIT\_CARD\_NUMBER, - -FROM - -GROUP BY - -CREDIT\_CARD\_NUMBER - -ORDER BY - -CREDIT\_CARD\_NUMBER; - -## Without RCAC Masking - -## With RCAC Masking - -| CREDIT CARD NUMBER \_ \_ | TOTAL | -|--------------------------|---------------| -| 3785 0000 0000 1234 | 233.50 | -| 3785 1111 1111 1234 | 105.10 | -| 3785 2222 2222 1234 | 300 00 300.00 | -| 3785 3333 3333 1234 | 1,775.00 | -| 5466 4444 4444 1234 | 601.70 | -| 5466 5555 5555 1234 | 37.80 | -| 5466 6666 6666 1234 | 490.45 | -| 6011 7777 7777 1234 | 1005.00 | -| 6011 8888 8888 1234 | 750.33 | -| 6011 9999 9999 0001 | 10.00 | - -Figure 6-1 Timing of column masking - -| CREDIT CARD NUMBER \_ \_ | TOTAL | -|---------------------------|---------------| -| **** **** **** 1234 | 233.50 | -| **** **** **** 1234 | 105.10 | -| **** **** **** 1234 | 300 00 300.00 | -| **** **** **** 1234 | 1,775.00 | -| **** **** **** 1234 | 601.70 | -| **** **** **** 1234 | 37.80 | -| **** **** **** 1234 | 490.45 | -| **** **** **** 1234 1234 | 1005.00 | -| **** **** **** 1234 | 750.33 | -| **** **** **** 0001 | 10.00 | - -SUM(AMOUNT) AS TOTAL TRANSACTIONS - -Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query's final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2. - -Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask. - -Figure 6-2 Masking differences between Fieldproc and RCAC - - - -## 6.2 RCAC effects on data movement - -As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss. - -Figure 6-3 RCAC and data movement - - - -The "user" that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization's object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC. - -Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data. - -This section covers in detail the following three examples: - -- GLYPH Effects when RCAC is defined on the source table -- GLYPH Effects when RCAC is defined on the target table -- GLYPH Effects when RCAC is defined on both source and target tables - -## 6.2.1 Effects when RCAC is defined on the source table - -Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table. - -Example 6-1 INSERT INTO TARGET statement - -INSERT INTO TARGET (SELECT * FROM SOURCE); - -For example, given a "source" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4. - -Figure 6-4 RCAC effects on data movement from SOURCE - - - -## 6.2.2 Effects when RCAC is defined on the target table - -Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table. - -Example 6-2 INSERT INTO TARGET statement - -INSERT INTO TARGET (SELECT * FROM SOURCE); - -Given a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the "target", and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table's permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read. - -Figure 6-5 RCAC effects on data movement on TARGET - - - -## 6.2.3 Effects when RCAC is defined on both source and target tables - -Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables. - -Example 6-3 INSERT INTO TARGET statement - -INSERT INTO TARGET (SELECT * FROM SOURCE); - -Given a "source" table and a "target" table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the "target" table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned. - -Although the source rows where NAME <> 'CAIN' do satisfy the target table's permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data. - -Figure 6-6 RCAC effects on data movement on SOURCE and TARGET - - - -## 6.3 RCAC effects on joins - -As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled. - -Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation. - -As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see. - -Figure 6-7 Set A and set B with row permissions - - - -## 6.3.1 Inner joins - -Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8. - -Figure 6-8 Inner join without RCAC permission - - - -Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9. - -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. - -Figure 6-9 Inner join with RCAC permission - - - -## 6.3.2 Outer joins - -Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default. - -Figure 6-10 Outer join without RCAC permission - - - -Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11. - -Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. - -Figure 6-11 Outer join with RCAC permission - - - -## 6.3.3 Exception joins - -Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default. - -Figure 6-12 Exception join without RCAC permission - - - -Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set. - -Figure 6-13 Exception join with RCAC permission - - - -## 6.4 Monitoring, analyzing, and debugging with RCAC - -It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques. - -The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences: - -- GLYPH The underlying data access plan can be different and more complex based on the rule text. -- GLYPH The database results can be reduced or modified based on the rule text and user profile. -- GLYPH The run time of the request can be affected either positively or negatively based on the rule text. -- GLYPH For high-level language record level access, query plans must be considered, and not just program code. - -During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different. - -RCAC is designed and implemented to be transparent to the user. It is possible for user "Mike" and user "Hernando" to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user "Mike" and user "Hernando" have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query. - -When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the "variables" the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different. - -To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of "database engineer" becomes even more important. - -## 6.4.1 Query monitoring and analysis tools - -When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor. - -Figure 6-14 shows how Visual Explain externalizes RCAC. - -Figure 6-14 Visual Explain indicating that RCAC is applied - - - -Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary . - -Figure 6-15 SQL Performance Monitor - - - -Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied. - -Figure 6-16 SQL Performance Monitor indicating that RCAC is applied - - - -Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized. - -Figure 6-17 SQL Performance Monitor showing statements and RCAC - - - -When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer's policy for viewing these data elements. For example, supposed that column CUSTOMER\_TAX\_ID is deemed masked for the database engineer and the CUSTOMER\_TAX\_ID column is used in a predicate as follows: - -WHERE CUSTOMER\_TAX\_ID = '123-45-7890' - -The literal value of '123-45-7890' is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET\_COLUMN\_ATTRIBUTE procedure. - -The SET\_COLUMN\_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain. - -## 6.4.2 Index advisor - -Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point. - -The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised. - -For example, the query that is shown in Figure 6-18 produces index advice for the user's predicate and the RCAC predicate. - -Figure 6-18 Index advice and RCAC - - - -In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text. - -Figure 6-19 Index advisor based on the RCAC rule - - - -For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at: - -http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg\_ast\_sys\_wp\_db2\_i\_in dexing\_methods\_strategies - -## 6.4.3 Metadata using catalogs - -To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively. - -## Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view. - -Figure 6-20 RCAC and catalogs - -The SYSCONTROLS catalog view contains the following columns: - -- GLYPH COLUMN\_NAME -- GLYPH CONTROL\_TYPE -- GLYPH CREATE\_TIME -- GLYPH ENABLE -- GLYPH ENFORCED -- GLYPH ASP\_NUMBER -- GLYPH IMPLICIT -- GLYPH LABEL -- GLYPH LAST\_ALTERED -- GLYPH LONG\_COMMENT -- GLYPH RCAC\_NAME -- GLYPH RCAC\_OWNER -- GLYPH RCAC\_SCHEMA -- GLYPH RULETEXT -- GLYPH SYSTEM\_COLUMN\_NAME -- GLYPH SYSTEM\_TABLE\_NAME -- GLYPH SYSTEM\_TABLE\_SCHEMA -- GLYPH TABLE\_NAME -- GLYPH TABLE\_SCHEMA -- GLYPH TBCORRELATION - -The SYSCONTROLSDEP catalog view contains the following columns: - -- GLYPH COLUMN\_NAME -- GLYPH CONTROL\_TYPE -- GLYPH IASP\_NUMBER -- GLYPH OBJECT\_NAME -- GLYPH OBJECT\_SCHEMA -- GLYPH OBJECT\_TYPE -- GLYPH PARM\_SIGNATURE -- GLYPH RCAC\_NAME -- GLYPH RCAC\_SCHEMA -- GLYPH SYSTEM\_TABLE\_NAME -- GLYPH SYSTEM\_TABLE\_SCHEMA - -For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at: - -http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/db2/rbafzintro.htm?lang =en - -## 6.5 Views, materialized query tables, and query rewrite with RCAC - -This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table. - -## 6.5.1 Views - -Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query. - -Figure 6-21 View definition and user query - - - -What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22. - -Figure 6-22 Query rewrite with RCAC - - - -## 6.5.2 Materialized query tables - -When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data. - -Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried. - -When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks. - -The following example illustrates this scenario: - -- 1. Create schema and tables: - -CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER); - -- 2. Create a row permission that allows the employees to see only rows from the region they work in: - -``` -/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales\_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT\_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE; -``` - -- 3. Create an MQT to summarize sales by location: - --- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales\_perm1 predicate was not applied CREATE TABLE Schema1.Location\_Sales\_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total\_Location\_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; - -- 4. Populate the MQT (permission is not applied): - -/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location\_Sales\_MQT - -The following query matches Location\_Sales\_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales\_PERM1 permission: - -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; - -- 5. Create an MQT to summarize by region and location: - --- MQT to summarize by region and location Create table schema1.Region\_Location\_Sales\_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total\_Location\_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER; - -- 6. Populate the Region\_location\_Sales\_MQT (permission not applied): - -/* Populate the Region\_location\_Sales\_MQT - Permission not applied here */ Refresh table schema1.Region\_Location\_Sales\_MQT - -The following query can use the Region\_location\_SALES\_MQT because it has REGIONID, which is required for the schema1.sales\_PERM1 permission: - -SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid; - -This example has the following additional implications: - -- GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables. -- GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results. -- GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT. - -## 6.5.3 Query rewrite - -Query rewrite is a technique that the optimizer can use to change the original request to improve performance. - -For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1. - -As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC. - -## 6.6 RCAC effects on performance and scalability - -As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a "query", and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user's query, much like a query referencing a view. - -For native record level access, this RCAC "query" is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user's permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned. - -A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original "random read" request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of "not found" if the user is not entitled to any of the records. - -For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the "next record" in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23. - -Figure 6-23 Native record access with no RCAC - - - -Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24. - -Figure 6-24 Native record level access with RCAC - - - -After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended. - -## 6.7 Exclusive lock to implement RCAC (availability issues) - -When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC. - -Consider the following scenarios: - -- GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table: -- -Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data. -- -Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data. -- -Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data. -- -Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data. - -The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table. - -- GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table. -- GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message: - -SQ20471] INSERT or UPDATE does not satisfy row permissions. - -To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission. - -## 6.8 Avoiding propagation of masked data - -Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control. - -For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error: - -INSERT INTO TABLE1 SELECT * FROM TABLE2 - -The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint. - -There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger. - -## 6.8.1 Check constraint solution - -One way to prevent this problem is to define a check constraint. - -As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements. - -In the Example 6-4, the mask is defined to return a value of 'XXX-XX-nnnn' for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value. - -Example 6-4 Check constraint to avoid masked data - -``` -CREATE SCHEMA MY\_LIB SET SCHEMA MY\_LIB CREATE TABLE MY\_LIB.EMP\_INFO (COL1\_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2\_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK\_ssn ON MY\_LIB.EMP\_INFO FOR COLUMN COL2\_ssn RETURN CASE WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'DBMGR' ) = 1 THEN COL2\_ssn -``` - -``` -ELSE 'XXX-XX-'||SUBSTR(COL2\_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY\_LIB.EMP\_INFO ADD CONSTRAINT MASK\_ssn\_preserve CHECK(SUBSTR(COL2\_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2\_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2\_ssn = DEFAULT -- for insert set this to the default value. -``` - -## 6.8.2 Before trigger solution - -The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5. - -Example 6-5 Before trigger to avoid masked data - -``` -CREATE TRIGGER PREVENT\_MASK\_SSN BEFORE INSERT OR UPDATE ON MY\_LIB.EMP\_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2\_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2\_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2\_ssn = O.COL2\_ssn; END IF; END -``` - -## 6.9 Triggers and functions (SECURED) - -There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see. - -## 6.9.1 Triggers - -Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission. - -Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over. - -Example 6-6 Trigger SECURED - -``` -/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT\_MASK\_SSN BEFORE INSERT OR UPDATE ON MY\_LIB.EMP\_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2\_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2\_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2\_ssn = O.COL2\_ssn; END IF; END -``` - -## 6.9.2 Functions - -Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7. - -``` -Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY\_UDF(CURRENT\_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY\_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED -``` - -The SECURED attribute of MY\_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure. - -Consider the following examples: - -- GLYPH Table1 has RCAC defined and enabled. SELECT MY\_UDF2(Column2) from schema.table1. -- MY\_UDF2 must be created with the SECURED attribute. If MY\_UDF2 invokes MY\_UDF3, there is no checking to ensure that it is also created with SECURED. -- NOT SECURED is the default on the create function unless SECURED is explicitly selected. - -This same rule applies for any function that might be invoked with a masked column specified as an argument. - -- GLYPH Table2 column SSN has a column mask that is defined on it. -- SELECT MY\_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY\_UDF4 must be created with the SECURED attribute. - -## 6.10 RCAC is only one part of the solution - -When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges. - -Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files. - -Figure 6-25 Object-level security and RCAC permissions - - - -To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test. - -The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver. - -Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements. - -The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of "restricting access to data", and "needing access to data". - - - -Chapter 7. - -7 - -## Row and Column Access Control management - -After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered. - -The following topics are covered in this chapter: - -- GLYPH Managing row permissions and column masks -- GLYPH Managing tables with row permissions and column masks -- GLYPH Monitoring and auditing function usage - -## 7.1 Managing row permissions and column masks - -This section focuses on the management of the RCAC row permissions and column masks. - -## 7.1.1 Source management - -The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions. - -If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table. - -## 7.1.2 Modifying definitions - -After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition. - -This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process. - -## 7.1.3 Turning on and off - -As described in 3.1.2, "Enabling and activating RCAC" on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table. - -Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages. - -## 7.1.4 Regenerating - -DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects. - -For example, consider a row permission on an ACCOUNTS table (PERMISSION1\_ON\_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table. - -Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error. - -## 7.2 Managing tables with row permissions and column masks - -This section examines the object management considerations after RCAC is added to a DB2 table. - -## 7.2.1 Save and restore - -Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC. - -Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging. - -For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK\_SCHEMA) is saved and restored into a library named BANK\_TEST. Recall from the example in 7.1.4, "Regenerating" on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (… SELECT C.CUSTOMER\_ID FROM CUSTOMERS C …). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK\_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK\_SCHEMA to BANK\_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1. - -Figure 7-1 Restoring tables to different schemas - - - -The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the "Schema qualify names for objects" and select the "OR REPLACE clause", and then run the generated script. - -## 7.2.2 Table migration - -There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes. - -The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing. - -Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas. - -## 7.3 Monitoring and auditing function usage - -While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events. - -The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization's data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed. - -A new journal entry type of "AX" for journal entry code "T" (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents: - -- GLYPH IBM i Version 7.2 Journal Management Guide , found at: -- http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzaki/rzakiprintthis .htm?lang=en -- GLYPH IBM i Version 7.2 Security Reference Guide , found at: -- http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzarl/rzarlkickoff.h tm?lang=en - - - -Chapter 8. - -## Designing and planning for success - -Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing. - -The following topics are covered in this chapter: - -- GLYPH Implementing RCAC with good design and proper planning -- GLYPH DB2 for i Center of Excellence - -8 - -## 8.1 Implementing RCAC with good design and proper planning - -By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i. - -RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility. - -This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read. - -This paper has described the following pervasive power and advantages of RCAC: - -- GLYPH Access can be controlled through simple or sophisticated logic. -- GLYPH Virtually no application changes are required. -- GLYPH The implementation of the access policy is part of the DB2 data access layer. -- GLYPH Table data is protected regardless of the interface that is used. -- GLYPH No user is inherently exempted from the access control policies. -- GLYPH Groups of users can share policies and permissions. - -A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance. - -With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown. - -## 8.2 DB2 for i Center of Excellence - -To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design. - -If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com . - - - -Appendix A. - -## Database definitions for the RCAC banking example - -This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, "Implementing Row and Column Access Control: Banking example" on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example. - -Example A-1 DDL script to implement the RCAC banking example - -``` -/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK\_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK\_SCHEMA.CUSTOMER\_LOGIN\_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK\_SCHEMA.CUSTOMER\_LOGIN\_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK\_SCHEMA.CUSTOMERS ( CUSTOMER\_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER\_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER\_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER\_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER\_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER\_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER\_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER\_TAX\_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER\_DRIVERS\_LICENSE\_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER\_LOGIN\_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER\_SECURITY\_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , -``` - -A - -``` -CUSTOMER\_SECURITY\_QUESTION\_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT\_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT\_TIMESTAMP IMPLICITLY HIDDEN , UPDATE\_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK\_SCHEMA.CUSTOMER\_ID\_PK PRIMARY KEY( CUSTOMER\_ID ) ) ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK\_SCHEMA.CUSTOMER\_LOGIN\_ID\_UK UNIQUE( CUSTOMER\_LOGIN\_ID ) ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK\_SCHEMA.CUSTOMER\_DRIVERS\_LICENSE\_CHECK CHECK( CUSTOMER\_DRIVERS\_LICENSE\_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER\_DRIVERS\_LICENSE\_NUMBER ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK\_SCHEMA.CUSTOMER\_EMAIL\_CHECK CHECK( CUSTOMER\_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER\_EMAIL ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK\_SCHEMA.CUSTOMER\_LOGIN\_ID\_CHECK CHECK( CUSTOMER\_LOGIN\_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER\_LOGIN\_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER\_LOGIN\_ID ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK\_SCHEMA.CUSTOMER\_SECURITY\_QUESTION\_CHECK CHECK( CUSTOMER\_SECURITY\_QUESTION\_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER\_SECURITY\_QUESTION\_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER\_SECURITY\_QUESTION\_ANSWER ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK\_SCHEMA.CUSTOMER\_SECURITY\_QUESTION\_ANSWER CHECK( CUSTOMER\_SECURITY\_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER\_SECURITY\_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER\_SECURITY\_QUESTION ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK\_SCHEMA.CUSTOMER\_TAX\_ID\_CHECK CHECK( CUSTOMER\_TAX\_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER\_TAX\_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER\_TAX\_ID ; CREATE TABLE BANK\_SCHEMA.ACCOUNTS ( ACCOUNT\_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER\_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT\_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT\_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT\_DATE\_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT\_DATE , ACCOUNT\_DATE\_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT\_CURRENT\_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT\_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT\_TIMESTAMP IMPLICITLY HIDDEN , UPDATE\_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK\_SCHEMA.ACCOUNT\_ID\_PK PRIMARY KEY( ACCOUNT\_ID ) ); -``` - -``` -ALTER TABLE BANK\_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK\_SCHEMA.ACCOUNT\_CUSTOMER\_ID\_FK FOREIGN KEY( CUSTOMER\_ID ) REFERENCES BANK\_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK\_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK\_SCHEMA.ACCOUNT\_NUMBER\_CHECK CHECK( ACCOUNT\_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT\_NUMBER ; CREATE TABLE BANK\_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION\_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT\_ID INTEGER NOT NULL , TRANSACTION\_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION\_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT\_DATE , TRANSACTION\_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT\_TIME , TRANSACTION\_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT\_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT\_TIMESTAMP IMPLICITLY HIDDEN , UPDATE\_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK\_SCHEMA.TRANSACTION\_ID\_PK PRIMARY KEY( TRANSACTION\_ID ) ) ; ALTER TABLE BANK\_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK\_SCHEMA.TRANSACTIONS\_ACCOUNT\_ID\_FK FOREIGN KEY( ACCOUNT\_ID ) REFERENCES BANK\_SCHEMA.ACCOUNTS ( ACCOUNT\_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK\_SCHEMA.PERMISSION1\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER\_LOGIN\_ID = BANK\_SCHEMA . CUSTOMER\_LOGIN\_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_EMAIL\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_EMAIL RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_EMAIL WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_TAX\_ID\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_TAX\_ID RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 -``` - -``` -THEN C . CUSTOMER\_TAX\_ID WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER\_TAX\_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_TAX\_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_DRIVERS\_LICENSE\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_DRIVERS\_LICENSE\_NUMBER RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_DRIVERS\_LICENSE\_NUMBER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'TELLER' ) = 1 THEN C . CUSTOMER\_DRIVERS\_LICENSE\_NUMBER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_DRIVERS\_LICENSE\_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_LOGIN\_ID\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_LOGIN\_ID RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_LOGIN\_ID WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_LOGIN\_ID ELSE '*****' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_SECURITY\_QUESTION\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_SECURITY\_QUESTION RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_SECURITY\_QUESTION\_ANSWER\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_SECURITY\_QUESTION\_ANSWER RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION\_ANSWER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION\_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; -``` - -``` -CREATE PERMISSION BANK\_SCHEMA.PERMISSION1\_ON\_ACCOUNTS ON BANK\_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER\_ID IN ( SELECT C . CUSTOMER\_ID FROM BANK\_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER\_LOGIN\_ID = BANK\_SCHEMA . CUSTOMER\_LOGIN\_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_ACCOUNT\_NUMBER\_ON\_ACCOUNTS ON BANK\_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT\_NUMBER RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT\_NUMBER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'TELLER' ) = 1 THEN A . ACCOUNT\_NUMBER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT\_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK\_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK\_SCHEMA.PERMISSION1\_ON\_TRANSACTIONS ON BANK\_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT\_ID IN ( SELECT A . ACCOUNT\_ID FROM BANK\_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER\_ID IN ( SELECT C . CUSTOMER\_ID FROM BANK\_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER\_LOGIN\_ID = BANK\_SCHEMA . CUSTOMER\_LOGIN\_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK\_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */ -``` - -## Related publications - -The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper. - -## Other publications - -These publications are relevant as further information sources: - -- GLYPH IBM DB2 for i indexing methods and strategies white paper: -- http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg\_ast\_sys\_wp\_db2\_i \_indexing\_methods\_strategies -- GLYPH IBM i Memo to Users Version 7.2 : -- http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzahg/rzahgmtu.htm -- GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide : -- http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/db2/rbafzintro.htm?l ang=en -- GLYPH IBM i Version 7.2 Journal Management Guide : -- http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzaki/rzakiprintthis .htm?lang=en -- GLYPH IBM i Version 7.2 Security Reference Guide : -- http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzarl/rzarlkickoff.h tm?lang=en - -## Online resources - -These websites are relevant as further information sources: - -- GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center: -- http://www-01.ibm.com/support/knowledgecenter/ssw\_ibm\_i\_72/rzahg/rzahgdbp.htm?l ang=en -- GLYPH Identity Theft Resource Center -- http://www.idtheftcenter.org -- GLYPH Ponemon Institute -- http://www.ponemon.org/ - -## Help from IBM - -IBM Support and downloads - -ibm.com /support - -IBM Global Services - -ibm.com /services - -Back cover - -## Row and Column Access Control Support in IBM DB2 for i - -Implement roles and separation of duties - -Leverage row permissions on the database - -Protect columns by defining column masks - -This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. - -This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. - - - - - -INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION - -BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE - -IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. - -For more information: ibm.com /redbooks \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110.pages.json b/tests/data/groundtruth/docling_v2/redp5110.pages.json deleted file mode 100644 index ddd38715..00000000 --- a/tests/data/groundtruth/docling_v2/redp5110.pages.json +++ /dev/null @@ -1 +0,0 @@ -[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "section_header", "bbox": {"l": 192.0, "t": 70.99520874023438, "r": 468.15952000000004, "b": 85.18834686279297, "coord_origin": "TOPLEFT"}, "confidence": 0.723362147808075, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 191.42994689941406, "t": 103.42080688476562, "r": 551.77112, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6808906197547913, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 191.8452911376953, "t": 149.2097625732422, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7205957770347595, "cells": [{"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "page_footer", "bbox": {"l": 479.1854553222656, "t": 753.9530639648438, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155997037887573, "cells": [{"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 80.21302032470703, "t": 71.03994750976562, "r": 142.7141876220703, "b": 95.86432647705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9511593580245972, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "section_header", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "section_header", "bbox": {"l": 192.0, "t": 70.99520874023438, "r": 468.15952000000004, "b": 85.18834686279297, "coord_origin": "TOPLEFT"}, "confidence": 0.723362147808075, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization"}, {"label": "section_header", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 191.42994689941406, "t": 103.42080688476562, "r": 551.77112, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6808906197547913, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 191.8452911376953, "t": 149.2097625732422, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7205957770347595, "cells": [{"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}]}, "text": "November 2014"}, {"label": "page_footer", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 479.1854553222656, "t": 753.9530639648438, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155997037887573, "cells": [{"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "picture", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 80.21302032470703, "t": 71.03994750976562, "r": 142.7141876220703, "b": 95.86432647705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9511593580245972, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "section_header", "bbox": {"l": 192.0, "t": 70.99520874023438, "r": 468.15952000000004, "b": 85.18834686279297, "coord_origin": "TOPLEFT"}, "confidence": 0.723362147808075, "cells": [{"id": 0, "text": "International Technical Support Organization", "bbox": {"l": 192.0, "t": 72.16235000000006, "r": 468.15952000000004, "b": 85.09387000000004, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization"}, {"label": "section_header", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 191.42994689941406, "t": 103.42080688476562, "r": 551.77112, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6808906197547913, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 ", "bbox": {"l": 192.0, "t": 104.80237, "r": 551.77112, "b": 117.73388999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "for i", "bbox": {"l": 192.0, "t": 119.80291999999997, "r": 217.87138, "b": 132.73443999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 191.8452911376953, "t": 149.2097625732422, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7205957770347595, "cells": [{"id": 3, "text": "November 2014", "bbox": {"l": 192.0, "t": 149.80260999999996, "r": 290.98956, "b": 162.73413000000005, "coord_origin": "TOPLEFT"}}]}, "text": "November 2014"}, {"label": "picture", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 80.21302032470703, "t": 71.03994750976562, "r": 142.7141876220703, "b": 95.86432647705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9511593580245972, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "page_footer", "bbox": {"l": 479.1854553222656, "t": 753.9530639648438, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155997037887573, "cells": [{"id": 4, "text": "REDP-5110-00", "bbox": {"l": 479.45998999999995, "t": 754.848721, "r": 547.26367, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.55229949951172, "t": 737.2064208984375, "r": 426.39117, "b": 746.8391723632812, "coord_origin": "TOPLEFT"}, "confidence": 0.6578707098960876, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 64.10758972167969, "t": 747.6624755859375, "r": 547.20087, "b": 768.422899, "coord_origin": "TOPLEFT"}, "confidence": 0.739277184009552, "cells": [{"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.49017333984375, "t": 685.248046875, "r": 206.09755, "b": 695.7449340820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7352388501167297, "cells": [{"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 63.900901794433594, "t": 707.9268798828125, "r": 422.24246, "b": 718.252685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.8905011415481567, "cells": [{"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 70.31981658935547, "t": 88.49734497070312, "r": 511.22507, "b": 111.23179626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9383615851402283, "cells": [{"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.55229949951172, "t": 737.2064208984375, "r": 426.39117, "b": 746.8391723632812, "coord_origin": "TOPLEFT"}, "confidence": 0.6578707098960876, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved."}, {"label": "text", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "text", "bbox": {"l": 64.10758972167969, "t": 747.6624755859375, "r": 547.20087, "b": 768.422899, "coord_origin": "TOPLEFT"}, "confidence": 0.739277184009552, "cells": [{"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}]}, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp."}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.49017333984375, "t": 685.248046875, "r": 206.09755, "b": 695.7449340820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7352388501167297, "cells": [{"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}]}, "text": "First Edition (November 2014)"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.900901794433594, "t": 707.9268798828125, "r": 422.24246, "b": 718.252685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.8905011415481567, "cells": [{"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}]}, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1)."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 70.31981658935547, "t": 88.49734497070312, "r": 511.22507, "b": 111.23179626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9383615851402283, "cells": [{"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Before using this information and the product it supports, read the information in \u201cNotices\u201d on page vii."}], "body": [{"label": "text", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "text", "bbox": {"l": 64.10758972167969, "t": 747.6624755859375, "r": 547.20087, "b": 768.422899, "coord_origin": "TOPLEFT"}, "confidence": 0.739277184009552, "cells": [{"id": 1, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule", "bbox": {"l": 64.800011, "t": 749.117897, "r": 547.20087, "b": 757.442898, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contract with IBM Corp.", "bbox": {"l": 64.800018, "t": 760.097898, "r": 160.03624, "b": 768.422899, "coord_origin": "TOPLEFT"}}]}, "text": "Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp."}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.49017333984375, "t": 685.248046875, "r": 206.09755, "b": 695.7449340820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7352388501167297, "cells": [{"id": 3, "text": "First Edition (November 2014)", "bbox": {"l": 64.800003, "t": 686.50861, "r": 206.09755, "b": 695.721619, "coord_origin": "TOPLEFT"}}]}, "text": "First Edition (November 2014)"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.900901794433594, "t": 707.9268798828125, "r": 422.24246, "b": 718.252685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.8905011415481567, "cells": [{"id": 4, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1).", "bbox": {"l": 64.800003, "t": 708.528183, "r": 422.24246, "b": 717.741188, "coord_origin": "TOPLEFT"}}]}, "text": "This edition applies to Version 7, Release 2 of IBM i (product number 5770-SS1)."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 70.31981658935547, "t": 88.49734497070312, "r": 511.22507, "b": 111.23179626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9383615851402283, "cells": [{"id": 5, "text": "Note: ", "bbox": {"l": 70.800003, "t": 89.50867000000005, "r": 99.061501, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Before using this information and the product it supports, read the information in \u201cNotices\u201d on ", "bbox": {"l": 99.12027, "t": 89.50867000000005, "r": 511.22507, "b": 98.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "page vii.", "bbox": {"l": 70.800003, "t": 101.50847999999996, "r": 107.73766, "b": 110.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Before using this information and the product it supports, read the information in \u201cNotices\u201d on page vii."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.55229949951172, "t": 737.2064208984375, "r": 426.39117, "b": 746.8391723632812, "coord_origin": "TOPLEFT"}, "confidence": 0.6578707098960876, "cells": [{"id": 0, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 738.137901, "r": 426.39117, "b": 746.462898, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright International Business Machines Corporation 2014. All rights reserved."}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4805679321289, "t": 754.1161499023438, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8876830339431763, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 90.44805145263672, "t": 754.6052856445312, "r": 331.7034606933594, "b": 763.9476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.936427891254425, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"2": {"label": "table", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl"], "num_rows": 47, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.99295, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 530.53815, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 277.79886, "t": 377.98361, "r": 547.19684, "b": 399.19641, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2002, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.59186, "t": 427.48285, "r": 547.16876, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 440.02249, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.2002, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.8, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 178.85632, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20016, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 590.02013, "r": 524.9704, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 615.03964, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79996, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4805679321289, "t": 754.1161499023438, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8876830339431763, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iv"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.44805145263672, "t": 754.6052856445312, "r": 331.7034606933594, "b": 763.9476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.936427891254425, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "table", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl"], "num_rows": 47, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.99295, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 530.53815, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 277.79886, "t": 377.98361, "r": 547.19684, "b": 399.19641, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2002, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.59186, "t": 427.48285, "r": 547.16876, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 440.02249, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.2002, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.8, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 178.85632, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20016, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 590.02013, "r": 524.9704, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 615.03964, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79996, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "table", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.92572021484375, "t": 70.81258392333984, "r": 547.7196044921875, "b": 734.230957, "coord_origin": "TOPLEFT"}, "confidence": 0.9778977036476135, "cells": [{"id": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 504.58301, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": ". . . . .", "bbox": {"l": 505.67957, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "37", "bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "4.1", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 150.64761, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18666, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "38", "bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.2", "bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 150.64821, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Description of the users roles and responsibilities", "bbox": {"l": 156.18748, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 530.547, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "39", "bbox": {"l": 536.0863, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "4.3", "bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 150.68542, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Implementation of RCAC", "bbox": {"l": 156.23959, "t": 108.52795000000015, "r": 266.7135, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 272.26767, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "42", "bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.3.1", "bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 173.32434, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 178.85538, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 530.55383, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "42", "bbox": {"l": 536.0849, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "4.3.2", "bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 173.33942, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 178.87422, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ". .", "bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 530.76263, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "47", "bbox": {"l": 536.29742, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "4.3.3", "bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 173.32571, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8571, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "50", "bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "4.3.4", "bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 173.32639, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 178.85794, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 530.54919, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "52", "bbox": {"l": 536.08075, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "4.3.5", "bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 173.3559, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89482, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "54", "bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "4.3.6", "bbox": {"l": 151.20018, "t": 183.52661, "r": 173.3559, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Defining and creating column masks", "bbox": {"l": 178.89482, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.99295, "t": 183.52661, "r": 530.54706, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "58", "bbox": {"l": 536.086, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "4.3.7", "bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 173.35544, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89426, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "60", "bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "4.3.8", "bbox": {"l": 151.20018, "t": 208.48632999999995, "r": 173.51157, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Activating row and column access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0894, "t": 208.48632999999995, "r": 530.41339, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "63", "bbox": {"l": 535.99127, "t": 208.48632999999995, "r": 547.14697, "b": 217.69934, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "4.3.9", "bbox": {"l": 151.20018, "t": 221.02594, "r": 173.41745, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97176, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "64", "bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "4.3.10", "bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 179.05151, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Demonstrating data access with RCAC", "bbox": {"l": 181.83665, "t": 233.50580000000002, "r": 354.98581, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 360.55606, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "66", "bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "4.3.11", "bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 179.0511, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 181.83621, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "75", "bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Chapter 5. RCAC and non-SQL interfaces", "bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 335.23209, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 336.1803, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "79", "bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5.1", "bbox": {"l": 136.80002, "t": 280.48514, "r": 150.64661, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18524, "t": 280.48514, "r": 530.56097, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "80", "bbox": {"l": 536.09961, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.2", "bbox": {"l": 136.80002, "t": 293.02478, "r": 150.7034, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Native query result differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26476, "t": 293.02478, "r": 530.48578, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "80", "bbox": {"l": 536.04718, "t": 293.02478, "r": 547.16986, "b": 302.2377599999999, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "5.3", "bbox": {"l": 136.80002, "t": 305.50467, "r": 150.68428, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23799, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "81", "bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "5.4", "bbox": {"l": 136.80002, "t": 317.98456, "r": 150.62888, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "System CL commands considerations", "bbox": {"l": 156.16042, "t": 317.98456, "r": 323.13144, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 328.66299, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "82", "bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "5.4.1", "bbox": {"l": 151.20018, "t": 330.5242, "r": 173.4519, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01483, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "82", "bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "5.4.2", "bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 173.35596, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8949, "t": 343.0040900000001, "r": 530.53815, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "82", "bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "5.4.3", "bbox": {"l": 151.20018, "t": 355.48398, "r": 173.451, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01372, "t": 355.48398, "r": 530.49475, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "83", "bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "Chapter 6. Additional considerations", "bbox": {"l": 136.80002, "t": 377.98361, "r": 313.86292, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 313.98047, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "85", "bbox": {"l": 536.09131, "t": 377.98361, "r": 547.19684, "b": 387.19659, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "6.1", "bbox": {"l": 136.80003, "t": 389.98343, "r": 150.68416, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "Timing of column masking", "bbox": {"l": 156.23781, "t": 389.98343, "r": 272.24521, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 277.79886, "t": 389.98343, "r": 530.49005, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "86", "bbox": {"l": 536.0437, "t": 389.98343, "r": 547.151, "b": 399.19641, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "6.2", "bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 150.70372, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.2652, "t": 402.5230700000001, "r": 530.49445, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "88", "bbox": {"l": 536.05591, "t": 402.5230700000001, "r": 547.17889, "b": 411.73605, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "6.2.1", "bbox": {"l": 151.2002, "t": 415.00296, "r": 173.38661, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 178.93321, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": ". . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 405.71545, "t": 415.00296, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "88", "bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "6.2.2", "bbox": {"l": 151.2002, "t": 427.48285, "r": 173.32501, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 178.85622, "t": 427.48285, "r": 395.06064, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.59186, "t": 427.48285, "r": 530.57513, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "89", "bbox": {"l": 536.10632, "t": 427.48285, "r": 547.16876, "b": 436.69583, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "6.2.3", "bbox": {"l": 151.2002, "t": 440.02249, "r": 173.38657, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . .", "bbox": {"l": 178.93315, "t": 440.02249, "r": 530.5033, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "90", "bbox": {"l": 536.04987, "t": 440.02249, "r": 547.14307, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "6.3", "bbox": {"l": 136.80003, "t": 452.50238, "r": 150.64833, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18765, "t": 452.50238, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "91", "bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "6.3.1", "bbox": {"l": 151.2002, "t": 464.98227, "r": 173.57745, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "bbox": {"l": 179.17177, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "6.3.2", "bbox": {"l": 151.20016, "t": 477.52191, "r": 173.60931, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "bbox": {"l": 179.21159, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "6.3.3", "bbox": {"l": 151.20016, "t": 490.0018, "r": 173.47958, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.04944, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "96", "bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "6.4", "bbox": {"l": 136.8, "t": 502.54144, "r": 150.62956, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 156.16138, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "97", "bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "6.4.1", "bbox": {"l": 151.20016, "t": 515.02133, "r": 173.32509, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85632, "t": 515.02133, "r": 530.57709, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": "97", "bbox": {"l": 536.10834, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "6.4.2", "bbox": {"l": 151.20016, "t": 527.50122, "r": 173.44958, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01193, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "99", "bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "6.4.3", "bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 173.35367, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89204, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "100", "bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": "6.5", "bbox": {"l": 136.79997, "t": 552.52074, "r": 150.76207, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "bbox": {"l": 156.34691, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "102", "bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "6.5.1", "bbox": {"l": 151.20013, "t": 565.00061, "r": 173.42041, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "Views", "bbox": {"l": 178.97548, "t": 565.00061, "r": 205.62183, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 128, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 211.1769, "t": 565.00061, "r": 525.03827, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 129, "text": "102", "bbox": {"l": 530.59332, "t": 565.00061, "r": 547.25854, "b": 574.21361, "coord_origin": "TOPLEFT"}}, {"id": 130, "text": "6.5.2", "bbox": {"l": 151.20013, "t": 577.54025, "r": 173.51099, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 131, "text": "Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.0887, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 132, "text": "103", "bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}}, {"id": 133, "text": "6.5.3", "bbox": {"l": 151.20013, "t": 590.02013, "r": 173.41756, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 134, "text": "Query rewrite", "bbox": {"l": 178.97192, "t": 590.02013, "r": 238.92101000000002, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 135, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.47537000000003, "t": 590.02013, "r": 524.9704, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 136, "text": "105", "bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}}, {"id": 137, "text": "6.6", "bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 138, "text": "RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26613, "t": 602.5, "r": 524.92279, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 139, "text": "105", "bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}}, {"id": 140, "text": "6.7", "bbox": {"l": 136.79997, "t": 615.03964, "r": 150.70482, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 141, "text": "Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26675, "t": 615.03964, "r": 524.87512, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 142, "text": "107", "bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}}, {"id": 143, "text": "6.8", "bbox": {"l": 136.79997, "t": 627.51952, "r": 150.62793, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 144, "text": "Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.1591, "t": 627.51952, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 145, "text": "108", "bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}}, {"id": 146, "text": "6.8.1", "bbox": {"l": 151.20013, "t": 639.99939, "r": 173.48119, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 147, "text": "Check constraint solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.05145, "t": 639.99939, "r": 524.91864, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 148, "text": "108", "bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}}, {"id": 149, "text": "6.8.2", "bbox": {"l": 151.20013, "t": 652.53903, "r": 173.32486, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 150, "text": "Before trigger solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85603, "t": 652.53903, "r": 525.07208, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 151, "text": "109", "bbox": {"l": 530.60321, "t": 652.53903, "r": 547.19678, "b": 661.75203, "coord_origin": "TOPLEFT"}}, {"id": 152, "text": "6.9", "bbox": {"l": 136.79997, "t": 665.01891, "r": 150.70258, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 153, "text": "Triggers and functions (SECURED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26361, "t": 665.01891, "r": 524.87256, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 154, "text": "109", "bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}}, {"id": 155, "text": "6.9.1", "bbox": {"l": 151.20013, "t": 677.49879, "r": 173.32774, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 156, "text": "Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85965, "t": 677.49879, "r": 525.13092, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 157, "text": "109", "bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}}, {"id": 158, "text": "6.9.2", "bbox": {"l": 151.20013, "t": 690.0384300000001, "r": 173.57503, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 159, "text": "Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.16876, "t": 690.0384300000001, "r": 524.84283, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 160, "text": "110", "bbox": {"l": 530.43652, "t": 690.0384300000001, "r": 547.21771, "b": 699.251434, "coord_origin": "TOPLEFT"}}, {"id": 161, "text": "6.10", "bbox": {"l": 136.79996, "t": 702.518311, "r": 156.34335, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 162, "text": "RCAC is only one part of the solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 159.13527, "t": 702.518311, "r": 524.81567, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 163, "text": "111", "bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}}, {"id": 164, "text": "Chapter 7. Row and Column Access Control management", "bbox": {"l": 136.79996, "t": 725.017952, "r": 413.01562, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 165, "text": " . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 413.99973, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}}, {"id": 166, "text": "113", "bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl", "rhed", "lcel", "fcel", "nl"], "num_rows": 47, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 71.50867000000005, "r": 530.59589, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.13281, "t": 71.50867000000005, "r": 547.20673, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 530.52008, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.1 Business requirements for the RCAC banking scenario . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05914, "t": 83.50847999999996, "r": 547.13721, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "38", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 95.98834000000011, "r": 372.67761, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.2 Description of the users roles and responsibilities", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.21689, "t": 95.98834000000011, "r": 547.16486, "b": 105.20135000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . 39", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 108.52795000000015, "r": 530.53625, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3 Implementation of RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09039, "t": 108.52795000000015, "r": 547.19873, "b": 117.74096999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 121.00780999999995, "r": 400.57443, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.1 Reviewing the tables that are used in this example", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 406.10547, "t": 121.00780999999995, "r": 547.14697, "b": 130.22082999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . 42", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 133.48766999999998, "r": 516.9256, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 522.46039, "t": 133.48766999999998, "r": 547.36707, "b": 142.70068000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . 47", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 146.02728000000002, "r": 530.56757, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.3 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09894, "t": 146.02728000000002, "r": 547.16174, "b": 155.24030000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 158.50714000000005, "r": 411.62085, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 417.1524, "t": 158.50714000000005, "r": 547.14386, "b": 167.72015, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . 52", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 170.98699999999997, "r": 530.53705, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.5 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07599, "t": 170.98699999999997, "r": 547.15387, "b": 180.20001000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "54", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 183.52661, "r": 339.45404, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.6 Defining and creating column masks", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 344.99295, "t": 183.52661, "r": 547.16388, "b": 192.73961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 196.00647000000004, "r": 530.53931, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.7 Restricting the inserting and updating of masked data . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07812, "t": 196.00647000000004, "r": 547.15576, "b": 205.21947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "60", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 221.02594, "r": 530.48206, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.9 Reviewing row permissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.03638, "t": 221.02594, "r": 547.14502, "b": 230.23895000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "64", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 233.50580000000002, "r": 530.44922, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.10 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.01947, "t": 233.50580000000002, "r": 547.16003, "b": 242.71880999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "66", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 245.98566000000005, "r": 530.43353, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "4.3.11 Query implementation with RCAC activated . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.00372, "t": 245.98566000000005, "r": 547.1441, "b": 255.19867, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "75", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 268.48528999999996, "r": 530.53851, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 5. RCAC and non-SQL interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09161, "t": 268.48528999999996, "r": 547.19781, "b": 277.6983, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "79", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 156.18524, "t": 280.48514, "r": 547.17688, "b": 289.69812, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Unsupported interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 305.50467, "r": 530.49377, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.3 Accidental updates with masked values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.04749, "t": 305.50467, "r": 547.15491, "b": 314.71765, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "81", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 317.98456, "r": 530.56433, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4 System CL commands considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09583, "t": 317.98456, "r": 547.15894, "b": 327.19754, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 330.5242, "r": 530.4599, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.02283, "t": 330.5242, "r": 547.14868, "b": 339.73718, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20018, "t": 343.0040900000001, "r": 530.53815, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "5.4.2 Copy File (CPYF) command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Copy Library (CPYLIB) command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.07709, "t": 343.0040900000001, "r": 547.15497, "b": 352.21707, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "82", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05743, "t": 355.48398, "r": 547.18286, "b": 364.69696000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "83", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80002, "t": 377.98361, "r": 530.53851, "b": 387.19659, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 6. Additional considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 277.79886, "t": 377.98361, "r": 547.19684, "b": 399.19641, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 402.5230700000001, "r": 530.51398, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2 RCAC effects on data movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.2002, "t": 415.00296, "r": 400.16882, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.1 Effects when RCAC is defined on the source table", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.06061, "t": 415.00296, "r": 547.15381, "b": 424.21593999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "88", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.59186, "t": 427.48285, "r": 547.16876, "b": 449.23546999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 89 90", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.80003, "t": 440.02249, "r": 530.59979, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.2.3 Effects when RCAC is defined on both source and target tables . . . . . . . . . . . . . 6.3 RCAC effects on joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.1391, "t": 452.50238, "r": 547.21777, "b": 461.71536, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "91", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.2002, "t": 464.98227, "r": 547.25958, "b": 474.19525, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.1 Inner joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 477.52191, "r": 547.25958, "b": 486.73489, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.2 Outer joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 151.20016, "t": 490.0018, "r": 530.4812, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.3.3 Exception joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.05103, "t": 490.0018, "r": 547.19073, "b": 499.21478, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "96", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.8, "t": 502.54144, "r": 372.92725, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4 Monitoring, analyzing, and debugging with RCAC", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 378.45905, "t": 502.54144, "r": 530.58417, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.11597, "t": 502.54144, "r": 547.17963, "b": 511.75443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 178.85632, "t": 515.02133, "r": 547.17078, "b": 524.23431, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Query monitoring and analysis tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20016, "t": 527.50122, "r": 530.53064, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.2 Index advisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 536.09302, "t": 527.50122, "r": 547.21771, "b": 536.7142200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "99", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 540.0408600000001, "r": 525.01111, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.4.3 Metadata using catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.54944, "t": 540.0408600000001, "r": 547.16461, "b": 549.25386, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "100", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 552.52074, "r": 524.80566, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.3905, "t": 552.52074, "r": 547.14502, "b": 561.73373, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "102", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 577.54025, "r": 524.85681, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.2 Materialized query tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43451, "t": 577.54025, "r": 547.16766, "b": 586.75325, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "103", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20013, "t": 590.02013, "r": 524.9704, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.5.3 Query rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RCAC effects on performance and scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.52472, "t": 590.02013, "r": 547.18781, "b": 599.23312, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 602.5, "r": 150.70438, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.6", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.48456, "t": 602.5, "r": 547.16986, "b": 611.713, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79997, "t": 615.03964, "r": 525.047, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "6.7 Exclusive lock to implement RCAC (availability issues) . . . . . . . . . . . . . . . . . . . . . . . 6.8 Avoiding propagation of masked data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.43701, "t": 615.03964, "r": 547.12286, "b": 624.25264, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "107", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.57819, "t": 627.51952, "r": 547.17175, "b": 636.73251, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.48889, "t": 639.99939, "r": 547.19971, "b": 649.21239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "108", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.43359, "t": 665.01891, "r": 547.11676, "b": 674.23191, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.66284, "t": 677.49879, "r": 547.25854, "b": 686.71179, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 43, "end_row_offset_idx": 44, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "109", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.39954, "t": 702.518311, "r": 547.151, "b": 711.731316, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 45, "end_row_offset_idx": 46, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "111", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79996, "t": 725.017952, "r": 525.0014, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 2, "start_row_offset_idx": 46, "end_row_offset_idx": 47, "start_col_offset_idx": 0, "end_col_offset_idx": 2, "text": "Chapter 7. Row and Column Access Control management . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 530.55145, "t": 725.017952, "r": 547.20172, "b": 734.230957, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 44, "end_row_offset_idx": 45, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "113", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4805679321289, "t": 754.1161499023438, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8876830339431763, "cells": [{"id": 0, "text": "iv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iv"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.44805145263672, "t": 754.6052856445312, "r": 331.7034606933594, "b": 763.9476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.936427891254425, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 488.22, "t": 754.8673095703125, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.9201837182044983, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.8323974609375, "t": 754.848721, "r": 547.3976440429688, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8568527102470398, "cells": [{"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"2": {"label": "table", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 17, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.95959, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.18716, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.09241, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 488.22, "t": 754.8673095703125, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.9201837182044983, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8323974609375, "t": 754.848721, "r": 547.3976440429688, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8568527102470398, "cells": [{"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "v"}, {"label": "table", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 17, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.95959, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.18716, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.09241, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "table", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "table", "bbox": {"l": 135.83180236816406, "t": 70.6937026977539, "r": 547.9264526367188, "b": 309.73813, "coord_origin": "TOPLEFT"}, "confidence": 0.978112518787384, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 150.68571, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.24004, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "114", "bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 173.44891, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01112, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "114", "bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.1.2", "bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 173.41805, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97253, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "114", "bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "7.1.3", "bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 173.32086, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85107, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "114", "bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "7.1.4", "bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 173.41551, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Regenerating", "bbox": {"l": 178.96938, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 524.95703, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "114", "bbox": {"l": 530.51086, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.2", "bbox": {"l": 136.7999, "t": 134.02783, "r": 150.68552, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.23976, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "115", "bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 173.4474, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00923, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "115", "bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "7.2.2", "bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 173.38383, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92978, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "116", "bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "7.3", "bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 150.68399, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Monitoring and auditing function usage", "bbox": {"l": 156.23763, "t": 171.52715999999998, "r": 327.80109, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 333.35474, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "117", "bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Chapter 8. Designing and planning for success", "bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 363.95959, "t": 194.02679, "r": 524.98785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "119", "bbox": {"l": 530.54059, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "8.1", "bbox": {"l": 136.79988, "t": 206.02661, "r": 150.68515, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 156.23926, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": ". . . . . . . . . . . . . . . . . . .", "bbox": {"l": 422.18716, "t": 206.02661, "r": 524.93817, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "120", "bbox": {"l": 530.49231, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "8.2", "bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 150.74098, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.31741, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "120", "bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Appendix A. Database definitions for the RCAC banking example", "bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " . . . . . . . . . . . . . .", "bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 525.01611, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "121", "bbox": {"l": 530.56299, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Related publications", "bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 524.97516, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "127", "bbox": {"l": 530.5293, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Other publications", "bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Online resources", "bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Help from IBM", "bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 206.09241, "t": 300.52515, "r": 525.02136, "b": 309.73813, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "128", "bbox": {"l": 530.56793, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 17, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 524.94354, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1 Managing row permissions and column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49786, "t": 71.50903000000005, "r": 547.16083, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 83.98888999999997, "r": 524.94879, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.1 Source management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.51099, "t": 83.98888999999997, "r": 547.19763, "b": 93.20190000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 96.52850000000001, "r": 524.97968, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.2 Modifying definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.53418, "t": 96.52850000000001, "r": 547.19769, "b": 105.74152000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 109.00836000000004, "r": 525.02576, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.3 Turning on and off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.55597, "t": 109.00836000000004, "r": 547.14661, "b": 118.22136999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 121.48821999999996, "r": 238.93310999999997, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.1.4 Regenerating", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 244.48697, "t": 121.48821999999996, "r": 547.17249, "b": 130.70123, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 134.02783, "r": 524.91779, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2 Managing tables with row permissions and column masks. . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.47205, "t": 134.02783, "r": 547.13477, "b": 143.24084000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 146.50769000000003, "r": 524.93335, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.1 Save and restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.49518, "t": 146.50769000000003, "r": 547.18073, "b": 155.72069999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "115", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.20006, "t": 158.98755000000006, "r": 524.96283, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.2.2 Table migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50873, "t": 158.98755000000006, "r": 547.14661, "b": 168.20056, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "116", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 171.52715999999998, "r": 524.95526, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "7.3 Monitoring and auditing function usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.50891, "t": 171.52715999999998, "r": 547.1698, "b": 180.74017000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "117", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 194.02679, "r": 362.66785, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 8. Designing and planning for success", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 363.95959, "t": 194.02679, "r": 547.19867, "b": 203.23981000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 206.02661, "r": 416.63306, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.1 Implementing RCAC with good design and proper planning", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 422.18716, "t": 206.02661, "r": 547.1546, "b": 215.23961999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . 120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 218.50647000000004, "r": 524.86377, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "8.2 DB2 for i Center of Excellence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.44019, "t": 218.50647000000004, "r": 547.16949, "b": 227.71947999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "120", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79988, "t": 241.00609999999995, "r": 447.03098, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Appendix A. Database definitions for the RCAC banking example", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 447.35968, "t": 241.00609999999995, "r": 547.20367, "b": 250.21911999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . 121", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 263.02570000000003, "r": 234.45174999999998, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Related publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 236.15984999999998, "t": 263.02570000000003, "r": 547.19171, "b": 272.23870999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7999, "t": 275.50562, "r": 217.75055, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Other publications", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 223.33541999999997, "t": 275.50562, "r": 547.25854, "b": 284.7186, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 287.9855, "r": 212.6161, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Online resources", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 218.19348000000002, "t": 287.9855, "r": 547.25854, "b": 297.19849, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79993, "t": 300.52515, "r": 200.54581, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Help from IBM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 206.09241, "t": 300.52515, "r": 547.2077, "b": 309.73813, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 488.22, "t": 754.8673095703125, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.9201837182044983, "cells": [{"id": 0, "text": " Contents ", "bbox": {"l": 488.22, "t": 755.538002, "r": 529.11151, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8323974609375, "t": 754.848721, "r": 547.3976440429688, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8568527102470398, "cells": [{"id": 1, "text": "v", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "v"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.35196685791016, "t": 754.20947265625, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8942763209342957, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 90.52510833740234, "t": 754.4613647460938, "r": 331.7355651855469, "b": 764.1465454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9421936273574829, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35196685791016, "t": 754.20947265625, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8942763209342957, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vi"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.52510833740234, "t": 754.4613647460938, "r": 331.7355651855469, "b": 764.1465454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9421936273574829, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35196685791016, "t": 754.20947265625, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8942763209342957, "cells": [{"id": 0, "text": "vi ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 75.641998, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vi"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 90.52510833740234, "t": 754.4613647460938, "r": 331.7355651855469, "b": 764.1465454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9421936273574829, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 90.599998, "t": 755.538002, "r": 331.55881, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.6475715637207, "t": 754.7320556640625, "r": 257.24335, "b": 764.1610717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9500033855438232, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3445434570312, "t": 754.3482666015625, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9123973846435547, "cells": [{"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.94640350341797, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9534567594528198, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 63.85922622680664, "t": 131.95469665527344, "r": 413.70071, "b": 141.96286010742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9347162246704102, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 64.08584594726562, "t": 151.7967071533203, "r": 547.2356, "b": 212.513427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879042506217957, "cells": [{"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 64.23300170898438, "t": 221.91311645507812, "r": 547.29926, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9709556102752686, "cells": [{"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 64.32848358154297, "t": 251.89076232910156, "r": 489.19962, "b": 262.3831481933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9133641123771667, "cells": [{"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 63.91102600097656, "t": 271.83697509765625, "r": 547.19171, "b": 332.256591796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9860420823097229, "cells": [{"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 63.85258865356445, "t": 342.0672912597656, "r": 547.27838, "b": 381.85791, "coord_origin": "TOPLEFT"}, "confidence": 0.9850608706474304, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 64.01903533935547, "t": 391.9712219238281, "r": 539.79742, "b": 422.1513366699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852286577224731, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 64.25189208984375, "t": 432.0647888183594, "r": 547.19867, "b": 452.3858337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9783881306648254, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 64.00050354003906, "t": 462.2513732910156, "r": 544.15875, "b": 521.8851928710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882644414901733, "cells": [{"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 64.13472747802734, "t": 532.0626831054688, "r": 547.23169, "b": 572.26904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.986961841583252, "cells": [{"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 63.89973449707031, "t": 582.2474365234375, "r": 545.78656, "b": 622.1400756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.985973596572876, "cells": [{"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "section_header", "bbox": {"l": 64.30471801757812, "t": 631.6611938476562, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.879513144493103, "cells": [{"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 63.98580551147461, "t": 651.967041015625, "r": 547.24377, "b": 712.5435791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9882200956344604, "cells": [{"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.6475715637207, "t": 754.7320556640625, "r": 257.24335, "b": 764.1610717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9500033855438232, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3445434570312, "t": 754.3482666015625, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9123973846435547, "cells": [{"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vii"}, {"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.94640350341797, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9534567594528198, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.85922622680664, "t": 131.95469665527344, "r": 413.70071, "b": 141.96286010742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9347162246704102, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the U.S.A."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.08584594726562, "t": 151.7967071533203, "r": 547.2356, "b": 212.513427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879042506217957, "cells": [{"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.23300170898438, "t": 221.91311645507812, "r": 547.29926, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9709556102752686, "cells": [{"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.32848358154297, "t": 251.89076232910156, "r": 489.19962, "b": 262.3831481933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9133641123771667, "cells": [{"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.91102600097656, "t": 271.83697509765625, "r": 547.19171, "b": 332.256591796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9860420823097229, "cells": [{"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}]}, "text": "The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.85258865356445, "t": 342.0672912597656, "r": 547.27838, "b": 381.85791, "coord_origin": "TOPLEFT"}, "confidence": 0.9850608706474304, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "text", "bbox": {"l": 64.01903533935547, "t": 391.9712219238281, "r": 539.79742, "b": 422.1513366699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852286577224731, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 8, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.25189208984375, "t": 432.0647888183594, "r": 547.19867, "b": 452.3858337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9783881306648254, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 8, "cluster": {"id": 11, "label": "text", "bbox": {"l": 64.00050354003906, "t": 462.2513732910156, "r": 544.15875, "b": 521.8851928710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882644414901733, "cells": [{"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}]}, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment."}, {"label": "text", "id": 12, "page_no": 8, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.13472747802734, "t": 532.0626831054688, "r": 547.23169, "b": 572.26904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.986961841583252, "cells": [{"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 8, "cluster": {"id": 13, "label": "text", "bbox": {"l": 63.89973449707031, "t": 582.2474365234375, "r": 545.78656, "b": 622.1400756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.985973596572876, "cells": [{"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental."}, {"label": "section_header", "id": 14, "page_no": 8, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.30471801757812, "t": 631.6611938476562, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.879513144493103, "cells": [{"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 15, "page_no": 8, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.98580551147461, "t": 651.967041015625, "r": 547.24377, "b": 712.5435791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9882200956344604, "cells": [{"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs."}], "body": [{"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.94640350341797, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9534567594528198, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 63.85922622680664, "t": 131.95469665527344, "r": 413.70071, "b": 141.96286010742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9347162246704102, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the U.S.A. ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 413.70071, "b": 141.86163, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the U.S.A."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.08584594726562, "t": 151.7967071533203, "r": 547.2356, "b": 212.513427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879042506217957, "cells": [{"id": 4, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800003, "t": 152.62836000000004, "r": 540.54333, "b": 161.84136999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.799988, "t": 162.64813000000004, "r": 547.2356, "b": 171.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.799988, "t": 172.60815000000002, "r": 543.57697, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.799988, "t": 182.62793, "r": 525.50171, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.799988, "t": 192.64770999999996, "r": 528.32147, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.799988, "t": 202.60772999999995, "r": 412.72058, "b": 211.82074, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.23300170898438, "t": 221.91311645507812, "r": 547.29926, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9709556102752686, "cells": [{"id": 10, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.799988, "t": 222.64728000000002, "r": 547.29926, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.799988, "t": 232.6073, "r": 547.25757, "b": 241.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "writing, to: ", "bbox": {"l": 64.799988, "t": 242.62707999999998, "r": 113.18168000000001, "b": 251.84009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.32848358154297, "t": 251.89076232910156, "r": 489.19962, "b": 262.3831481933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9133641123771667, "cells": [{"id": 13, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A.", "bbox": {"l": 64.799988, "t": 252.64684999999997, "r": 489.19962, "b": 261.85986, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, Armonk, NY 10504-1785 U.S.A."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.91102600097656, "t": 271.83697509765625, "r": 547.19171, "b": 332.256591796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9860420823097229, "cells": [{"id": 14, "text": "The following paragraph does not apply to the United Kingdom or any other country where such ", "bbox": {"l": 64.799988, "t": 272.62658999999996, "r": 523.8205, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provisions are inconsistent with local law:", "bbox": {"l": 64.799988, "t": 282.64639, "r": 264.67526, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " INTERNATIONAL BUSINESS MACHINES CORPORATION ", "bbox": {"l": 264.77985, "t": 282.64639, "r": 533.51349, "b": 291.85938, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR ", "bbox": {"l": 64.799973, "t": 292.60638, "r": 532.43884, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, ", "bbox": {"l": 64.799973, "t": 302.62613, "r": 534.26959, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of ", "bbox": {"l": 64.799973, "t": 312.6459, "r": 547.19171, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "express or implied warranties in certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.799988, "t": 322.6059, "r": 507.27797999999996, "b": 331.81888, "coord_origin": "TOPLEFT"}}]}, "text": "The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.85258865356445, "t": 342.0672912597656, "r": 547.27838, "b": 381.85791, "coord_origin": "TOPLEFT"}, "confidence": 0.9850608706474304, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.799988, "t": 342.64542, "r": 545.95361, "b": 351.8584, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.799988, "t": 352.60541, "r": 547.27533, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.799988, "t": 362.62515, "r": 547.27838, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.799988, "t": 372.64493, "r": 131.26108, "b": 381.85791, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "text", "bbox": {"l": 64.01903533935547, "t": 391.9712219238281, "r": 539.79742, "b": 422.1513366699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852286577224731, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.799988, "t": 392.62469, "r": 539.79742, "b": 401.83768, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.799988, "t": 402.64444, "r": 525.03448, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.799988, "t": 412.60443, "r": 400.91714, "b": 421.81741, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 8, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.25189208984375, "t": 432.0647888183594, "r": 547.19867, "b": 452.3858337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9783881306648254, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring ", "bbox": {"l": 64.799988, "t": 432.64394999999996, "r": 547.19867, "b": 441.85693, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "any obligation to you.", "bbox": {"l": 64.799988, "t": 442.60393999999997, "r": 158.73772, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 8, "cluster": {"id": 11, "label": "text", "bbox": {"l": 64.00050354003906, "t": 462.2513732910156, "r": 544.15875, "b": 521.8851928710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882644414901733, "cells": [{"id": 30, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results ", "bbox": {"l": 64.799988, "t": 462.64447, "r": 538.51471, "b": 471.85745, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "obtained in other operating environments may vary significantly. Some measurements may have been made ", "bbox": {"l": 64.799988, "t": 472.60446, "r": 544.15875, "b": 481.81744, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "on development-level systems and there is no guarantee that these measurements will be the same on ", "bbox": {"l": 64.799988, "t": 482.62424, "r": 521.33148, "b": 491.83722, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "generally available systems. Furthermore, some measurements may have been estimated through ", "bbox": {"l": 64.800018, "t": 492.64401, "r": 501.98029, "b": 501.85699, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "extrapolation. Actual results may vary. Users of this document should verify the applicable data for their ", "bbox": {"l": 64.800018, "t": 502.604, "r": 521.40015, "b": 511.81699, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "specific environment.", "bbox": {"l": 64.800018, "t": 512.62375, "r": 158.48874, "b": 521.83673, "coord_origin": "TOPLEFT"}}]}, "text": "Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment."}, {"label": "text", "id": 12, "page_no": 8, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.13472747802734, "t": 532.0626831054688, "r": 547.23169, "b": 572.26904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.986961841583252, "cells": [{"id": 36, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800018, "t": 532.66425, "r": 544.53741, "b": 541.87726, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800034, "t": 542.62427, "r": 547.23169, "b": 551.83727, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800049, "t": 552.6440299999999, "r": 531.85834, "b": 561.85703, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products.", "bbox": {"l": 64.800079, "t": 562.6637900000001, "r": 455.11453, "b": 571.87679, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 8, "cluster": {"id": 13, "label": "text", "bbox": {"l": 63.89973449707031, "t": 582.2474365234375, "r": 545.78656, "b": 622.1400756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.985973596572876, "cells": [{"id": 40, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800079, "t": 582.64355, "r": 541.41901, "b": 591.85655, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800079, "t": 592.66331, "r": 545.78656, "b": 601.87631, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "All of these names are fictitious and any similarity to the names and addresses used by an actual business ", "bbox": {"l": 64.800064, "t": 602.62332, "r": 537.76855, "b": 611.83632, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "enterprise is entirely coincidental. ", "bbox": {"l": 64.800064, "t": 612.64308, "r": 215.72999999999996, "b": 621.85608, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental."}, {"label": "section_header", "id": 14, "page_no": 8, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.30471801757812, "t": 631.6611938476562, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.879513144493103, "cells": [{"id": 44, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.800064, "t": 632.62285, "r": 172.49951, "b": 641.8358499999999, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 15, "page_no": 8, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.98580551147461, "t": 651.967041015625, "r": 547.24377, "b": 712.5435791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9882200956344604, "cells": [{"id": 45, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.800064, "t": 652.66237, "r": 528.461, "b": 661.87537, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.800079, "t": 662.62236, "r": 535.69391, "b": 671.83537, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.800079, "t": 672.64212, "r": 544.75562, "b": 681.85513, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.800079, "t": 682.66188, "r": 547.24377, "b": 691.8748899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.800079, "t": 692.62188, "r": 542.89099, "b": 701.834885, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. ", "bbox": {"l": 64.800079, "t": 702.64164, "r": 423.58121, "b": 711.854645, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.6475715637207, "t": 754.7320556640625, "r": 257.24335, "b": 764.1610717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9500033855438232, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3445434570312, "t": 754.3482666015625, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9123973846435547, "cells": [{"id": 1, "text": "vii", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25024, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "vii"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85106658935547, "t": 755.861328125, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9069269299507141, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 95.8013916015625, "t": 755.7946166992188, "r": 337.03378, "b": 765.3360595703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9419320821762085, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09756469726562, "t": 70.1291275024414, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9517050385475159, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.14087677001953, "t": 102.73088073730469, "r": 547.26044, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9863917827606201, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 63.81353759765625, "t": 172.72238159179688, "r": 546.61505, "b": 192.74036, "coord_origin": "TOPLEFT"}, "confidence": 0.9608373641967773, "cells": [{"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 75.01971435546875, "t": 200.92349243164062, "r": 112.14369201660156, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8121887445449829, "cells": [{"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 75.20001220703125, "t": 211.9452667236328, "r": 100.03594970703125, "b": 221.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.7914246916770935, "cells": [{"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 75.27558898925781, "t": 223.59620666503906, "r": 107.95845794677734, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.822727382183075, "cells": [{"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 235.85794067382812, "t": 201.27745056152344, "r": 259.61248779296875, "b": 210.8429, "coord_origin": "TOPLEFT"}, "confidence": 0.837928831577301, "cells": [{"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 235.99562072753906, "t": 212.1666717529297, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8122887015342712, "cells": [{"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 236.1086883544922, "t": 223.76063537597656, "r": 283.57794189453125, "b": 232.86316, "coord_origin": "TOPLEFT"}, "confidence": 0.8228758573532104, "cells": [{"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 396.9049377441406, "t": 201.1180419921875, "r": 445.7533874511719, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7675914764404297, "cells": [{"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 397.0493469238281, "t": 212.6171417236328, "r": 464.00567626953125, "b": 222.2538604736328, "coord_origin": "TOPLEFT"}, "confidence": 0.7420825958251953, "cells": [{"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 396.6751708984375, "t": 223.71835327148438, "r": 438.42291259765625, "b": 233.55853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8272937536239624, "cells": [{"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 63.997196197509766, "t": 244.85638427734375, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}, "confidence": 0.9434750080108643, "cells": [{"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 63.95560073852539, "t": 264.8189392089844, "r": 509.53705, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9707977771759033, "cells": [{"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 64.17562103271484, "t": 294.56353759765625, "r": 464.51569, "b": 305.0062561035156, "coord_origin": "TOPLEFT"}, "confidence": 0.959129810333252, "cells": [{"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "picture", "bbox": {"l": 465.2912902832031, "t": 210.87185668945312, "r": 487.54522705078125, "b": 223.7872772216797, "coord_origin": "TOPLEFT"}, "confidence": 0.6540718078613281, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85106658935547, "t": 755.861328125, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9069269299507141, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "viii"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.8013916015625, "t": 755.7946166992188, "r": 337.03378, "b": 765.3360595703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9419320821762085, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09756469726562, "t": 70.1291275024414, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9517050385475159, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.14087677001953, "t": 102.73088073730469, "r": 547.26044, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9863917827606201, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.81353759765625, "t": 172.72238159179688, "r": 546.61505, "b": 192.74036, "coord_origin": "TOPLEFT"}, "confidence": 0.9608373641967773, "cells": [{"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both:"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.01971435546875, "t": 200.92349243164062, "r": 112.14369201660156, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8121887445449829, "cells": [{"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "AS/400fi"}, {"label": "text", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.20001220703125, "t": 211.9452667236328, "r": 100.03594970703125, "b": 221.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.7914246916770935, "cells": [{"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}]}, "text": "DB2fi"}, {"label": "text", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.27558898925781, "t": 223.59620666503906, "r": 107.95845794677734, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.822727382183075, "cells": [{"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "DRDAfi"}, {"label": "text", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "text", "bbox": {"l": 235.85794067382812, "t": 201.27745056152344, "r": 259.61248779296875, "b": 210.8429, "coord_origin": "TOPLEFT"}, "confidence": 0.837928831577301, "cells": [{"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}]}, "text": "IBMfi"}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 235.99562072753906, "t": 212.1666717529297, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8122887015342712, "cells": [{"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Power Systems\u2122"}, {"label": "text", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "text", "bbox": {"l": 236.1086883544922, "t": 223.76063537597656, "r": 283.57794189453125, "b": 232.86316, "coord_origin": "TOPLEFT"}, "confidence": 0.8228758573532104, "cells": [{"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 11, "page_no": 9, "cluster": {"id": 11, "label": "text", "bbox": {"l": 396.9049377441406, "t": 201.1180419921875, "r": 445.7533874511719, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7675914764404297, "cells": [{"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper\u2122"}, {"label": "text", "id": 12, "page_no": 9, "cluster": {"id": 12, "label": "text", "bbox": {"l": 397.0493469238281, "t": 212.6171417236328, "r": 464.00567626953125, "b": 222.2538604736328, "coord_origin": "TOPLEFT"}, "confidence": 0.7420825958251953, "cells": [{"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi System"}, {"label": "text", "id": 13, "page_no": 9, "cluster": {"id": 13, "label": "text", "bbox": {"l": 396.6751708984375, "t": 223.71835327148438, "r": 438.42291259765625, "b": 233.55853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8272937536239624, "cells": [{"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}]}, "text": "ifi"}, {"label": "text", "id": 14, "page_no": 9, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.997196197509766, "t": 244.85638427734375, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}, "confidence": 0.9434750080108643, "cells": [{"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 15, "page_no": 9, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.95560073852539, "t": 264.8189392089844, "r": 509.53705, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9707977771759033, "cells": [{"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both."}, {"label": "text", "id": 16, "page_no": 9, "cluster": {"id": 16, "label": "text", "bbox": {"l": 64.17562103271484, "t": 294.56353759765625, "r": 464.51569, "b": 305.0062561035156, "coord_origin": "TOPLEFT"}, "confidence": 0.959129810333252, "cells": [{"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}, {"label": "picture", "id": 17, "page_no": 9, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 465.2912902832031, "t": 210.87185668945312, "r": 487.54522705078125, "b": 223.7872772216797, "coord_origin": "TOPLEFT"}, "confidence": 0.6540718078613281, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09756469726562, "t": 70.1291275024414, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9517050385475159, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 154.14569, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.14087677001953, "t": 102.73088073730469, "r": 547.26044, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9863917827606201, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.26044, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation in the United States, other countries, or both. These and other IBM trademarked terms are ", "bbox": {"l": 64.800003, "t": 113.50847999999996, "r": 520.9967, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US ", "bbox": {"l": 64.800003, "t": 123.52826000000005, "r": 519.97705, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "registered or common law trademarks owned by IBM at the time this information was published. Such ", "bbox": {"l": 64.800003, "t": 133.48828000000003, "r": 515.00299, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "trademarks may also be registered or common law trademarks in other countries. A current list of IBM ", "bbox": {"l": 64.800003, "t": 143.50806, "r": 516.58441, "b": 152.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "trademarks is available on the Web at ", "bbox": {"l": 64.800003, "t": 153.52783, "r": 233.90881000000002, "b": 162.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 233.87996999999996, "t": 153.67724999999996, "r": 433.73734, "b": 162.45203000000004, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. These and other IBM trademarked terms are marked on their first occurrence in this information with the appropriate symbol (fi or \u2122), indicating US registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.81353759765625, "t": 172.72238159179688, "r": 546.61505, "b": 192.74036, "coord_origin": "TOPLEFT"}, "confidence": 0.9608373641967773, "cells": [{"id": 10, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, ", "bbox": {"l": 64.800003, "t": 173.50757, "r": 546.61505, "b": 182.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other countries, or both: ", "bbox": {"l": 64.800003, "t": 183.52733999999998, "r": 173.15189, "b": 192.74036, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both:"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.01971435546875, "t": 200.92349243164062, "r": 112.14369201660156, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8121887445449829, "cells": [{"id": 12, "text": "AS/400fi", "bbox": {"l": 75.599998, "t": 202.51801, "r": 111.6711, "b": 210.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "AS/400fi"}, {"label": "text", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.20001220703125, "t": 211.9452667236328, "r": 100.03594970703125, "b": 221.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.7914246916770935, "cells": [{"id": 13, "text": "DB2fi", "bbox": {"l": 75.599998, "t": 213.55829000000006, "r": 99.669601, "b": 221.88324, "coord_origin": "TOPLEFT"}}]}, "text": "DB2fi"}, {"label": "text", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.27558898925781, "t": 223.59620666503906, "r": 107.95845794677734, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.822727382183075, "cells": [{"id": 14, "text": "DRDAfi", "bbox": {"l": 75.599998, "t": 224.53827, "r": 107.3052, "b": 232.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "DRDAfi"}, {"label": "text", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "text", "bbox": {"l": 235.85794067382812, "t": 201.27745056152344, "r": 259.61248779296875, "b": 210.8429, "coord_origin": "TOPLEFT"}, "confidence": 0.837928831577301, "cells": [{"id": 15, "text": "IBMfi", "bbox": {"l": 236.40029999999996, "t": 202.51793999999995, "r": 259.0047, "b": 210.8429, "coord_origin": "TOPLEFT"}}]}, "text": "IBMfi"}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 235.99562072753906, "t": 212.1666717529297, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8122887015342712, "cells": [{"id": 16, "text": "Power Systems\u2122", "bbox": {"l": 236.40029999999996, "t": 213.55822999999998, "r": 307.14569, "b": 221.88318000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Power Systems\u2122"}, {"label": "text", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "text", "bbox": {"l": 236.1086883544922, "t": 223.76063537597656, "r": 283.57794189453125, "b": 232.86316, "coord_origin": "TOPLEFT"}, "confidence": 0.8228758573532104, "cells": [{"id": 17, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 224.53821000000005, "r": 283.47211, "b": 232.86316, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 11, "page_no": 9, "cluster": {"id": 11, "label": "text", "bbox": {"l": 396.9049377441406, "t": 201.1180419921875, "r": 445.7533874511719, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7675914764404297, "cells": [{"id": 18, "text": "Redpaper\u2122", "bbox": {"l": 397.20059, "t": 202.51788, "r": 445.65295, "b": 210.84283000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper\u2122"}, {"label": "text", "id": 12, "page_no": 9, "cluster": {"id": 12, "label": "text", "bbox": {"l": 397.0493469238281, "t": 212.6171417236328, "r": 464.00567626953125, "b": 222.2538604736328, "coord_origin": "TOPLEFT"}, "confidence": 0.7420825958251953, "cells": [{"id": 19, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 213.55817000000002, "r": 455.12460000000004, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o)", "bbox": {"l": 450.46969999999993, "t": 213.55817000000002, "r": 455.17949999999996, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "fi System", "bbox": {"l": 427.21201, "t": 213.55817000000002, "r": 448.99689, "b": 221.88311999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi System"}, {"label": "text", "id": 13, "page_no": 9, "cluster": {"id": 13, "label": "text", "bbox": {"l": 396.6751708984375, "t": 223.71835327148438, "r": 438.42291259765625, "b": 233.55853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8272937536239624, "cells": [{"id": 22, "text": " ifi", "bbox": {"l": 427.15442, "t": 224.53814999999997, "r": 438.3072199999999, "b": 232.86310000000003, "coord_origin": "TOPLEFT"}}]}, "text": "ifi"}, {"label": "text", "id": 14, "page_no": 9, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.997196197509766, "t": 244.85638427734375, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}, "confidence": 0.9434750080108643, "cells": [{"id": 23, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 245.50867000000005, "r": 311.90067, "b": 254.72168, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 15, "page_no": 9, "cluster": {"id": 15, "label": "text", "bbox": {"l": 63.95560073852539, "t": 264.8189392089844, "r": 509.53705, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9707977771759033, "cells": [{"id": 24, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other ", "bbox": {"l": 64.800003, "t": 265.48839999999996, "r": 509.53705, "b": 274.70142, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "countries, or both.", "bbox": {"l": 64.800003, "t": 275.50818000000004, "r": 144.77483, "b": 284.7211899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both."}, {"label": "text", "id": 16, "page_no": 9, "cluster": {"id": 16, "label": "text", "bbox": {"l": 64.17562103271484, "t": 294.56353759765625, "r": 464.51569, "b": 305.0062561035156, "coord_origin": "TOPLEFT"}, "confidence": 0.959129810333252, "cells": [{"id": 26, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 295.48798, "r": 464.51569, "b": 304.70096, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}, {"label": "picture", "id": 17, "page_no": 9, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 465.2912902832031, "t": 210.87185668945312, "r": 487.54522705078125, "b": 223.7872772216797, "coord_origin": "TOPLEFT"}, "confidence": 0.6540718078613281, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85106658935547, "t": 755.861328125, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9069269299507141, "cells": [{"id": 0, "text": "viii ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 81.162003, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "viii"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.8013916015625, "t": 755.7946166992188, "r": 337.03378, "b": 765.3360595703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9419320821762085, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 756.557999, "r": 337.03378, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 10, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 10, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 10, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 10, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 10, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 10, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 10, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 10, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 10, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 10, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 10, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 10, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 10, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 10, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 10, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 10, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 10, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 10, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 10, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 10, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 10, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 10, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 93.23255920410156, "t": 288.25800000000004, "r": 282.49176, "b": 353.5527038574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9835546612739563, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 333.32159423828125, "t": 363.5240173339844, "r": 375.9523010253906, "b": 370.23272705078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7944505214691162, "cells": [{"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 309.5291748046875, "t": 208.71022033691406, "r": 409.85666, "b": 215.99896240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8416581153869629, "cells": [{"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 309.4497985839844, "t": 223.8454132080078, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.6710495352745056, "cells": [{"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 309.4351501464844, "t": 254.4227752685547, "r": 420.78116, "b": 269.1181, "coord_origin": "TOPLEFT"}, "confidence": 0.7655534744262695, "cells": [{"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 309.1927795410156, "t": 275.1529541015625, "r": 505.15802, "b": 320.81719970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9793416857719421, "cells": [{"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 309.322998046875, "t": 327.22723388671875, "r": 500.27194000000003, "b": 341.859130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9277064204216003, "cells": [{"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 309.2567138671875, "t": 347.97686767578125, "r": 494.2681884765625, "b": 355.2289733886719, "coord_origin": "TOPLEFT"}, "confidence": 0.9116950035095215, "cells": [{"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 446.00567626953125, "t": 666.8178100585938, "r": 504.98651123046875, "b": 673.75719, "coord_origin": "TOPLEFT"}, "confidence": 0.7542392015457153, "cells": [{"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 93.356689453125, "t": 158.2716064453125, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.9251776337623596, "cells": [{"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 93.58877563476562, "t": 170.04763793945312, "r": 283.61542, "b": 177.87142944335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9153581857681274, "cells": [{"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 93.6685562133789, "t": 189.83038330078125, "r": 243.1177520751953, "b": 198.0092010498047, "coord_origin": "TOPLEFT"}, "confidence": 0.9365891814231873, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 93.72789001464844, "t": 199.86427307128906, "r": 282.72513, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9610549211502075, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 93.56942749023438, "t": 220.2848358154297, "r": 274.40585, "b": 248.44556, "coord_origin": "TOPLEFT"}, "confidence": 0.9730463027954102, "cells": [{"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 93.60421752929688, "t": 250.44761657714844, "r": 285.81323, "b": 269.4346618652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9686199426651001, "cells": [{"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 93.41441345214844, "t": 282.9095458984375, "r": 179.16822814941406, "b": 292.61377, "coord_origin": "TOPLEFT"}, "confidence": 0.9390802979469299, "cells": [{"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 93.40412902832031, "t": 365.70770263671875, "r": 192.24819946289062, "b": 375.04626, "coord_origin": "TOPLEFT"}, "confidence": 0.9252138733863831, "cells": [{"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 93.551025390625, "t": 376.95263671875, "r": 274.90921, "b": 405.5931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9603047966957092, "cells": [{"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 93.61650085449219, "t": 417.3977966308594, "r": 216.61273193359375, "b": 424.85425, "coord_origin": "TOPLEFT"}, "confidence": 0.8876497745513916, "cells": [{"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "picture", "bbox": {"l": 309.1715087890625, "t": 157.70965576171875, "r": 372.07818603515625, "b": 183.2933349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477246999740601, "cells": []}, {"id": 20, "label": "picture", "bbox": {"l": 309.91729736328125, "t": 357.83355712890625, "r": 327.7751159667969, "b": 376.003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.907178521156311, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "text", "bbox": {"l": 93.23255920410156, "t": 288.25800000000004, "r": 282.49176, "b": 353.5527038574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9835546612739563, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}]}, "text": "T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes."}, {"label": "text", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "text", "bbox": {"l": 333.32159423828125, "t": 363.5240173339844, "r": 375.9523010253906, "b": 370.23272705078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7944505214691162, "cells": [{"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}]}, "text": "Please Recycle"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 309.5291748046875, "t": 208.71022033691406, "r": 409.85666, "b": 215.99896240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8416581153869629, "cells": [{"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}]}, "text": "\u00a9 Copyright IBM Corporation 2013"}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 309.4497985839844, "t": 223.8454132080078, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.6710495352745056, "cells": [{"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation Route 100 Somers, NY 10589"}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 309.4351501464844, "t": 254.4227752685547, "r": 420.78116, "b": 269.1181, "coord_origin": "TOPLEFT"}, "confidence": 0.7655534744262695, "cells": [{"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}]}, "text": "Produced in the United States of America March 2013"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 309.1927795410156, "t": 275.1529541015625, "r": 505.15802, "b": 320.81719970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9793416857719421, "cells": [{"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at www.ibm.com/legal/ copytrade.shtml ."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 309.322998046875, "t": 327.22723388671875, "r": 500.27194000000003, "b": 341.859130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9277064204216003, "cells": [{"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}]}, "text": "This document is current as of the initial date of publication and may be changed by IBM at any time."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 309.2567138671875, "t": 347.97686767578125, "r": 494.2681884765625, "b": 355.2289733886719, "coord_origin": "TOPLEFT"}, "confidence": 0.9116950035095215, "cells": [{"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}]}, "text": "Not all offerings are available in every country in which IBM operates."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 446.00567626953125, "t": 666.8178100585938, "r": 504.98651123046875, "b": 673.75719, "coord_origin": "TOPLEFT"}, "confidence": 0.7542392015457153, "cells": [{"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}]}, "text": "QLS12392-USEN-00"}, {"label": "section_header", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 93.356689453125, "t": 158.2716064453125, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.9251776337623596, "cells": [{"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}]}, "text": "What you can expect"}, {"label": "text", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "text", "bbox": {"l": 93.58877563476562, "t": 170.04763793945312, "r": 283.61542, "b": 177.87142944335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9153581857681274, "cells": [{"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Depending on the engagement, our team of consultants offer:"}, {"label": "list_item", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 93.6685562133789, "t": 189.83038330078125, "r": 243.1177520751953, "b": 198.0092010498047, "coord_origin": "TOPLEFT"}, "confidence": 0.9365891814231873, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}]}, "text": "r Briefings, consulting and guidance on demand"}, {"label": "list_item", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 93.72789001464844, "t": 199.86427307128906, "r": 282.72513, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9610549211502075, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}]}, "text": "r Illumination of the DB2 for i capabilities and leadership to exploit them"}, {"label": "list_item", "id": 13, "page_no": 11, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 93.56942749023438, "t": 220.2848358154297, "r": 274.40585, "b": 248.44556, "coord_origin": "TOPLEFT"}, "confidence": 0.9730463027954102, "cells": [{"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}]}, "text": "r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation"}, {"label": "list_item", "id": 14, "page_no": 11, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 93.60421752929688, "t": 250.44761657714844, "r": 285.81323, "b": 269.4346618652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9686199426651001, "cells": [{"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}]}, "text": "r Configuration of systems, operating system and products to fully leverage database capabilities"}, {"label": "section_header", "id": 15, "page_no": 11, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 93.41441345214844, "t": 282.9095458984375, "r": 179.16822814941406, "b": 292.61377, "coord_origin": "TOPLEFT"}, "confidence": 0.9390802979469299, "cells": [{"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}]}, "text": "Key client benefits"}, {"label": "section_header", "id": 16, "page_no": 11, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 93.40412902832031, "t": 365.70770263671875, "r": 192.24819946289062, "b": 375.04626, "coord_origin": "TOPLEFT"}, "confidence": 0.9252138733863831, "cells": [{"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}]}, "text": "For more information"}, {"label": "text", "id": 17, "page_no": 11, "cluster": {"id": 17, "label": "text", "bbox": {"l": 93.551025390625, "t": 376.95263671875, "r": 274.90921, "b": 405.5931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9603047966957092, "cells": [{"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}]}, "text": "Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit:"}, {"label": "text", "id": 18, "page_no": 11, "cluster": {"id": 18, "label": "text", "bbox": {"l": 93.61650085449219, "t": 417.3977966308594, "r": 216.61273193359375, "b": 424.85425, "coord_origin": "TOPLEFT"}, "confidence": 0.8876497745513916, "cells": [{"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 19, "page_no": 11, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 309.1715087890625, "t": 157.70965576171875, "r": 372.07818603515625, "b": 183.2933349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477246999740601, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 20, "page_no": 11, "cluster": {"id": 20, "label": "picture", "bbox": {"l": 309.91729736328125, "t": 357.83355712890625, "r": 327.7751159667969, "b": 376.003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.907178521156311, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "text", "bbox": {"l": 93.23255920410156, "t": 288.25800000000004, "r": 282.49176, "b": 353.5527038574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9835546612739563, "cells": [{"id": 0, "text": "T", "bbox": {"l": 215.64, "t": 288.25800000000004, "r": 221.13898999999998, "b": 296.58301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Gain greater database and application performance within ", "bbox": {"l": 94.132698, "t": 295.09406, "r": 278.48099, "b": 302.49805, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "your current environment. Achieve greater productivity in ", "bbox": {"l": 94.132698, "t": 305.27362, "r": 278.63724, "b": 312.67761, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the development and maintenance of database and ", "bbox": {"l": 94.132698, "t": 315.45319, "r": 254.08875, "b": 322.85718, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "applications using modern techniques. Architect and design ", "bbox": {"l": 94.132698, "t": 325.63275, "r": 282.49176, "b": 333.03674, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "data structures to accommodate and benefit from business ", "bbox": {"l": 94.132698, "t": 335.81232, "r": 278.16846, "b": 343.2163100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analytics (BA) tools and processes.", "bbox": {"l": 94.132698, "t": 345.99188, "r": 201.30829, "b": 353.39587, "coord_origin": "TOPLEFT"}}]}, "text": "T Gain greater database and application performance within your current environment. Achieve greater productivity in the development and maintenance of database and applications using modern techniques. Architect and design data structures to accommodate and benefit from business analytics (BA) tools and processes."}, {"label": "text", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "text", "bbox": {"l": 333.32159423828125, "t": 363.5240173339844, "r": 375.9523010253906, "b": 370.23272705078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7944505214691162, "cells": [{"id": 1, "text": "Please Recycle", "bbox": {"l": 334.10629, "t": 364.33957, "r": 375.92691, "b": 369.9791599999999, "coord_origin": "TOPLEFT"}}]}, "text": "Please Recycle"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 309.5291748046875, "t": 208.71022033691406, "r": 409.85666, "b": 215.99896240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8416581153869629, "cells": [{"id": 2, "text": "\u00a9 Copyright IBM Corporation 2013 ", "bbox": {"l": 309.84811, "t": 209.41382, "r": 409.85666, "b": 215.64868, "coord_origin": "TOPLEFT"}}]}, "text": "\u00a9 Copyright IBM Corporation 2013"}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 309.4497985839844, "t": 223.8454132080078, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.6710495352745056, "cells": [{"id": 3, "text": "IBM Corporation ", "bbox": {"l": 309.84811, "t": 224.69079999999997, "r": 358.21817, "b": 230.92566, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Route 100 ", "bbox": {"l": 309.84811, "t": 232.32928000000004, "r": 338.69644, "b": 238.56415000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Somers, NY 10589 ", "bbox": {"l": 309.84811, "t": 239.96776999999997, "r": 361.2178, "b": 246.20263999999997, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation Route 100 Somers, NY 10589"}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 309.4351501464844, "t": 254.4227752685547, "r": 420.78116, "b": 269.1181, "coord_origin": "TOPLEFT"}, "confidence": 0.7655534744262695, "cells": [{"id": 6, "text": "Produced in the United States of America ", "bbox": {"l": 309.84811, "t": 255.24474999999995, "r": 420.78116, "b": 261.47961, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "March 2013", "bbox": {"l": 309.84811, "t": 262.88324, "r": 341.69293, "b": 269.1181, "coord_origin": "TOPLEFT"}}]}, "text": "Produced in the United States of America March 2013"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 309.1927795410156, "t": 275.1529541015625, "r": 505.15802, "b": 320.81719970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9793416857719421, "cells": [{"id": 8, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of ", "bbox": {"l": 309.84811, "t": 276.16132000000005, "r": 503.2311700000001, "b": 282.39615, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "International Business Machines Corp., registered in many jurisdictions ", "bbox": {"l": 309.84811, "t": 283.79977, "r": 498.7258, "b": 290.03464, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "worldwide. Other product and service names might be trademarks of IBM ", "bbox": {"l": 309.84811, "t": 291.43825999999996, "r": 505.15802, "b": 297.67313, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "or other companies. A current list of IBM trademarks is available on the ", "bbox": {"l": 309.84811, "t": 299.07675, "r": 498.79224, "b": 305.31161, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "web at \u201cCopyright and trademark information\u201d at ", "bbox": {"l": 309.84811, "t": 306.71524, "r": 441.21148999999997, "b": 312.9501, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "www.ibm.com/legal/", "bbox": {"l": 441.18231, "t": 306.716, "r": 495.3586399999999, "b": 312.95087, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "copytrade.shtml", "bbox": {"l": 309.84903, "t": 314.35449, "r": 351.96103, "b": 320.58936000000006, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 351.95099, "t": 314.35452, "r": 353.57394, "b": 320.58939, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, ibm.com, DB2 and Power Systems are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at www.ibm.com/legal/ copytrade.shtml ."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 309.322998046875, "t": 327.22723388671875, "r": 500.27194000000003, "b": 341.859130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9277064204216003, "cells": [{"id": 16, "text": "This document is current as of the initial date of publication and may be ", "bbox": {"l": 309.84839, "t": 327.6326, "r": 500.27194000000003, "b": 333.86746, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "changed by IBM at any time.", "bbox": {"l": 309.84839, "t": 335.27109, "r": 385.69885, "b": 341.5059499999999, "coord_origin": "TOPLEFT"}}]}, "text": "This document is current as of the initial date of publication and may be changed by IBM at any time."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 309.2567138671875, "t": 347.97686767578125, "r": 494.2681884765625, "b": 355.2289733886719, "coord_origin": "TOPLEFT"}, "confidence": 0.9116950035095215, "cells": [{"id": 18, "text": "Not all offerings are available in every country in which IBM operates.", "bbox": {"l": 309.84839, "t": 348.54916, "r": 494.23822, "b": 354.78403, "coord_origin": "TOPLEFT"}}]}, "text": "Not all offerings are available in every country in which IBM operates."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 446.00567626953125, "t": 666.8178100585938, "r": 504.98651123046875, "b": 673.75719, "coord_origin": "TOPLEFT"}, "confidence": 0.7542392015457153, "cells": [{"id": 19, "text": "QLS12392-USEN-00", "bbox": {"l": 446.87051, "t": 667.52232, "r": 504.82294, "b": 673.75719, "coord_origin": "TOPLEFT"}}]}, "text": "QLS12392-USEN-00"}, {"label": "section_header", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 93.356689453125, "t": 158.2716064453125, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.9251776337623596, "cells": [{"id": 20, "text": "What you can expect", "bbox": {"l": 94.132698, "t": 158.87023999999997, "r": 193.95432, "b": 167.88428, "coord_origin": "TOPLEFT"}}]}, "text": "What you can expect"}, {"label": "text", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "text", "bbox": {"l": 93.58877563476562, "t": 170.04763793945312, "r": 283.61542, "b": 177.87142944335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9153581857681274, "cells": [{"id": 21, "text": "Depending on the engagement, our team of consultants offer:", "bbox": {"l": 94.132698, "t": 170.36443999999995, "r": 283.61542, "b": 177.76842999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Depending on the engagement, our team of consultants offer:"}, {"label": "list_item", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 93.6685562133789, "t": 189.83038330078125, "r": 243.1177520751953, "b": 198.0092010498047, "coord_origin": "TOPLEFT"}, "confidence": 0.9365891814231873, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 94.132698, "t": 191.96851000000004, "r": 97.991905, "b": 197.17693999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Briefings, consulting and guidance on demand", "bbox": {"l": 101.1822, "t": 190.13440000000003, "r": 243.08588, "b": 197.53839000000005, "coord_origin": "TOPLEFT"}}]}, "text": "r Briefings, consulting and guidance on demand"}, {"label": "list_item", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 93.72789001464844, "t": 199.86427307128906, "r": 282.72513, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9610549211502075, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 94.132698, "t": 202.15125, "r": 97.991905, "b": 207.35968000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Illumination of the DB2 for i capabilities and leadership to ", "bbox": {"l": 101.1822, "t": 200.31714, "r": 282.72513, "b": 207.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "exploit them", "bbox": {"l": 101.1822, "t": 210.49670000000003, "r": 139.83179, "b": 217.90070000000003, "coord_origin": "TOPLEFT"}}]}, "text": "r Illumination of the DB2 for i capabilities and leadership to exploit them"}, {"label": "list_item", "id": 13, "page_no": 11, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 93.56942749023438, "t": 220.2848358154297, "r": 274.40585, "b": 248.44556, "coord_origin": "TOPLEFT"}, "confidence": 0.9730463027954102, "cells": [{"id": 27, "text": "r ", "bbox": {"l": 94.132698, "t": 222.51653999999996, "r": 97.991905, "b": 227.72497999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Analysis and remediation of performance and scalability ", "bbox": {"l": 101.1822, "t": 220.68242999999995, "r": 274.40585, "b": 228.08642999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "issues caused by inefficient database design and ", "bbox": {"l": 101.1822, "t": 230.86199999999997, "r": 247.29761000000002, "b": 238.26599, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "implementation", "bbox": {"l": 101.1822, "t": 241.04156, "r": 150.16017, "b": 248.44556, "coord_origin": "TOPLEFT"}}]}, "text": "r Analysis and remediation of performance and scalability issues caused by inefficient database design and implementation"}, {"label": "list_item", "id": 14, "page_no": 11, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 93.60421752929688, "t": 250.44761657714844, "r": 285.81323, "b": 269.4346618652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9686199426651001, "cells": [{"id": 31, "text": "r ", "bbox": {"l": 94.132698, "t": 253.06444999999997, "r": 97.991905, "b": 258.27288999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Configuration of systems, operating system and products to ", "bbox": {"l": 101.1822, "t": 251.23035000000004, "r": 285.81323, "b": 258.63433999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "fully leverage database capabilities", "bbox": {"l": 101.1822, "t": 261.40990999999997, "r": 205.6864, "b": 268.8139, "coord_origin": "TOPLEFT"}}]}, "text": "r Configuration of systems, operating system and products to fully leverage database capabilities"}, {"label": "section_header", "id": 15, "page_no": 11, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 93.41441345214844, "t": 282.9095458984375, "r": 179.16822814941406, "b": 292.61377, "coord_origin": "TOPLEFT"}, "confidence": 0.9390802979469299, "cells": [{"id": 34, "text": "Key client benefits", "bbox": {"l": 94.132698, "t": 283.59973, "r": 179.10327, "b": 292.61377, "coord_origin": "TOPLEFT"}}]}, "text": "Key client benefits"}, {"label": "section_header", "id": 16, "page_no": 11, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 93.40412902832031, "t": 365.70770263671875, "r": 192.24819946289062, "b": 375.04626, "coord_origin": "TOPLEFT"}, "confidence": 0.9252138733863831, "cells": [{"id": 41, "text": "For more information", "bbox": {"l": 94.132698, "t": 366.03223, "r": 192.12144, "b": 375.04626, "coord_origin": "TOPLEFT"}}]}, "text": "For more information"}, {"label": "text", "id": 17, "page_no": 11, "cluster": {"id": 17, "label": "text", "bbox": {"l": 93.551025390625, "t": 376.95263671875, "r": 274.90921, "b": 405.5931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9603047966957092, "cells": [{"id": 42, "text": "Pricing depends on the scope of work. Learn more about ", "bbox": {"l": 94.132698, "t": 377.52646, "r": 274.90921, "b": 384.93045, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "the DB2 for i Center of Excellence and other related ", "bbox": {"l": 94.132698, "t": 387.70602, "r": 261.67877, "b": 395.11002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "products and services. Contact ", "bbox": {"l": 94.132698, "t": 397.88559, "r": 191.79845, "b": 405.28958, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "stgls@us.ibm.com", "bbox": {"l": 191.79829, "t": 397.88544, "r": 248.03143000000003, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " or visit:", "bbox": {"l": 248.03080999999997, "t": 397.88544, "r": 273.51691, "b": 405.2894299999999, "coord_origin": "TOPLEFT"}}]}, "text": "Pricing depends on the scope of work. Learn more about the DB2 for i Center of Excellence and other related products and services. Contact stgls@us.ibm.com or visit:"}, {"label": "text", "id": 18, "page_no": 11, "cluster": {"id": 18, "label": "text", "bbox": {"l": 93.61650085449219, "t": 417.3977966308594, "r": 216.61273193359375, "b": 424.85425, "coord_origin": "TOPLEFT"}, "confidence": 0.8876497745513916, "cells": [{"id": 47, "text": "ibm.com", "bbox": {"l": 94.132698, "t": 418.29114, "r": 123.09909000000002, "b": 424.70621, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 123.09909000000002, "t": 418.50967, "r": 216.45563, "b": 424.85425, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 19, "page_no": 11, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 309.1715087890625, "t": 157.70965576171875, "r": 372.07818603515625, "b": 183.2933349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477246999740601, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 20, "page_no": 11, "cluster": {"id": 20, "label": "picture", "bbox": {"l": 309.91729736328125, "t": 357.83355712890625, "r": 327.7751159667969, "b": 376.003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.907178521156311, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.18641662597656, "t": 754.4242553710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.91111159324646, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32842254638672, "t": 754.7139282226562, "r": 334.42142, "b": 763.9345703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9425985813140869, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 262.9671630859375, "t": 76.57386779785156, "r": 541.20526, "b": 135.15176391601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9491702318191528, "cells": [{"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 262.94354248046875, "t": 191.9833984375, "r": 541.17163, "b": 334.21887, "coord_origin": "TOPLEFT"}, "confidence": 0.9866385459899902, "cells": [{"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 262.7120666503906, "t": 344.05780029296875, "r": 541.32196, "b": 450.19717, "coord_origin": "TOPLEFT"}, "confidence": 0.9859716296195984, "cells": [{"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 262.76617431640625, "t": 462.0334167480469, "r": 541.24127, "b": 604.21465, "coord_origin": "TOPLEFT"}, "confidence": 0.9878524541854858, "cells": [{"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 262.9361877441406, "t": 614.0336303710938, "r": 541.1944, "b": 708.252808, "coord_origin": "TOPLEFT"}, "confidence": 0.9843889474868774, "cells": [{"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 141.68251037597656, "t": 77.3314437866211, "r": 249.5221405029297, "b": 183.49258422851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875855445861816, "cells": []}, {"id": 8, "label": "picture", "bbox": {"l": 141.71910095214844, "t": 192.56460571289062, "r": 251.5185546875, "b": 319.4869079589844, "coord_origin": "TOPLEFT"}, "confidence": 0.9871560335159302, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 141.89089965820312, "t": 344.6142883300781, "r": 251.38380432128906, "b": 454.1204833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9869871139526367, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 141.69131469726562, "t": 614.610107421875, "r": 250.86129760742188, "b": 724.1473999023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9869828224182129, "cells": []}, {"id": 11, "label": "picture", "bbox": {"l": 141.57579040527344, "t": 462.79840087890625, "r": 249.41360473632812, "b": 568.6048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861478805541992, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.18641662597656, "t": 754.4242553710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.91111159324646, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xii"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32842254638672, "t": 754.7139282226562, "r": 334.42142, "b": 763.9345703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9425985813140869, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 262.9671630859375, "t": 76.57386779785156, "r": 541.20526, "b": 135.15176391601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9491702318191528, "cells": [{"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 262.94354248046875, "t": 191.9833984375, "r": 541.17163, "b": 334.21887, "coord_origin": "TOPLEFT"}, "confidence": 0.9866385459899902, "cells": [{"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}]}, "text": "Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 262.7120666503906, "t": 344.05780029296875, "r": 541.32196, "b": 450.19717, "coord_origin": "TOPLEFT"}, "confidence": 0.9859716296195984, "cells": [{"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}]}, "text": "Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services."}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 262.76617431640625, "t": 462.0334167480469, "r": 541.24127, "b": 604.21465, "coord_origin": "TOPLEFT"}, "confidence": 0.9878524541854858, "cells": [{"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead \u201cJDE on i\u201d analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i."}, {"label": "text", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "text", "bbox": {"l": 262.9361877441406, "t": 614.0336303710938, "r": 541.1944, "b": 708.252808, "coord_origin": "TOPLEFT"}, "confidence": 0.9843889474868774, "cells": [{"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}]}, "text": "Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems\u2122 Lab Services organization. Doug\u2019s 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings."}, {"label": "picture", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 141.68251037597656, "t": 77.3314437866211, "r": 249.5221405029297, "b": 183.49258422851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875855445861816, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 141.71910095214844, "t": 192.56460571289062, "r": 251.5185546875, "b": 319.4869079589844, "coord_origin": "TOPLEFT"}, "confidence": 0.9871560335159302, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 141.89089965820312, "t": 344.6142883300781, "r": 251.38380432128906, "b": 454.1204833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9869871139526367, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 141.69131469726562, "t": 614.610107421875, "r": 250.86129760742188, "b": 724.1473999023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9869828224182129, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 141.57579040527344, "t": 462.79840087890625, "r": 249.41360473632812, "b": 568.6048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861478805541992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 262.9671630859375, "t": 76.57386779785156, "r": 541.20526, "b": 135.15176391601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9491702318191528, "cells": [{"id": 2, "text": "Rob Bestgen ", "bbox": {"l": 263.39999, "t": 77.50867000000005, "r": 327.9169, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "is a member of the DB2 for i Center of ", "bbox": {"l": 327.89996, "t": 77.50867000000005, "r": 498.72397, "b": 86.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Excellence team helping customers use the capabilities of DB2 ", "bbox": {"l": 263.39999, "t": 89.50847999999996, "r": 541.20526, "b": 98.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "for i. In addition, Rob is the chief architect of the DB2 SQL ", "bbox": {"l": 263.40002, "t": 101.50829999999996, "r": 521.90179, "b": 110.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Query Engine (SQE) for DB2 for i and is the product ", "bbox": {"l": 263.40002, "t": 113.50811999999996, "r": 495.96112, "b": 122.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "development manager for DB2 Web Query for i. ", "bbox": {"l": 263.40002, "t": 125.50792999999999, "r": 476.70428, "b": 134.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Rob Bestgen is a member of the DB2 for i Center of Excellence team helping customers use the capabilities of DB2 for i. In addition, Rob is the chief architect of the DB2 SQL Query Engine (SQE) for DB2 for i and is the product development manager for DB2 Web Query for i."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 262.94354248046875, "t": 191.9833984375, "r": 541.17163, "b": 334.21887, "coord_origin": "TOPLEFT"}, "confidence": 0.9866385459899902, "cells": [{"id": 8, "text": "Mike Cain ", "bbox": {"l": 263.40002, "t": 193.00787000000003, "r": 312.89825, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Senior Technical Staff Member within the IBM ", "bbox": {"l": 312.84045, "t": 193.00787000000003, "r": 535.45636, "b": 202.22089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Systems and Technology Group. He is also the founder and ", "bbox": {"l": 263.40002, "t": 205.00769000000003, "r": 529.36505, "b": 214.22069999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "team leader of the DB2 for i Center of Excellence in Rochester, ", "bbox": {"l": 263.40002, "t": 217.00751000000002, "r": 541.17163, "b": 226.22051999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Minnesota US. Before his current position, he worked as an ", "bbox": {"l": 263.40002, "t": 229.00732000000005, "r": 528.82898, "b": 238.22033999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM AS/400 Systems Engineer and technical consultant. ", "bbox": {"l": 263.40002, "t": 241.00714000000005, "r": 516.10809, "b": 250.22015, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before joining IBM in 1988, Mike worked as a System/38 ", "bbox": {"l": 263.40002, "t": 253.00696000000005, "r": 516.11694, "b": 262.21997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "programmer and data processing manager for a property and ", "bbox": {"l": 263.40002, "t": 265.00676999999996, "r": 537.08087, "b": 274.21979, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "casualty insurance company. Mike has 26 years of experience ", "bbox": {"l": 263.40002, "t": 277.00658999999996, "r": 539.87268, "b": 286.2196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "with IBM, engaging clients and Business Partners around the ", "bbox": {"l": 263.40002, "t": 289.00644000000005, "r": 536.25336, "b": 298.21942, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "world. In addition to assisting clients, he uses his knowledge ", "bbox": {"l": 263.40002, "t": 301.00626, "r": 532.00836, "b": 310.21924, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and experience to influence the IBM solution, development, ", "bbox": {"l": 263.40002, "t": 313.00607, "r": 527.71844, "b": 322.21906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "and support processes.", "bbox": {"l": 263.40002, "t": 325.00589, "r": 367.55078, "b": 334.21887, "coord_origin": "TOPLEFT"}}]}, "text": "Mike Cain is a Senior Technical Staff Member within the IBM Systems and Technology Group. He is also the founder and team leader of the DB2 for i Center of Excellence in Rochester, Minnesota US. Before his current position, he worked as an IBM AS/400 Systems Engineer and technical consultant. Before joining IBM in 1988, Mike worked as a System/38 programmer and data processing manager for a property and casualty insurance company. Mike has 26 years of experience with IBM, engaging clients and Business Partners around the world. In addition to assisting clients, he uses his knowledge and experience to influence the IBM solution, development, and support processes."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 262.7120666503906, "t": 344.05780029296875, "r": 541.32196, "b": 450.19717, "coord_origin": "TOPLEFT"}, "confidence": 0.9859716296195984, "cells": [{"id": 21, "text": "Dan Cruikshank ", "bbox": {"l": 263.40002, "t": 344.98566, "r": 342.26331, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "has been an IT Professional since 1972. He ", "bbox": {"l": 342.24039, "t": 344.98566, "r": 538.6994, "b": 354.19864, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "has consulted on a number of different project areas since ", "bbox": {"l": 263.40002, "t": 356.98546999999996, "r": 522.98248, "b": 366.19845999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "joining IBM Rochester in 1988. Since 1993, Dan was focused ", "bbox": {"l": 263.40002, "t": 368.9852900000001, "r": 536.84882, "b": 378.19827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "primarily on resolving IBM System ifi application and database ", "bbox": {"l": 263.40002, "t": 380.98511, "r": 541.32196, "b": 390.19809, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "performance issues at several IBM customer accounts. Since ", "bbox": {"l": 263.40002, "t": 392.98491999999993, "r": 536.4115, "b": 402.1979099999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "1998, Dan has been one of the primary instructors for the ", "bbox": {"l": 263.40002, "t": 404.98474000000004, "r": 519.79437, "b": 414.19772, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Database Optimization Workshop. Most recently, Dan is a ", "bbox": {"l": 263.40002, "t": 416.98456, "r": 520.69763, "b": 426.19754, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "member of the DB2 for i Center of Excellence team with IBM ", "bbox": {"l": 263.40002, "t": 428.98438, "r": 532.99817, "b": 438.19736, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Rochester Lab Services. ", "bbox": {"l": 263.40002, "t": 440.98419, "r": 375.21091, "b": 450.19717, "coord_origin": "TOPLEFT"}}]}, "text": "Dan Cruikshank has been an IT Professional since 1972. He has consulted on a number of different project areas since joining IBM Rochester in 1988. Since 1993, Dan was focused primarily on resolving IBM System ifi application and database performance issues at several IBM customer accounts. Since 1998, Dan has been one of the primary instructors for the Database Optimization Workshop. Most recently, Dan is a member of the DB2 for i Center of Excellence team with IBM Rochester Lab Services."}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 262.76617431640625, "t": 462.0334167480469, "r": 541.24127, "b": 604.21465, "coord_origin": "TOPLEFT"}, "confidence": 0.9878524541854858, "cells": [{"id": 31, "text": "Jim Denton ", "bbox": {"l": 263.40002, "t": 463.00375, "r": 320.5993, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is a senior consultant at the IBM DB2 for i Center ", "bbox": {"l": 320.58038, "t": 463.00375, "r": 539.80682, "b": 472.21674, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "of Excellence, where his responsibilities include both teaching ", "bbox": {"l": 263.40002, "t": 475.00357, "r": 539.302, "b": 484.21655, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "courses and hands on consulting. Jim specializes in SQL ", "bbox": {"l": 263.40002, "t": 487.00339, "r": 518.37109, "b": 496.21637, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "performance, data-centric programming, and database ", "bbox": {"l": 263.40002, "t": 499.0032, "r": 507.58939, "b": 508.21619, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "modernization. Jim started his IBM career in 1981 as an S/38 ", "bbox": {"l": 263.40002, "t": 511.00302, "r": 537.43854, "b": 520.216, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "operating system programmer. Before joining the consulting ", "bbox": {"l": 263.40002, "t": 523.00284, "r": 529.47443, "b": 532.21582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "team, his key assignments included 10 years as a systems ", "bbox": {"l": 263.40002, "t": 535.00262, "r": 525.58606, "b": 544.21564, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "performance specialist, five years as the lead \u201cJDE on i\u201d ", "bbox": {"l": 263.40002, "t": 547.00244, "r": 512.86005, "b": 556.2154400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "analyst, three years as a consultant at the IBM Benchmark and ", "bbox": {"l": 263.40002, "t": 559.00224, "r": 541.24127, "b": 568.21524, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Briefing Center in Montpellier France, and a total of 11 years as ", "bbox": {"l": 263.40002, "t": 571.00204, "r": 541.1795, "b": 580.21504, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an operating system developer, including five years designing ", "bbox": {"l": 263.40002, "t": 583.00185, "r": 537.2641, "b": 592.21484, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and implementing enhancements to DB2 for i.", "bbox": {"l": 263.40002, "t": 595.00165, "r": 465.90363, "b": 604.21465, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Denton is a senior consultant at the IBM DB2 for i Center of Excellence, where his responsibilities include both teaching courses and hands on consulting. Jim specializes in SQL performance, data-centric programming, and database modernization. Jim started his IBM career in 1981 as an S/38 operating system programmer. Before joining the consulting team, his key assignments included 10 years as a systems performance specialist, five years as the lead \u201cJDE on i\u201d analyst, three years as a consultant at the IBM Benchmark and Briefing Center in Montpellier France, and a total of 11 years as an operating system developer, including five years designing and implementing enhancements to DB2 for i."}, {"label": "text", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "text", "bbox": {"l": 262.9361877441406, "t": 614.0336303710938, "r": 541.1944, "b": 708.252808, "coord_origin": "TOPLEFT"}, "confidence": 0.9843889474868774, "cells": [{"id": 44, "text": "Doug Mack ", "bbox": {"l": 263.40002, "t": 615.04117, "r": 318.42407, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "is a DB2 for i and Business Intelligence Consultant ", "bbox": {"l": 318.47983, "t": 615.04117, "r": 541.1944, "b": 624.2541699999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "in the IBM Power Systems\u2122 Lab Services organization. ", "bbox": {"l": 263.40002, "t": 627.04097, "r": 513.45575, "b": 636.25397, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Doug\u2019s 30+ year career with IBM spans many roles, including ", "bbox": {"l": 263.40002, "t": 639.0407700000001, "r": 536.81903, "b": 648.25377, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "product development, technical sales support, Business ", "bbox": {"l": 263.40002, "t": 651.04057, "r": 512.66986, "b": 660.25357, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Intelligence Sales Specialist, and DB2 for i Product Marketing ", "bbox": {"l": 263.40002, "t": 663.0403699999999, "r": 537.38861, "b": 672.25338, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Manager. Doug is a featured speaker at User Group ", "bbox": {"l": 263.40002, "t": 675.04018, "r": 495.84451, "b": 684.25319, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "conferences and meetings, IBM Technical Conferences, and ", "bbox": {"l": 263.40002, "t": 687.03999, "r": 531.87579, "b": 696.252998, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Executive Briefings.", "bbox": {"l": 263.40002, "t": 699.039803, "r": 350.62271, "b": 708.252808, "coord_origin": "TOPLEFT"}}]}, "text": "Doug Mack is a DB2 for i and Business Intelligence Consultant in the IBM Power Systems\u2122 Lab Services organization. Doug\u2019s 30+ year career with IBM spans many roles, including product development, technical sales support, Business Intelligence Sales Specialist, and DB2 for i Product Marketing Manager. Doug is a featured speaker at User Group conferences and meetings, IBM Technical Conferences, and Executive Briefings."}, {"label": "picture", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 141.68251037597656, "t": 77.3314437866211, "r": 249.5221405029297, "b": 183.49258422851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875855445861816, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 141.71910095214844, "t": 192.56460571289062, "r": 251.5185546875, "b": 319.4869079589844, "coord_origin": "TOPLEFT"}, "confidence": 0.9871560335159302, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 141.89089965820312, "t": 344.6142883300781, "r": 251.38380432128906, "b": 454.1204833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9869871139526367, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 141.69131469726562, "t": 614.610107421875, "r": 250.86129760742188, "b": 724.1473999023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9869828224182129, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 141.57579040527344, "t": 462.79840087890625, "r": 249.41360473632812, "b": 568.6048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861478805541992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.18641662597656, "t": 754.4242553710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.91111159324646, "cells": [{"id": 0, "text": "xii ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xii"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32842254638672, "t": 754.7139282226562, "r": 334.42142, "b": 763.9345703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9425985813140869, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 485.10001, "t": 754.75048828125, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.914573073387146, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 532.5994262695312, "t": 754.2633056640625, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8934566974639893, "cells": [{"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.6240234375, "t": 338.7327880859375, "r": 432.1602500000001, "b": 348.8023986816406, "coord_origin": "TOPLEFT"}, "confidence": 0.8790541291236877, "cells": [{"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.3055877685547, "t": 360.45208740234375, "r": 200.390869140625, "b": 370.70148, "coord_origin": "TOPLEFT"}, "confidence": 0.7089823484420776, "cells": [{"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.32855224609375, "t": 372.4372863769531, "r": 439.0932312011719, "b": 383.3298034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7829126119613647, "cells": [{"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.09214782714844, "t": 394.6581115722656, "r": 457.72974, "b": 416.9281921386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9423409700393677, "cells": [{"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.71363067626953, "t": 443.82012939453125, "r": 413.15256, "b": 460.31988525390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9612258076667786, "cells": [{"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.805419921875, "t": 476.6553039550781, "r": 547.23267, "b": 558.74059, "coord_origin": "TOPLEFT"}, "confidence": 0.9876447319984436, "cells": [{"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.59922790527344, "t": 570.6795654296875, "r": 546.81647, "b": 581.0769653320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9406706094741821, "cells": [{"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.80002, "t": 587.9857788085938, "r": 301.67783, "b": 597.50092, "coord_origin": "TOPLEFT"}, "confidence": 0.8938496112823486, "cells": [{"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.52783966064453, "t": 625.3417358398438, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}, "confidence": 0.9593470096588135, "cells": [{"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.9565887451172, "t": 657.9795532226562, "r": 294.74969, "b": 667.8671875, "coord_origin": "TOPLEFT"}, "confidence": 0.926453173160553, "cells": [{"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8791961669922, "t": 679.3858642578125, "r": 547.25244, "b": 701.721336, "coord_origin": "TOPLEFT"}, "confidence": 0.9736941456794739, "cells": [{"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.62045288085938, "t": 708.805908203125, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}, "confidence": 0.8550623655319214, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 151.20013, "t": 726.4096069335938, "r": 231.11916999999997, "b": 735.501671, "coord_origin": "TOPLEFT"}, "confidence": 0.7705531120300293, "cells": [{"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 262.7662658691406, "t": 76.673583984375, "r": 541.15515, "b": 206.9925079345703, "coord_origin": "TOPLEFT"}, "confidence": 0.9826179146766663, "cells": [{"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 262.6918029785156, "t": 216.41091918945312, "r": 541.26654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9823182821273804, "cells": [{"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "picture", "bbox": {"l": 142.26431274414062, "t": 77.12178802490234, "r": 251.69140625, "b": 192.6881103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871392846107483, "cells": []}, {"id": 18, "label": "picture", "bbox": {"l": 142.39024353027344, "t": 216.5591278076172, "r": 251.9964141845703, "b": 326.3576965332031, "coord_origin": "TOPLEFT"}, "confidence": 0.9861040711402893, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 485.10001, "t": 754.75048828125, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.914573073387146, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 532.5994262695312, "t": 754.2633056640625, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8934566974639893, "cells": [{"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiii"}, {"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6240234375, "t": 338.7327880859375, "r": 432.1602500000001, "b": 348.8023986816406, "coord_origin": "TOPLEFT"}, "confidence": 0.8790541291236877, "cells": [{"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3055877685547, "t": 360.45208740234375, "r": 200.390869140625, "b": 370.70148, "coord_origin": "TOPLEFT"}, "confidence": 0.7089823484420776, "cells": [{"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}]}, "text": "Debra Landon"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.32855224609375, "t": 372.4372863769531, "r": 439.0932312011719, "b": 383.3298034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7829126119613647, "cells": [{"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization, Rochester Center"}, {"label": "text", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.09214782714844, "t": 394.6581115722656, "r": 457.72974, "b": 416.9281921386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9423409700393677, "cells": [{"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}]}, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development"}, {"label": "section_header", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.71363067626953, "t": 443.82012939453125, "r": 413.15256, "b": 460.31988525390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9612258076667786, "cells": [{"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.805419921875, "t": 476.6553039550781, "r": 547.23267, "b": 558.74059, "coord_origin": "TOPLEFT"}, "confidence": 0.9876447319984436, "cells": [{"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.59922790527344, "t": 570.6795654296875, "r": 546.81647, "b": 581.0769653320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9406706094741821, "cells": [{"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.80002, "t": 587.9857788085938, "r": 301.67783, "b": 597.50092, "coord_origin": "TOPLEFT"}, "confidence": 0.8938496112823486, "cells": [{"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}, {"label": "section_header", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.52783966064453, "t": 625.3417358398438, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}, "confidence": 0.9593470096588135, "cells": [{"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}]}, "text": "Comments welcome"}, {"label": "text", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9565887451172, "t": 657.9795532226562, "r": 294.74969, "b": 667.8671875, "coord_origin": "TOPLEFT"}, "confidence": 0.926453173160553, "cells": [{"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Your comments are important to us!"}, {"label": "text", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8791961669922, "t": 679.3858642578125, "r": 547.25244, "b": 701.721336, "coord_origin": "TOPLEFT"}, "confidence": 0.9736941456794739, "cells": [{"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}]}, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways:"}, {"label": "list_item", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.62045288085938, "t": 708.805908203125, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}, "confidence": 0.8550623655319214, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use the online Contact us review Redbooks form found at:"}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 151.20013, "t": 726.4096069335938, "r": 231.11916999999997, "b": 735.501671, "coord_origin": "TOPLEFT"}, "confidence": 0.7705531120300293, "cells": [{"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 15, "page_no": 14, "cluster": {"id": 15, "label": "text", "bbox": {"l": 262.7662658691406, "t": 76.673583984375, "r": 541.15515, "b": 206.9925079345703, "coord_origin": "TOPLEFT"}, "confidence": 0.9826179146766663, "cells": [{"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36."}, {"label": "text", "id": 16, "page_no": 14, "cluster": {"id": 16, "label": "text", "bbox": {"l": 262.6918029785156, "t": 216.41091918945312, "r": 541.26654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9823182821273804, "cells": [{"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester."}, {"label": "picture", "id": 17, "page_no": 14, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 142.26431274414062, "t": 77.12178802490234, "r": 251.69140625, "b": 192.6881103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871392846107483, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 18, "page_no": 14, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 142.39024353027344, "t": 216.5591278076172, "r": 251.9964141845703, "b": 326.3576965332031, "coord_origin": "TOPLEFT"}, "confidence": 0.9861040711402893, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6240234375, "t": 338.7327880859375, "r": 432.1602500000001, "b": 348.8023986816406, "coord_origin": "TOPLEFT"}, "confidence": 0.8790541291236877, "cells": [{"id": 2, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79956, "t": 339.52869, "r": 432.1602500000001, "b": 348.74167, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3055877685547, "t": 360.45208740234375, "r": 200.390869140625, "b": 370.70148, "coord_origin": "TOPLEFT"}, "confidence": 0.7089823484420776, "cells": [{"id": 3, "text": "Debra Landon", "bbox": {"l": 136.79956, "t": 361.48849, "r": 200.0416, "b": 370.70148, "coord_origin": "TOPLEFT"}}]}, "text": "Debra Landon"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.32855224609375, "t": 372.4372863769531, "r": 439.0932312011719, "b": 383.3298034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7829126119613647, "cells": [{"id": 4, "text": "International Technical Support Organization, Rochester Center", "bbox": {"l": 136.79956, "t": 373.48830999999996, "r": 438.75391, "b": 382.70129, "coord_origin": "TOPLEFT"}}]}, "text": "International Technical Support Organization, Rochester Center"}, {"label": "text", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.09214782714844, "t": 394.6581115722656, "r": 457.72974, "b": 416.9281921386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9423409700393677, "cells": [{"id": 5, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad", "bbox": {"l": 136.79955, "t": 395.50787, "r": 457.72974, "b": 404.72086, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Rochester Development", "bbox": {"l": 136.79955, "t": 407.50769, "r": 272.10016, "b": 416.72067, "coord_origin": "TOPLEFT"}}]}, "text": "Craig Aldrich, Mark Anderson, Theresa Euler, Scott Forstie, Chad Olstad IBM Rochester Development"}, {"label": "section_header", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.71363067626953, "t": 443.82012939453125, "r": 413.15256, "b": 460.31988525390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9612258076667786, "cells": [{"id": 7, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 445.20071, "r": 413.15256, "b": 459.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.805419921875, "t": 476.6553039550781, "r": 547.23267, "b": 558.74059, "coord_origin": "TOPLEFT"}, "confidence": 0.9876447319984436, "cells": [{"id": 8, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 477.52872, "r": 525.74896, "b": 486.7417, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "author-all at the same time! Join an ITSO residency project and help write a book in your ", "bbox": {"l": 136.8, "t": 489.52853, "r": 537.30347, "b": 498.74152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "area of expertise, while honing your experience using leading-edge technologies. Your efforts ", "bbox": {"l": 136.8, "t": 501.52835, "r": 547.23267, "b": 510.74133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "will help to increase product acceptance and customer satisfaction, as you expand your ", "bbox": {"l": 136.8, "t": 513.52817, "r": 524.59961, "b": 522.7411500000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "network of technical contacts and relationships. Residencies run from two to six weeks in ", "bbox": {"l": 136.80002, "t": 525.5279800000001, "r": 532.24384, "b": 534.7409700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80002, "t": 537.52779, "r": 535.20209, "b": 546.74078, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "home base.", "bbox": {"l": 136.80002, "t": 549.52759, "r": 188.81511, "b": 558.74059, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an ITSO residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.59922790527344, "t": 570.6795654296875, "r": 546.81647, "b": 581.0769653320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9406706094741821, "cells": [{"id": 15, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80002, "t": 571.54715, "r": 546.81647, "b": 580.7601500000001, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.80002, "t": 587.9857788085938, "r": 301.67783, "b": 597.50092, "coord_origin": "TOPLEFT"}, "confidence": 0.8938496112823486, "cells": [{"id": 16, "text": "ibm.com", "bbox": {"l": 136.80002, "t": 588.6763599999999, "r": 171.77953, "b": 597.50092, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/redbooks/residencies.html", "bbox": {"l": 171.77954, "t": 588.6763599999999, "r": 301.67783, "b": 597.45111, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}, {"label": "section_header", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.52783966064453, "t": 625.3417358398438, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}, "confidence": 0.9593470096588135, "cells": [{"id": 18, "text": "Comments welcome", "bbox": {"l": 64.800003, "t": 626.22063, "r": 219.43166000000002, "b": 640.98363, "coord_origin": "TOPLEFT"}}]}, "text": "Comments welcome"}, {"label": "text", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9565887451172, "t": 657.9795532226562, "r": 294.74969, "b": 667.8671875, "coord_origin": "TOPLEFT"}, "confidence": 0.926453173160553, "cells": [{"id": 19, "text": "Your comments are important to us!", "bbox": {"l": 136.8, "t": 658.54872, "r": 294.74969, "b": 667.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Your comments are important to us!"}, {"label": "text", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8791961669922, "t": 679.3858642578125, "r": 547.25244, "b": 701.721336, "coord_origin": "TOPLEFT"}, "confidence": 0.9736941456794739, "cells": [{"id": 20, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or ", "bbox": {"l": 136.8, "t": 680.50852, "r": 547.25244, "b": 689.72153, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "other IBM Redbooks publications in one of the following ways:", "bbox": {"l": 136.8, "t": 692.508331, "r": 410.18698, "b": 701.721336, "coord_origin": "TOPLEFT"}}]}, "text": "We want our papers to be as helpful as possible. Send us your comments about this paper or other IBM Redbooks publications in one of the following ways:"}, {"label": "list_item", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.62045288085938, "t": 708.805908203125, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}, "confidence": 0.8550623655319214, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.8, "t": 709.697304, "r": 141.78, "b": 718.4720609999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Use the online ", "bbox": {"l": 151.20016, "t": 709.547897, "r": 217.90927, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Contact us", "bbox": {"l": 217.86044, "t": 709.547897, "r": 269.52493, "b": 718.760902, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " review Redbooks form found at:", "bbox": {"l": 269.51996, "t": 709.547897, "r": 412.55646, "b": 718.760902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use the online Contact us review Redbooks form found at:"}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 151.20013, "t": 726.4096069335938, "r": 231.11916999999997, "b": 735.501671, "coord_origin": "TOPLEFT"}, "confidence": 0.7705531120300293, "cells": [{"id": 26, "text": "ibm.com", "bbox": {"l": 151.20013, "t": 726.677109, "r": 186.17964, "b": 735.501671, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/redbooks", "bbox": {"l": 186.17966, "t": 726.677109, "r": 231.11916999999997, "b": 735.45187, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 15, "page_no": 14, "cluster": {"id": 15, "label": "text", "bbox": {"l": 262.7662658691406, "t": 76.673583984375, "r": 541.15515, "b": 206.9925079345703, "coord_origin": "TOPLEFT"}, "confidence": 0.9826179146766663, "cells": [{"id": 28, "text": "Tom McKinley ", "bbox": {"l": 263.39954, "t": 77.50725999999997, "r": 332.99799, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "is an IBM Lab Services Consultant working on ", "bbox": {"l": 333.0, "t": 77.50725999999997, "r": 540.04248, "b": 86.72028, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for IBM i in Rochester MN. His main focus is complex ", "bbox": {"l": 263.39954, "t": 89.50707999999997, "r": 522.99799, "b": 98.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "query performance that is associated with Business ", "bbox": {"l": 263.39954, "t": 101.50689999999997, "r": 494.28336, "b": 110.71991000000014, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Intelligence running on Very Large Databases. He worked as a ", "bbox": {"l": 263.39954, "t": 113.50671, "r": 541.15515, "b": 122.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "developer or performance analyst in the DB area from 1986 ", "bbox": {"l": 263.39954, "t": 125.50653000000011, "r": 528.91815, "b": 134.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "until 2006. Some of his major pieces of work include the ", "bbox": {"l": 263.39954, "t": 137.50635, "r": 513.48511, "b": 146.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Symmetric Multiple processing capabilities of DB2 for IBM i ", "bbox": {"l": 263.39954, "t": 149.50616000000002, "r": 527.07666, "b": 158.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "and Large Object Data types. In addition, he was on the ", "bbox": {"l": 263.39954, "t": 161.50598000000002, "r": 512.53601, "b": 170.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "original team that designed and built the SQL Query Engine. ", "bbox": {"l": 263.39954, "t": 173.50580000000002, "r": 532.94702, "b": 182.71880999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Before his database work, he worked on Licensed Internal ", "bbox": {"l": 263.39954, "t": 185.50562000000002, "r": 523.24597, "b": 194.71862999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Code for System 34 and System 36.", "bbox": {"l": 263.39954, "t": 197.50543000000005, "r": 423.67691, "b": 206.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Tom McKinley is an IBM Lab Services Consultant working on DB2 for IBM i in Rochester MN. His main focus is complex query performance that is associated with Business Intelligence running on Very Large Databases. He worked as a developer or performance analyst in the DB area from 1986 until 2006. Some of his major pieces of work include the Symmetric Multiple processing capabilities of DB2 for IBM i and Large Object Data types. In addition, he was on the original team that designed and built the SQL Query Engine. Before his database work, he worked on Licensed Internal Code for System 34 and System 36."}, {"label": "text", "id": 16, "page_no": 14, "cluster": {"id": 16, "label": "text", "bbox": {"l": 262.6918029785156, "t": 216.41091918945312, "r": 541.26654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9823182821273804, "cells": [{"id": 40, "text": "Kent Milligan ", "bbox": {"l": 263.39954, "t": 217.48517000000004, "r": 328.19531, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 328.19928, "t": 217.48517000000004, "r": 519.0976, "b": 226.69817999999998, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Center of Excellence team within the IBM Lab Services and ", "bbox": {"l": 263.39954, "t": 229.48499000000004, "r": 529.25977, "b": 238.69799999999998, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Training organization. His primary responsibility is helping ", "bbox": {"l": 263.39954, "t": 241.48479999999995, "r": 520.32373, "b": 250.69781, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "software developers use the latest DB2 technologies and port ", "bbox": {"l": 263.39954, "t": 253.48461999999995, "r": 538.10938, "b": 262.69763, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "applications from other databases to DB2 for i. After graduating ", "bbox": {"l": 263.39954, "t": 265.48443999999995, "r": 541.26654, "b": 274.69745, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from the University of Iowa, Kent spent the first eight years of ", "bbox": {"l": 263.39954, "t": 277.48425, "r": 534.98981, "b": 286.69727, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "his IBM career as a member of the DB2 development team in ", "bbox": {"l": 263.39954, "t": 289.4841, "r": 536.6889, "b": 298.69708, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Rochester.", "bbox": {"l": 263.39954, "t": 301.48392, "r": 311.20654, "b": 310.69689999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Kent Milligan is a senior DB2 consultant on the DB2 for i Center of Excellence team within the IBM Lab Services and Training organization. His primary responsibility is helping software developers use the latest DB2 technologies and port applications from other databases to DB2 for i. After graduating from the University of Iowa, Kent spent the first eight years of his IBM career as a member of the DB2 development team in Rochester."}, {"label": "picture", "id": 17, "page_no": 14, "cluster": {"id": 17, "label": "picture", "bbox": {"l": 142.26431274414062, "t": 77.12178802490234, "r": 251.69140625, "b": 192.6881103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871392846107483, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 18, "page_no": 14, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 142.39024353027344, "t": 216.5591278076172, "r": 251.9964141845703, "b": 326.3576965332031, "coord_origin": "TOPLEFT"}, "confidence": 0.9861040711402893, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 485.10001, "t": 754.75048828125, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}, "confidence": 0.914573073387146, "cells": [{"id": 0, "text": " Preface ", "bbox": {"l": 485.10001, "t": 755.538002, "r": 520.88135, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 532.5994262695312, "t": 754.2633056640625, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8934566974639893, "cells": [{"id": 1, "text": "xiii", "bbox": {"l": 533.34003, "t": 754.848721, "r": 547.19342, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiii"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.0907974243164, "t": 754.5955200195312, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9144188761711121, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 95.71053314208984, "t": 754.6729736328125, "r": 337.03378, "b": 763.97509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9409525394439697, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.5431365966797, "t": 70.70941925048828, "r": 310.37393, "b": 81.28385162353516, "coord_origin": "TOPLEFT"}, "confidence": 0.8883165717124939, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 150.99362182617188, "t": 87.82772064208984, "r": 246.22007751464844, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.6984229683876038, "cells": [{"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 104.9468002319336, "r": 254.27019999999996, "b": 114.9759292602539, "coord_origin": "TOPLEFT"}, "confidence": 0.8724080324172974, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 150.4449005126953, "t": 120.91980743408203, "r": 426.99243, "b": 167.9119873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.8001936674118042, "cells": [{"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.44961547851562, "t": 194.60934448242188, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9598472118377686, "cells": [{"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.58946228027344, "t": 227.83482360839844, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8748195767402649, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.674072265625, "t": 244.8909912109375, "r": 326.09775, "b": 254.91514587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.7252531051635742, "cells": [{"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.61866760253906, "t": 261.4954833984375, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}, "confidence": 0.8754413723945618, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 150.70498657226562, "t": 278.7747497558594, "r": 301.07822, "b": 288.4688720703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6634963750839233, "cells": [{"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.6381072998047, "t": 295.406982421875, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}, "confidence": 0.8954482078552246, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 150.5355224609375, "t": 312.7005920410156, "r": 391.07678, "b": 322.6709289550781, "coord_origin": "TOPLEFT"}, "confidence": 0.7177077531814575, "cells": [{"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.53648376464844, "t": 330.0694580078125, "r": 546.2179, "b": 352.36749267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449265599250793, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 150.64300537109375, "t": 358.7694091796875, "r": 451.45623779296875, "b": 368.8676452636719, "coord_origin": "TOPLEFT"}, "confidence": 0.7377406358718872, "cells": [{"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.8739471435547, "t": 375.3260498046875, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}, "confidence": 0.9105416536331177, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 150.6341552734375, "t": 392.9015197753906, "r": 331.07773, "b": 402.52935791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.766843855381012, "cells": [{"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0907974243164, "t": 754.5955200195312, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9144188761711121, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiv"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.71053314208984, "t": 754.6729736328125, "r": 337.03378, "b": 763.97509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9409525394439697, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.5431365966797, "t": 70.70941925048828, "r": 310.37393, "b": 81.28385162353516, "coord_origin": "TOPLEFT"}, "confidence": 0.8883165717124939, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Send your comments in an email to:"}, {"label": "text", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.99362182617188, "t": 87.82772064208984, "r": 246.22007751464844, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.6984229683876038, "cells": [{"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}]}, "text": "redbooks@us.ibm.com"}, {"label": "list_item", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 104.9468002319336, "r": 254.27019999999996, "b": 114.9759292602539, "coord_origin": "TOPLEFT"}, "confidence": 0.8724080324172974, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mail your comments to:"}, {"label": "text", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4449005126953, "t": 120.91980743408203, "r": 426.99243, "b": 167.9119873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.8001936674118042, "cells": [{"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400"}, {"label": "section_header", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.44961547851562, "t": 194.60934448242188, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9598472118377686, "cells": [{"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.58946228027344, "t": 227.83482360839844, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8748195767402649, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on Facebook:"}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.674072265625, "t": 244.8909912109375, "r": 326.09775, "b": 254.91514587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.7252531051635742, "cells": [{"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.facebook.com/IBMRedbooks"}, {"label": "list_item", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.61866760253906, "t": 261.4954833984375, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}, "confidence": 0.8754413723945618, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Follow us on Twitter:"}, {"label": "text", "id": 10, "page_no": 15, "cluster": {"id": 10, "label": "text", "bbox": {"l": 150.70498657226562, "t": 278.7747497558594, "r": 301.07822, "b": 288.4688720703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6634963750839233, "cells": [{"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}]}, "text": "http://twitter.com/ibmredbooks"}, {"label": "list_item", "id": 11, "page_no": 15, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.6381072998047, "t": 295.406982421875, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}, "confidence": 0.8954482078552246, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Look for us on LinkedIn:"}, {"label": "text", "id": 12, "page_no": 15, "cluster": {"id": 12, "label": "text", "bbox": {"l": 150.5355224609375, "t": 312.7005920410156, "r": 391.07678, "b": 322.6709289550781, "coord_origin": "TOPLEFT"}, "confidence": 0.7177077531814575, "cells": [{"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 13, "page_no": 15, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.53648376464844, "t": 330.0694580078125, "r": 546.2179, "b": 352.36749267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449265599250793, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "text", "id": 14, "page_no": 15, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.64300537109375, "t": 358.7694091796875, "r": 451.45623779296875, "b": 368.8676452636719, "coord_origin": "TOPLEFT"}, "confidence": 0.7377406358718872, "cells": [{"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 15, "page_no": 15, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8739471435547, "t": 375.3260498046875, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}, "confidence": 0.9105416536331177, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 16, "page_no": 15, "cluster": {"id": 16, "label": "text", "bbox": {"l": 150.6341552734375, "t": 392.9015197753906, "r": 331.07773, "b": 402.52935791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.766843855381012, "cells": [{"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "body": [{"label": "list_item", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.5431365966797, "t": 70.70941925048828, "r": 310.37393, "b": 81.28385162353516, "coord_origin": "TOPLEFT"}, "confidence": 0.8883165717124939, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Send your comments in an email to:", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 310.37393, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Send your comments in an email to:"}, {"label": "text", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.99362182617188, "t": 87.82772064208984, "r": 246.22007751464844, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.6984229683876038, "cells": [{"id": 4, "text": "redbooks@us.ibm.com", "bbox": {"l": 151.20016, "t": 88.63788000000011, "r": 246.11894, "b": 97.41265999999996, "coord_origin": "TOPLEFT"}}]}, "text": "redbooks@us.ibm.com"}, {"label": "list_item", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 104.9468002319336, "r": 254.27019999999996, "b": 114.9759292602539, "coord_origin": "TOPLEFT"}, "confidence": 0.8724080324172974, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 105.67742999999996, "r": 141.78, "b": 114.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Mail your comments to:", "bbox": {"l": 151.20016, "t": 105.52801999999997, "r": 254.27019999999996, "b": 114.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mail your comments to:"}, {"label": "text", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4449005126953, "t": 120.91980743408203, "r": 426.99243, "b": 167.9119873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.8001936674118042, "cells": [{"id": 7, "text": "IBM Corporation, International Technical Support Organization", "bbox": {"l": 151.20016, "t": 122.50780999999995, "r": 426.99243, "b": 131.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Dept. HYTD Mail Station P099", "bbox": {"l": 151.20016, "t": 134.50762999999995, "r": 286.11533, "b": 143.72064, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2455 South Road", "bbox": {"l": 151.20016, "t": 146.50744999999995, "r": 229.02261, "b": 155.72046, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Poughkeepsie, NY 12601-5400", "bbox": {"l": 151.20016, "t": 158.50725999999997, "r": 289.45789, "b": 167.72028, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Corporation, International Technical Support Organization Dept. HYTD Mail Station P099 2455 South Road Poughkeepsie, NY 12601-5400"}, {"label": "section_header", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.44961547851562, "t": 194.60934448242188, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9598472118377686, "cells": [{"id": 11, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 196.20068000000003, "r": 317.65109, "b": 210.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.58946228027344, "t": 227.83482360839844, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8748195767402649, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 228.67809999999997, "r": 141.78, "b": 237.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Find us on Facebook:", "bbox": {"l": 151.20016, "t": 228.52868999999998, "r": 246.83711000000002, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on Facebook:"}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.674072265625, "t": 244.8909912109375, "r": 326.09775, "b": 254.91514587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.7252531051635742, "cells": [{"id": 14, "text": "http://www.facebook.com/IBMRedbooks", "bbox": {"l": 151.20016, "t": 245.65790000000004, "r": 326.09775, "b": 254.43268, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.facebook.com/IBMRedbooks"}, {"label": "list_item", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.61866760253906, "t": 261.4954833984375, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}, "confidence": 0.8754413723945618, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.6377, "r": 141.78, "b": 271.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Follow us on Twitter:", "bbox": {"l": 151.20016, "t": 262.48828000000003, "r": 241.52239999999998, "b": 271.70129, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Follow us on Twitter:"}, {"label": "text", "id": 10, "page_no": 15, "cluster": {"id": 10, "label": "text", "bbox": {"l": 150.70498657226562, "t": 278.7747497558594, "r": 301.07822, "b": 288.4688720703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6634963750839233, "cells": [{"id": 17, "text": "http://twitter.com/ibmredbooks", "bbox": {"l": 151.20016, "t": 279.67731000000003, "r": 301.07822, "b": 288.45206, "coord_origin": "TOPLEFT"}}]}, "text": "http://twitter.com/ibmredbooks"}, {"label": "list_item", "id": 11, "page_no": 15, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.6381072998047, "t": 295.406982421875, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}, "confidence": 0.8954482078552246, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 296.65707000000003, "r": 141.78, "b": 305.43184999999994, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Look for us on LinkedIn:", "bbox": {"l": 151.20016, "t": 296.50769, "r": 257.42651, "b": 305.72067, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Look for us on LinkedIn:"}, {"label": "text", "id": 12, "page_no": 15, "cluster": {"id": 12, "label": "text", "bbox": {"l": 150.5355224609375, "t": 312.7005920410156, "r": 391.07678, "b": 322.6709289550781, "coord_origin": "TOPLEFT"}, "confidence": 0.7177077531814575, "cells": [{"id": 20, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 313.63687, "r": 391.07678, "b": 322.41165, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 13, "page_no": 15, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.53648376464844, "t": 330.0694580078125, "r": 546.2179, "b": 352.36749267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449265599250793, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 330.67645, "r": 141.78, "b": 339.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 330.52707, "r": 546.2179, "b": 339.74005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 342.52689, "r": 232.82335, "b": 351.73986999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "text", "id": 14, "page_no": 15, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.64300537109375, "t": 358.7694091796875, "r": 451.45623779296875, "b": 368.8676452636719, "coord_origin": "TOPLEFT"}, "confidence": 0.7377406358718872, "cells": [{"id": 24, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 359.65607, "r": 451.01605, "b": 368.43085, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 15, "page_no": 15, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8739471435547, "t": 375.3260498046875, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}, "confidence": 0.9105416536331177, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 376.63586000000004, "r": 141.78, "b": 385.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 376.4864799999999, "r": 429.34805000000006, "b": 385.69946, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 16, "page_no": 15, "cluster": {"id": 16, "label": "text", "bbox": {"l": 150.6341552734375, "t": 392.9015197753906, "r": 331.07773, "b": 402.52935791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.766843855381012, "cells": [{"id": 27, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 393.67545, "r": 331.07773, "b": 402.45023, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0907974243164, "t": 754.5955200195312, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9144188761711121, "cells": [{"id": 0, "text": "xiv ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 81.162003, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xiv"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 95.71053314208984, "t": 754.6729736328125, "r": 337.03378, "b": 763.97509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9409525394439697, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 96.180305, "t": 755.538002, "r": 337.03378, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 18, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 328.2245788574219, "t": 754.796142578125, "r": 529.10632, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508112072944641, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.928466796875, "t": 754.3477783203125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8825920820236206, "cells": [{"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.11676025390625, "t": 70.81370544433594, "r": 546.43982, "b": 165.12799072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9880445599555969, "cells": [{"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7813262939453, "t": 176.89154052734375, "r": 547.2666, "b": 271.1439514160156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884217381477356, "cells": [{"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8739471435547, "t": 282.6854553222656, "r": 546.22662, "b": 329.1358337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.987811267375946, "cells": [{"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.800003, "t": 356.1169738769531, "r": 295.20493, "b": 372.2132873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.9654257893562317, "cells": [{"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.9359893798828, "t": 388.60498046875, "r": 547.16888, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9873308539390564, "cells": [{"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.52011108398438, "t": 470.60333251953125, "r": 466.31863, "b": 480.9595947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9494351744651794, "cells": [{"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 135.93324279785156, "t": 702.1747436523438, "r": 354.8916015625, "b": 711.3971557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9390377402305603, "cells": [{"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 136.6387176513672, "t": 495.7486877441406, "r": 491.2538146972656, "b": 699.0596923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797728061676025, "cells": [{"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2245788574219, "t": 754.796142578125, "r": 529.10632, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508112072944641, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.928466796875, "t": 754.3477783203125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8825920820236206, "cells": [{"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "text", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.11676025390625, "t": 70.81370544433594, "r": 546.43982, "b": 165.12799072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9880445599555969, "cells": [{"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day."}, {"label": "text", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7813262939453, "t": 176.89154052734375, "r": 547.2666, "b": 271.1439514160156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884217381477356, "cells": [{"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces."}, {"label": "text", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8739471435547, "t": 282.6854553222656, "r": 546.22662, "b": 329.1358337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.987811267375946, "cells": [{"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}]}, "text": "An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level."}, {"label": "section_header", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.800003, "t": 356.1169738769531, "r": 295.20493, "b": 372.2132873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.9654257893562317, "cells": [{"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}]}, "text": "1.3 DB2 for i security controls"}, {"label": "text", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9359893798828, "t": 388.60498046875, "r": 547.16888, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9873308539390564, "cells": [{"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table."}, {"label": "text", "id": 7, "page_no": 18, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.52011108398438, "t": 470.60333251953125, "r": 466.31863, "b": 480.9595947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9494351744651794, "cells": [{"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table."}, {"label": "caption", "id": 8, "page_no": 18, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.93324279785156, "t": 702.1747436523438, "r": 354.8916015625, "b": 711.3971557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9390377402305603, "cells": [{"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-1 All-or-nothing access to the rows of a table"}, {"label": "picture", "id": 9, "page_no": 18, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.6387176513672, "t": 495.7486877441406, "r": 491.2538146972656, "b": 699.0596923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797728061676025, "cells": [{"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.11676025390625, "t": 70.81370544433594, "r": 546.43982, "b": 165.12799072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9880445599555969, "cells": [{"id": 2, "text": "Some clients using this default configuration have toughened their database security with ", "bbox": {"l": 136.7999, "t": 71.50903000000005, "r": 532.22772, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to ", "bbox": {"l": 136.7999, "t": 83.50885000000017, "r": 546.43982, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be called every time that a particular interface (for example, FTP) is used or an event occurs ", "bbox": {"l": 136.7999, "t": 95.50867000000005, "r": 545.43481, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "(for example, a profile is created). Security tools that are based on these exit points increase ", "bbox": {"l": 136.7999, "t": 107.50847999999996, "r": 546.36505, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the level of security on a system by locking down interfaces that are not under the control of ", "bbox": {"l": 136.7999, "t": 119.50829999999996, "r": 542.84106, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "menu-based or application authority. In addition, exit-point solutions allow clients to ", "bbox": {"l": 136.7999, "t": 131.50811999999996, "r": 504.82483, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement more granular security controls, such as allowing users access only to the ", "bbox": {"l": 136.7999, "t": 143.50793, "r": 514.11053, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "database during certain hours of the day.", "bbox": {"l": 136.7999, "t": 155.50775, "r": 317.74625, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Some clients using this default configuration have toughened their database security with exit-point solutions from third-party vendors. IBM i exit points allow a user-written program to be called every time that a particular interface (for example, FTP) is used or an event occurs (for example, a profile is created). Security tools that are based on these exit points increase the level of security on a system by locking down interfaces that are not under the control of menu-based or application authority. In addition, exit-point solutions allow clients to implement more granular security controls, such as allowing users access only to the database during certain hours of the day."}, {"label": "text", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7813262939453, "t": 176.89154052734375, "r": 547.2666, "b": 271.1439514160156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884217381477356, "cells": [{"id": 10, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to ", "bbox": {"l": 136.7999, "t": 177.52733999999998, "r": 513.7002, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "object-level control of your databases. Exit-point solutions help secure interfaces, but they do ", "bbox": {"l": 136.7999, "t": 189.52715999999998, "r": 547.2666, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "not completely protect the data that is stored in your DB2 objects. Exit points do not exist for ", "bbox": {"l": 136.7999, "t": 201.52697999999998, "r": 544.81219, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "every data access interface on the system. Therefore, if an application starts using an ", "bbox": {"l": 136.7999, "t": 213.52679, "r": 517.20105, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "unprotected interface, the only thing protecting your data is object-level access control. When ", "bbox": {"l": 136.7999, "t": 225.52661, "r": 547.23248, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "your security implementation totally relies on exit points, then it is also important to track any ", "bbox": {"l": 136.7999, "t": 237.52643, "r": 546.36804, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "new data interfaces that appear as IBM delivers new releases and products to ensure that ", "bbox": {"l": 136.7999, "t": 249.52625, "r": 535.90399, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "your exit-point solution provides coverage for those new interfaces.", "bbox": {"l": 136.7999, "t": 261.52606000000003, "r": 430.80014, "b": 270.73906999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Although exit-point solutions can provide great benefits, they are not an alternative to object-level control of your databases. Exit-point solutions help secure interfaces, but they do not completely protect the data that is stored in your DB2 objects. Exit points do not exist for every data access interface on the system. Therefore, if an application starts using an unprotected interface, the only thing protecting your data is object-level access control. When your security implementation totally relies on exit points, then it is also important to track any new data interfaces that appear as IBM delivers new releases and products to ensure that your exit-point solution provides coverage for those new interfaces."}, {"label": "text", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8739471435547, "t": 282.6854553222656, "r": 546.22662, "b": 329.1358337402344, "coord_origin": "TOPLEFT"}, "confidence": 0.987811267375946, "cells": [{"id": 18, "text": "An exit-point solution is a good option for databases with security holes that are caused by a ", "bbox": {"l": 136.7999, "t": 283.4859, "r": 546.22662, "b": 292.69888, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "reliance on the default security setup or menu-based control. However, your security work ", "bbox": {"l": 136.7999, "t": 295.48572, "r": 534.57117, "b": 304.6986999999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "should not stop there. Instead, you must continue to work on a complete database security ", "bbox": {"l": 136.7999, "t": 307.48553000000004, "r": 539.19958, "b": 316.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "solution by controlling data access at the object level.", "bbox": {"l": 136.7999, "t": 319.48535, "r": 371.62982, "b": 328.69833, "coord_origin": "TOPLEFT"}}]}, "text": "An exit-point solution is a good option for databases with security holes that are caused by a reliance on the default security setup or menu-based control. However, your security work should not stop there. Instead, you must continue to work on a complete database security solution by controlling data access at the object level."}, {"label": "section_header", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.800003, "t": 356.1169738769531, "r": 295.20493, "b": 372.2132873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.9654257893562317, "cells": [{"id": 22, "text": "1.3", "bbox": {"l": 64.800003, "t": 357.18073, "r": 87.399879, "b": 371.94373, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 91.919853, "t": 357.18073, "r": 295.20493, "b": 371.94373, "coord_origin": "TOPLEFT"}}]}, "text": "1.3 DB2 for i security controls"}, {"label": "text", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9359893798828, "t": 388.60498046875, "r": 547.16888, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9873308539390564, "cells": [{"id": 24, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your ", "bbox": {"l": 136.8, "t": 389.50872999999996, "r": 545.23871, "b": 398.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 objects are a critical success factor in securing your business data. Although database ", "bbox": {"l": 136.8, "t": 401.50854, "r": 543.08527, "b": 410.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "object-level security is a strong security feature, some clients have found that object-level ", "bbox": {"l": 136.8, "t": 413.50836, "r": 531.52155, "b": 422.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "security does not have the granularity that is required to adhere to regulatory or compliance ", "bbox": {"l": 136.8, "t": 425.5081799999999, "r": 542.76959, "b": 434.72116, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "policies. A user that is granted object-level access to a DB2 table has the authority to view all ", "bbox": {"l": 136.8, "t": 437.50800000000004, "r": 547.16888, "b": 446.72098, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "of the rows and values in that table.", "bbox": {"l": 136.8, "t": 449.50781, "r": 293.37024, "b": 458.7207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 1.2, \u201cCurrent state of IBM i security\u201d on page 2, object-level controls on your DB2 objects are a critical success factor in securing your business data. Although database object-level security is a strong security feature, some clients have found that object-level security does not have the granularity that is required to adhere to regulatory or compliance policies. A user that is granted object-level access to a DB2 table has the authority to view all of the rows and values in that table."}, {"label": "text", "id": 7, "page_no": 18, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.52011108398438, "t": 470.60333251953125, "r": 466.31863, "b": 480.9595947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9494351744651794, "cells": [{"id": 30, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table.", "bbox": {"l": 136.8, "t": 471.52737, "r": 466.31863, "b": 480.74036, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 1-1, it is an all-or-nothing access to the rows of a table."}, {"label": "caption", "id": 8, "page_no": 18, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.93324279785156, "t": 702.1747436523438, "r": 354.8916015625, "b": 711.3971557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9390377402305603, "cells": [{"id": 31, "text": "Figure 1-1 All-or-nothing access to the rows of a table", "bbox": {"l": 136.8, "t": 702.977905, "r": 354.75031, "b": 711.302902, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-1 All-or-nothing access to the rows of a table"}, {"label": "picture", "id": 9, "page_no": 18, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.6387176513672, "t": 495.7486877441406, "r": 491.2538146972656, "b": 699.0596923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797728061676025, "cells": [{"id": 32, "text": "The Business Problem\u0085", "bbox": {"l": 145.2338, "t": 503.53342, "r": 362.0163, "b": 522.87445, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Tb", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 459.25156, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "l", "bbox": {"l": 448.32556, "t": 595.9722899999999, "r": 465.547, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Database", "bbox": {"l": 164.4601, "t": 590.54692, "r": 210.09276, "b": 599.79594, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Table", "bbox": {"l": 409.74301, "t": 595.9722899999999, "r": 467.19213999999994, "b": 616.33128, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Access: ALL or NOTHING", "bbox": {"l": 247.7847, "t": 599.80522, "r": 375.65561, "b": 609.0542399999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "User", "bbox": {"l": 175.87869, "t": 609.06352, "r": 198.69092, "b": 618.31255, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No easy way to restrict access to a specific set of rows", "bbox": {"l": 152.39349, "t": 681.3484100000001, "r": 472.28308, "b": 694.232826, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2245788574219, "t": 754.796142578125, "r": 529.10632, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508112072944641, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.928466796875, "t": 754.3477783203125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8825920820236206, "cells": [{"id": 1, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}]}}, {"page_no": 19, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 19, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 19, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 20, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 328.2296447753906, "t": 754.7693481445312, "r": 529.10632, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9491059184074402, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.1834716796875, "t": 754.2889404296875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8711605668067932, "cells": [{"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.52648162841797, "t": 70.3741455078125, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9562826752662659, "cells": [{"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.02708435058594, "t": 96.53556823730469, "r": 539.93591, "b": 143.18263244628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9866766929626465, "cells": [{"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.92579650878906, "t": 154.57025146484375, "r": 542.25873, "b": 225.18753051757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9879173636436462, "cells": [{"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2296447753906, "t": 754.7693481445312, "r": 529.10632, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9491059184074402, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.1834716796875, "t": 754.2889404296875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8711605668067932, "cells": [{"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "section_header", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.52648162841797, "t": 70.3741455078125, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9562826752662659, "cells": [{"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.2 New controls: Row and Column Access Control"}, {"label": "text", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.02708435058594, "t": 96.53556823730469, "r": 539.93591, "b": 143.18263244628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9866766929626465, "cells": [{"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC)."}, {"label": "text", "id": 4, "page_no": 20, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.92579650878906, "t": 154.57025146484375, "r": 542.25873, "b": 225.18753051757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9879173636436462, "cells": [{"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place."}], "body": [{"label": "section_header", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.52648162841797, "t": 70.3741455078125, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9562826752662659, "cells": [{"id": 2, "text": "1.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.920189, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "New controls: Row and Column Access Control", "bbox": {"l": 97.560196, "t": 71.33471999999995, "r": 394.39227, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.2 New controls: Row and Column Access Control"}, {"label": "text", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.02708435058594, "t": 96.53556823730469, "r": 539.93591, "b": 143.18263244628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9866766929626465, "cells": [{"id": 4, "text": "Based on the challenges that are associated with the existing technology available for ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.74811, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "controlling row and column access at a more granular level, IBM delivered new security ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 523.83459, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "support in the IBM i 7.2 release; this support is known as Row and Column Access Control ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 539.93591, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "(RCAC).", "bbox": {"l": 136.80002, "t": 133.48816, "r": 174.23466, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Based on the challenges that are associated with the existing technology available for controlling row and column access at a more granular level, IBM delivered new security support in the IBM i 7.2 release; this support is known as Row and Column Access Control (RCAC)."}, {"label": "text", "id": 4, "page_no": 20, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.92579650878906, "t": 154.57025146484375, "r": 542.25873, "b": 225.18753051757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9879173636436462, "cells": [{"id": 8, "text": "The new DB2 RCAC support provides a method for controlling data access across all ", "bbox": {"l": 136.80002, "t": 155.50775, "r": 515.71027, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "interfaces and all types of users with a data-centric solution. Moving security processing to ", "bbox": {"l": 136.80002, "t": 167.50757, "r": 538.3653, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the database layer makes it easier to build controls that meet your compliance policies. The ", "bbox": {"l": 136.8, "t": 179.50739, "r": 542.25873, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC support provides an additional layer of security that complements object-level ", "bbox": {"l": 136.8, "t": 191.5072, "r": 510.83681999999993, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you ", "bbox": {"l": 136.79999, "t": 203.50702, "r": 536.61536, "b": 212.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "first have a sound object-level security implementation in place.", "bbox": {"l": 136.79999, "t": 215.50684, "r": 415.8204, "b": 224.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The new DB2 RCAC support provides a method for controlling data access across all interfaces and all types of users with a data-centric solution. Moving security processing to the database layer makes it easier to build controls that meet your compliance policies. The RCAC support provides an additional layer of security that complements object-level authorizations to limit data access to a need-to-know basis. Therefore, it is critical that you first have a sound object-level security implementation in place."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 328.2296447753906, "t": 754.7693481445312, "r": 529.10632, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9491059184074402, "cells": [{"id": 0, "text": "Chapter 1. Securing and protecting IBM DB2 data ", "bbox": {"l": 328.67999, "t": 755.538002, "r": 529.10632, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1. Securing and protecting IBM DB2 data"}, {"label": "page_footer", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.1834716796875, "t": 754.2889404296875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8711605668067932, "cells": [{"id": 1, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}]}}, {"page_no": 21, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.46890258789062, "t": 754.154052734375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8681296110153198, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.5233764648438, "r": 328.78973388671875, "b": 764.0779418945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9378317594528198, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46890258789062, "t": 754.154052734375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8681296110153198, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.5233764648438, "r": 328.78973388671875, "b": 764.0779418945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9378317594528198, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46890258789062, "t": 754.154052734375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8681296110153198, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.5233764648438, "r": 328.78973388671875, "b": 764.0779418945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9378317594528198, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 22, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.7032470703125, "t": 754.6690673828125, "r": 257.24335, "b": 764.16552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9463762640953064, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.8427734375, "t": 754.1920166015625, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.870232343673706, "cells": [{"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.07919311523438, "r": 515.13116, "b": 279.40411376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9443839192390442, "cells": [{"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.93650817871094, "t": 316.54962158203125, "r": 547.3324, "b": 351.0145568847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9858477115631104, "cells": [{"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.88510131835938, "t": 362.6448669433594, "r": 547.25745, "b": 408.92035, "coord_origin": "TOPLEFT"}, "confidence": 0.9865830540657043, "cells": [{"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.7690887451172, "t": 420.59063720703125, "r": 547.2655, "b": 442.93973, "coord_origin": "TOPLEFT"}, "confidence": 0.978435754776001, "cells": [{"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8439483642578, "t": 449.8417053222656, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}, "confidence": 0.9163564443588257, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7147674560547, "t": 462.1671447753906, "r": 239.97063000000003, "b": 472.4137878417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9477108716964722, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.14598083496094, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7584443092346191, "cells": [{"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 32.17647933959961, "t": 70.26495361328125, "r": 239.21856689453125, "b": 237.9607696533203, "coord_origin": "TOPLEFT"}, "confidence": 0.6822353005409241, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7032470703125, "t": 754.6690673828125, "r": 257.24335, "b": 764.16552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9463762640953064, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8427734375, "t": 754.1920166015625, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.870232343673706, "cells": [{"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2."}, {"label": "section_header", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.07919311523438, "r": 515.13116, "b": 279.40411376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9443839192390442, "cells": [{"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Roles and separation of duties"}, {"label": "text", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93650817871094, "t": 316.54962158203125, "r": 547.3324, "b": 351.0145568847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9858477115631104, "cells": [{"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}]}, "text": "One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs."}, {"label": "text", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88510131835938, "t": 362.6448669433594, "r": 547.25745, "b": 408.92035, "coord_origin": "TOPLEFT"}, "confidence": 0.9865830540657043, "cells": [{"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}]}, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks."}, {"label": "text", "id": 6, "page_no": 22, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7690887451172, "t": 420.59063720703125, "r": 547.2655, "b": 442.93973, "coord_origin": "TOPLEFT"}, "confidence": 0.978435754776001, "cells": [{"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics:"}, {"label": "list_item", "id": 7, "page_no": 22, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8439483642578, "t": 449.8417053222656, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}, "confidence": 0.9163564443588257, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Roles"}, {"label": "list_item", "id": 8, "page_no": 22, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7147674560547, "t": 462.1671447753906, "r": 239.97063000000003, "b": 472.4137878417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9477108716964722, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Separation of duties"}, {"label": "text", "id": 9, "page_no": 22, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.14598083496094, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7584443092346191, "cells": [{"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "picture", "id": 10, "page_no": 22, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17647933959961, "t": 70.26495361328125, "r": 239.21856689453125, "b": 237.9607696533203, "coord_origin": "TOPLEFT"}, "confidence": 0.6822353005409241, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 2.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2."}, {"label": "section_header", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.07919311523438, "r": 515.13116, "b": 279.40411376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9443839192390442, "cells": [{"id": 3, "text": "Roles and separation of duties", "bbox": {"l": 136.8, "t": 254.88635, "r": 515.13116, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Roles and separation of duties"}, {"label": "text", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93650817871094, "t": 316.54962158203125, "r": 547.3324, "b": 351.0145568847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9858477115631104, "cells": [{"id": 4, "text": "One of the primary objectives of row and column access control (RCAC) is to create data ", "bbox": {"l": 136.8, "t": 317.68872, "r": 532.0885, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "security policies that control and govern user access to data and limit the data access of DB2 ", "bbox": {"l": 136.8, "t": 329.68854, "r": 547.3324, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designers and administrators to only the minimum that is required to do their jobs.", "bbox": {"l": 136.8, "t": 341.68835, "r": 497.04517, "b": 350.90134, "coord_origin": "TOPLEFT"}}]}, "text": "One of the primary objectives of row and column access control (RCAC) is to create data security policies that control and govern user access to data and limit the data access of DB2 designers and administrators to only the minimum that is required to do their jobs."}, {"label": "text", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88510131835938, "t": 362.6448669433594, "r": 547.25745, "b": 408.92035, "coord_origin": "TOPLEFT"}, "confidence": 0.9865830540657043, "cells": [{"id": 7, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, ", "bbox": {"l": 136.8, "t": 363.70792, "r": 547.15588, "b": 372.9209, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "implement effectively data access requirements and also limit the span of control of each role ", "bbox": {"l": 136.8, "t": 375.70772999999997, "r": 547.25745, "b": 384.92071999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "so that each role is given only the authorities that are needed to perform its specific set of ", "bbox": {"l": 136.8, "t": 387.7075500000001, "r": 533.96405, "b": 396.92053, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tasks.", "bbox": {"l": 136.8, "t": 399.70737, "r": 162.73087, "b": 408.92035, "coord_origin": "TOPLEFT"}}]}, "text": "To accomplish these tasks, RCAC engineers devised a set of functional roles that, as a group, implement effectively data access requirements and also limit the span of control of each role so that each role is given only the authorities that are needed to perform its specific set of tasks."}, {"label": "text", "id": 6, "page_no": 22, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7690887451172, "t": 420.59063720703125, "r": 547.2655, "b": 442.93973, "coord_origin": "TOPLEFT"}, "confidence": 0.978435754776001, "cells": [{"id": 11, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers ", "bbox": {"l": 136.8, "t": 421.7269299999999, "r": 547.2655, "b": 430.93991, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the following topics:", "bbox": {"l": 136.8, "t": 433.72675000000004, "r": 223.52769, "b": 442.93973, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes the concepts of roles and separation of duties on DB2 for i and covers the following topics:"}, {"label": "list_item", "id": 7, "page_no": 22, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8439483642578, "t": 449.8417053222656, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}, "confidence": 0.9163564443588257, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 450.85593, "r": 141.78, "b": 459.63070999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Roles", "bbox": {"l": 151.20016, "t": 450.70654, "r": 176.71271, "b": 459.91953, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Roles"}, {"label": "list_item", "id": 8, "page_no": 22, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7147674560547, "t": 462.1671447753906, "r": 239.97063000000003, "b": 472.4137878417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9477108716964722, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 462.85574, "r": 141.78, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Separation of duties", "bbox": {"l": 151.20016, "t": 462.70636, "r": 239.97063000000003, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Separation of duties"}, {"label": "text", "id": 9, "page_no": 22, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.14598083496094, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7584443092346191, "cells": [{"id": 17, "text": "2", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "picture", "id": 10, "page_no": 22, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17647933959961, "t": 70.26495361328125, "r": 239.21856689453125, "b": 237.9607696533203, "coord_origin": "TOPLEFT"}, "confidence": 0.6822353005409241, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7032470703125, "t": 754.6690673828125, "r": 257.24335, "b": 764.16552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9463762640953064, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8427734375, "t": 754.1920166015625, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.870232343673706, "cells": [{"id": 1, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}]}}, {"page_no": 23, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.24457550048828, "t": 754.206787109375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8828381299972534, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.8071517944336, "t": 754.697998046875, "r": 328.72537, "b": 763.9702758789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9468024373054504, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.00420379638672, "t": 73.46255493164062, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9606645107269287, "cells": [{"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.84288024902344, "t": 105.96865844726562, "r": 547.29651, "b": 176.3714599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.987520694732666, "cells": [{"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.82821655273438, "t": 187.98101806640625, "r": 547.25879, "b": 222.3696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.9839559197425842, "cells": [{"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.2572479248047, "t": 234.0032501220703, "r": 547.31238, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9627324938774109, "cells": [{"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.83023071289062, "t": 262.2904968261719, "r": 474.0260009765625, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.941753089427948, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.586669921875, "t": 274.4866943359375, "r": 376.04473876953125, "b": 284.8529357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9312568306922913, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.70936584472656, "t": 286.37677001953125, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}, "confidence": 0.9296406507492065, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.47157287597656, "t": 298.2834167480469, "r": 384.0774841308594, "b": 308.84021, "coord_origin": "TOPLEFT"}, "confidence": 0.9292329549789429, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.6302947998047, "t": 310.25726318359375, "r": 385.5571, "b": 320.94586181640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9514175057411194, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 63.82975387573242, "t": 340.201904296875, "r": 501.05563, "b": 353.6498718261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9617684483528137, "cells": [{"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.88975524902344, "t": 366.2914733886719, "r": 547.22955, "b": 425.1965637207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9872463941574097, "cells": [{"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.7061767578125, "t": 436.642578125, "r": 534.94904, "b": 458.91448974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.97740238904953, "cells": [{"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "section_header", "bbox": {"l": 63.88609313964844, "t": 478.24237060546875, "r": 413.2720031738281, "b": 491.4810485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9616555571556091, "cells": [{"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.62423706054688, "t": 504.5226135253906, "r": 543.15112, "b": 562.88058, "coord_origin": "TOPLEFT"}, "confidence": 0.985893726348877, "cells": [{"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 135.72520446777344, "t": 574.528564453125, "r": 546.20782, "b": 621.1437377929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9876169562339783, "cells": [{"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 135.83445739746094, "t": 632.4659423828125, "r": 534.9491, "b": 654.96728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.979432225227356, "cells": [{"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.24457550048828, "t": 754.206787109375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8828381299972534, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.8071517944336, "t": 754.697998046875, "r": 328.72537, "b": 763.9702758789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9468024373054504, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.00420379638672, "t": 73.46255493164062, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9606645107269287, "cells": [{"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "2.1 Roles"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84288024902344, "t": 105.96865844726562, "r": 547.29651, "b": 176.3714599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.987520694732666, "cells": [{"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization\u2019s requirements for limiting access to data or separation of duties."}, {"label": "text", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82821655273438, "t": 187.98101806640625, "r": 547.25879, "b": 222.3696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.9839559197425842, "cells": [{"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}]}, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service."}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.2572479248047, "t": 234.0032501220703, "r": 547.31238, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9627324938774109, "cells": [{"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Roles are divided among the following DB2 functions and their corresponding function usage IDs:"}, {"label": "list_item", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.83023071289062, "t": 262.2904968261719, "r": 474.0260009765625, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.941753089427948, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA"}, {"label": "list_item", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.586669921875, "t": 274.4866943359375, "r": 376.04473876953125, "b": 284.8529357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9312568306922913, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Toolbox application server access: QIBM_DB_ZDA"}, {"label": "list_item", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70936584472656, "t": 286.37677001953125, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}, "confidence": 0.9296406507492065, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Administrator function: QIBM_DB_SQLADM"}, {"label": "list_item", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.47157287597656, "t": 298.2834167480469, "r": 384.0774841308594, "b": 308.84021, "coord_origin": "TOPLEFT"}, "confidence": 0.9292329549789429, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Information function: QIBM_DB_SYSMON"}, {"label": "list_item", "id": 10, "page_no": 23, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6302947998047, "t": 310.25726318359375, "r": 385.5571, "b": 320.94586181640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9514175057411194, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security Administrator function: QIBM_DB_SECADM"}, {"label": "section_header", "id": 11, "page_no": 23, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 63.82975387573242, "t": 340.201904296875, "r": 501.05563, "b": 353.6498718261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9617684483528137, "cells": [{"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA"}, {"label": "text", "id": 12, "page_no": 23, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.88975524902344, "t": 366.2914733886719, "r": 547.22955, "b": 425.1965637207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9872463941574097, "cells": [{"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 13, "page_no": 23, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7061767578125, "t": 436.642578125, "r": 534.94904, "b": 458.91448974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.97740238904953, "cells": [{"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}, {"label": "section_header", "id": 14, "page_no": 23, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 63.88609313964844, "t": 478.24237060546875, "r": 413.2720031738281, "b": 491.4810485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9616555571556091, "cells": [{"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA"}, {"label": "text", "id": 15, "page_no": 23, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.62423706054688, "t": 504.5226135253906, "r": 543.15112, "b": 562.88058, "coord_origin": "TOPLEFT"}, "confidence": 0.985893726348877, "cells": [{"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console."}, {"label": "text", "id": 16, "page_no": 23, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.72520446777344, "t": 574.528564453125, "r": 546.20782, "b": 621.1437377929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9876169562339783, "cells": [{"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}]}, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 17, "page_no": 23, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.83445739746094, "t": 632.4659423828125, "r": 534.9491, "b": 654.96728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.979432225227356, "cells": [{"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}], "body": [{"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.00420379638672, "t": 73.46255493164062, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9606645107269287, "cells": [{"id": 2, "text": "2.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 88.423279, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Roles", "bbox": {"l": 93.147934, "t": 74.34069999999997, "r": 139.42577, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "2.1 Roles"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84288024902344, "t": 105.96865844726562, "r": 547.29651, "b": 176.3714599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.987520694732666, "cells": [{"id": 4, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.29651, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "not permitted or access to the data is permitted. A full access capability can also be ", "bbox": {"l": 136.8, "t": 118.60852, "r": 508.29009999999994, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security ", "bbox": {"l": 136.79999, "t": 130.60834, "r": 531.44403, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have ", "bbox": {"l": 136.79996, "t": 142.60815000000002, "r": 546.6059, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "access to all the data, with no exceptions. Unfortunately, this might not meet the ", "bbox": {"l": 136.79996, "t": 154.60797000000002, "r": 491.55511, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "organization\u2019s requirements for limiting access to data or separation of duties.", "bbox": {"l": 136.79996, "t": 166.60779000000002, "r": 478.54343000000006, "b": 175.82079999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, data access roles are defined in a binary way, where access to the data is either not permitted or access to the data is permitted. A full access capability can also be instantiated by the *ALLOBJ special authority, either explicitly or implicitly, for the security officer. If you hold the role of security officer, or have all *ALLOBJ special authority, you have access to all the data, with no exceptions. Unfortunately, this might not meet the organization\u2019s requirements for limiting access to data or separation of duties."}, {"label": "text", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82821655273438, "t": 187.98101806640625, "r": 547.25879, "b": 222.3696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.9839559197425842, "cells": [{"id": 10, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i ", "bbox": {"l": 136.79996, "t": 188.62738000000002, "r": 529.83362, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "provides ", "bbox": {"l": 136.79996, "t": 200.62720000000002, "r": 177.20967, "b": 209.84020999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "function usage IDs", "bbox": {"l": 176.75999, "t": 200.10497999999995, "r": 259.01556, "b": 210.16272000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ". A function usage ID implements granular security controls rather ", "bbox": {"l": 258.84, "t": 200.62872000000004, "r": 547.25879, "b": 209.84173999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "than granting users powerful special authorities, such as all object, job control, or service.", "bbox": {"l": 136.80011, "t": 212.62854000000004, "r": 531.03082, "b": 221.84154999999998, "coord_origin": "TOPLEFT"}}]}, "text": "To assist with defining roles and the separation of duties with appropriate authority, IBM i provides function usage IDs . A function usage ID implements granular security controls rather than granting users powerful special authorities, such as all object, job control, or service."}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.2572479248047, "t": 234.0032501220703, "r": 547.31238, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9627324938774109, "cells": [{"id": 15, "text": "Roles are divided among the following DB2 functions and their corresponding function usage ", "bbox": {"l": 136.80011, "t": 234.64813000000004, "r": 547.31238, "b": 243.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IDs:", "bbox": {"l": 136.80011, "t": 246.64795000000004, "r": 154.56874, "b": 255.86095999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Roles are divided among the following DB2 functions and their corresponding function usage IDs:"}, {"label": "list_item", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.83023071289062, "t": 262.2904968261719, "r": 474.0260009765625, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.941753089427948, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80011, "t": 263.77716, "r": 141.78011, "b": 272.55193999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 151.20027, "t": 263.62775, "r": 473.7419100000001, "b": 272.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DDM and IBM DRDAfi application server access: QIBM_DB_DDMDRDA"}, {"label": "list_item", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.586669921875, "t": 274.4866943359375, "r": 376.04473876953125, "b": 284.8529357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9312568306922913, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 275.77698, "r": 141.78012, "b": 284.55176, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 151.20029, "t": 275.62756, "r": 375.98358, "b": 284.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Toolbox application server access: QIBM_DB_ZDA"}, {"label": "list_item", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70936584472656, "t": 286.37677001953125, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}, "confidence": 0.9296406507492065, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 287.77679, "r": 141.78012, "b": 296.55157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 151.20029, "t": 287.62741, "r": 391.564, "b": 296.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Administrator function: QIBM_DB_SQLADM"}, {"label": "list_item", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.47157287597656, "t": 298.2834167480469, "r": 384.0774841308594, "b": 308.84021, "coord_origin": "TOPLEFT"}, "confidence": 0.9292329549789429, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 299.77661, "r": 141.78012, "b": 308.55139, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 151.20029, "t": 299.62723, "r": 383.82812, "b": 308.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database Information function: QIBM_DB_SYSMON"}, {"label": "list_item", "id": 10, "page_no": 23, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6302947998047, "t": 310.25726318359375, "r": 385.5571, "b": 320.94586181640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9514175057411194, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80013, "t": 311.77643, "r": 141.78012, "b": 320.55121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 151.20029, "t": 311.6270400000001, "r": 385.5571, "b": 320.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security Administrator function: QIBM_DB_SECADM"}, {"label": "section_header", "id": 11, "page_no": 23, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 63.82975387573242, "t": 340.201904296875, "r": 501.05563, "b": 353.6498718261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9617684483528137, "cells": [{"id": 27, "text": "2.1.1", "bbox": {"l": 64.800003, "t": 341.45474, "r": 93.853226, "b": 353.44272, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA", "bbox": {"l": 97.484901, "t": 341.45474, "r": 501.05563, "b": 353.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA"}, {"label": "text", "id": 12, "page_no": 23, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.88975524902344, "t": 366.2914733886719, "r": 547.22955, "b": 425.1965637207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9872463941574097, "cells": [{"id": 29, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA ", "bbox": {"l": 136.8, "t": 367.60873, "r": 516.65253, "b": 376.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "application server (QRWTSRVR). This function usage ID provides an easy alternative (rather ", "bbox": {"l": 136.8, "t": 379.60855, "r": 547.22955, "b": 388.82153, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "than writing an exit program) to control access to DDM and DRDA from the server side. The ", "bbox": {"l": 136.79999, "t": 391.60837, "r": 544.2276, "b": 400.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "function usage IDs ship with the default authority of *ALLOWED. The security officer can ", "bbox": {"l": 136.79999, "t": 403.60818000000006, "r": 529.2121, "b": 412.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "easily deny access to specific users or groups.", "bbox": {"l": 136.79999, "t": 415.608, "r": 342.43817, "b": 424.82098, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_DDMDRDA function usage ID restricts access to the DDM and DRDA application server (QRWTSRVR). This function usage ID provides an easy alternative (rather than writing an exit program) to control access to DDM and DRDA from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 13, "page_no": 23, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7061767578125, "t": 436.642578125, "r": 534.94904, "b": 458.91448974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.97740238904953, "cells": [{"id": 34, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.79999, "t": 437.62756, "r": 534.94904, "b": 446.84055, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change, and it is auditable.", "bbox": {"l": 136.79999, "t": 449.62738, "r": 255.25826, "b": 458.84036, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}, {"label": "section_header", "id": 14, "page_no": 23, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 63.88609313964844, "t": 478.24237060546875, "r": 413.2720031738281, "b": 491.4810485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9616555571556091, "cells": [{"id": 36, "text": "2.1.2", "bbox": {"l": 64.800003, "t": 479.45474, "r": 93.831696, "b": 491.44272, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Toolbox application server access: QIBM_DB_ZDA", "bbox": {"l": 97.46067, "t": 479.45474, "r": 413.01059, "b": 491.44272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA"}, {"label": "text", "id": 15, "page_no": 23, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.62423706054688, "t": 504.5226135253906, "r": 543.15112, "b": 562.88058, "coord_origin": "TOPLEFT"}, "confidence": 0.985893726348877, "cells": [{"id": 38, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles ", "bbox": {"l": 136.8, "t": 505.60861, "r": 543.15112, "b": 514.82159, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ", "bbox": {"l": 136.8, "t": 517.66818, "r": 539.04858, "b": 526.88116, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC ", "bbox": {"l": 136.80005, "t": 529.66797, "r": 529.04962, "b": 538.88098, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web ", "bbox": {"l": 136.80005, "t": 541.66779, "r": 529.66431, "b": 550.88078, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "console.", "bbox": {"l": 136.80005, "t": 553.66759, "r": 173.81541, "b": 562.88058, "coord_origin": "TOPLEFT"}}]}, "text": "The QIBM_DB_ZDA function usage ID restricts access to the optimized server that handles DB2 requests from clients (QZDASOINIT and QZDASSINIT). Server access is used by the ODBC, OLE DB, and .NET providers that ship with IBM i Access for Windows and JDBC Toolbox, Run SQL scripts, and other parts of System i Navigator and Navigator for i Web console."}, {"label": "text", "id": 16, "page_no": 23, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.72520446777344, "t": 574.528564453125, "r": 546.20782, "b": 621.1437377929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9876169562339783, "cells": [{"id": 43, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to ", "bbox": {"l": 136.80005, "t": 575.6274, "r": 538.42694, "b": 584.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "control access to these functions from the server side. The function usage IDs ship with the ", "bbox": {"l": 136.80005, "t": 587.6272, "r": 542.29028, "b": 596.84019, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "default authority of *ALLOWED. The security officer can easily deny access to specific users ", "bbox": {"l": 136.80005, "t": 599.627, "r": 546.20782, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "or groups.", "bbox": {"l": 136.80005, "t": 611.6268, "r": 181.49457, "b": 620.8398, "coord_origin": "TOPLEFT"}}]}, "text": "This function usage ID provides an easy alternative (rather than writing an exit program) to control access to these functions from the server side. The function usage IDs ship with the default authority of *ALLOWED. The security officer can easily deny access to specific users or groups."}, {"label": "text", "id": 17, "page_no": 23, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.83445739746094, "t": 632.4659423828125, "r": 534.9491, "b": 654.96728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.979432225227356, "cells": [{"id": 47, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to ", "bbox": {"l": 136.80005, "t": 633.64636, "r": 534.9491, "b": 642.85936, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "change, and it is auditable.", "bbox": {"l": 136.80005, "t": 645.64616, "r": 255.25832000000003, "b": 654.85916, "coord_origin": "TOPLEFT"}}]}, "text": "This is an alternative to a User Exit Program approach. No coding is required, it is easy to change, and it is auditable."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.24457550048828, "t": 754.206787109375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8828381299972534, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.8071517944336, "t": 754.697998046875, "r": 328.72537, "b": 763.9702758789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9468024373054504, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 24, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 360.4371643066406, "t": 754.883544921875, "r": 529.1568, "b": 764.1151123046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9521506428718567, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 540.8857421875, "t": 754.3031616210938, "r": 547.2386474609375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8864408731460571, "cells": [{"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.0216293334961, "t": 70.4687728881836, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9597232341766357, "cells": [{"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.77142333984375, "t": 96.74668884277344, "r": 547.01843, "b": 155.3083038330078, "coord_origin": "TOPLEFT"}, "confidence": 0.9876309037208557, "cells": [{"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.78330993652344, "t": 166.6936798095703, "r": 547.32452, "b": 200.90953063964844, "coord_origin": "TOPLEFT"}, "confidence": 0.9852434396743774, "cells": [{"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.86964416503906, "t": 212.85244750976562, "r": 541.29852, "b": 259.014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9871625304222107, "cells": [{"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.13877868652344, "t": 274.4320068359375, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9447333812713623, "cells": [{"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.1097412109375, "t": 289.3403625488281, "r": 532.06573, "b": 311.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9686275124549866, "cells": [{"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.01083374023438, "t": 331.09979248046875, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9618946313858032, "cells": [{"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.8494873046875, "t": 357.3560485839844, "r": 547.19281, "b": 391.70135, "coord_origin": "TOPLEFT"}, "confidence": 0.9852011203765869, "cells": [{"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.19979858398438, "t": 403.33209228515625, "r": 547.29944, "b": 437.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9853191375732422, "cells": [{"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 136.31793212890625, "t": 453.60760498046875, "r": 392.7384, "b": 465.75146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9519172310829163, "cells": [{"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.06344604492188, "t": 468.69525146484375, "r": 532.06573, "b": 490.76129, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "section_header", "bbox": {"l": 64.14019775390625, "t": 510.3857727050781, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}, "confidence": 0.960561215877533, "cells": [{"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.73634338378906, "t": 536.6364135742188, "r": 538.33221, "b": 582.74103, "coord_origin": "TOPLEFT"}, "confidence": 0.9864837527275085, "cells": [{"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.88818359375, "t": 594.3782348632812, "r": 547.28961, "b": 652.959716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9881628155708313, "cells": [{"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 136.17408752441406, "t": 668.4557495117188, "r": 392.72162, "b": 680.6693725585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9459793567657471, "cells": [{"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 136.1047821044922, "t": 683.893798828125, "r": 460.46808000000004, "b": 706.3756103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9628692269325256, "cells": [{"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 360.4371643066406, "t": 754.883544921875, "r": 529.1568, "b": 764.1151123046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9521506428718567, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8857421875, "t": 754.3031616210938, "r": 547.2386474609375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8864408731460571, "cells": [{"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}, {"label": "section_header", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.0216293334961, "t": 70.4687728881836, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9597232341766357, "cells": [{"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM"}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77142333984375, "t": 96.74668884277344, "r": 547.01843, "b": 155.3083038330078, "coord_origin": "TOPLEFT"}, "confidence": 0.9876309037208557, "cells": [{"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78330993652344, "t": 166.6936798095703, "r": 547.32452, "b": 200.90953063964844, "coord_origin": "TOPLEFT"}, "confidence": 0.9852434396743774, "cells": [{"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86964416503906, "t": 212.85244750976562, "r": 541.29852, "b": 259.014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9871625304222107, "cells": [{"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM."}, {"label": "section_header", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.13877868652344, "t": 274.4320068359375, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9447333812713623, "cells": [{"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SQLADM function usage"}, {"label": "text", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.1097412109375, "t": 289.3403625488281, "r": 532.06573, "b": 311.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9686275124549866, "cells": [{"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions."}, {"label": "section_header", "id": 8, "page_no": 24, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.01083374023438, "t": 331.09979248046875, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9618946313858032, "cells": [{"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON"}, {"label": "text", "id": 9, "page_no": 24, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8494873046875, "t": 357.3560485839844, "r": 547.19281, "b": 391.70135, "coord_origin": "TOPLEFT"}, "confidence": 0.9852011203765869, "cells": [{"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties."}, {"label": "text", "id": 10, "page_no": 24, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.19979858398438, "t": 403.33209228515625, "r": 547.29944, "b": 437.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9853191375732422, "cells": [{"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 11, "page_no": 24, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 136.31793212890625, "t": 453.60760498046875, "r": 392.7384, "b": 465.75146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9519172310829163, "cells": [{"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SYSMON function usage"}, {"label": "text", "id": 12, "page_no": 24, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.06344604492188, "t": 468.69525146484375, "r": 532.06573, "b": 490.76129, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions."}, {"label": "section_header", "id": 13, "page_no": 24, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.14019775390625, "t": 510.3857727050781, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}, "confidence": 0.960561215877533, "cells": [{"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM"}, {"label": "text", "id": 14, "page_no": 24, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.73634338378906, "t": 536.6364135742188, "r": 538.33221, "b": 582.74103, "coord_origin": "TOPLEFT"}, "confidence": 0.9864837527275085, "cells": [{"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}]}, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 15, "page_no": 24, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.88818359375, "t": 594.3782348632812, "r": 547.28961, "b": 652.959716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9881628155708313, "cells": [{"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}]}, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 16, "page_no": 24, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 136.17408752441406, "t": 668.4557495117188, "r": 392.72162, "b": 680.6693725585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9459793567657471, "cells": [{"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SECADM function usage"}, {"label": "text", "id": 17, "page_no": 24, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.1047821044922, "t": 683.893798828125, "r": 460.46808000000004, "b": 706.3756103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9628692269325256, "cells": [{"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}]}, "text": "Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group."}], "body": [{"label": "section_header", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.0216293334961, "t": 70.4687728881836, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9597232341766357, "cells": [{"id": 2, "text": "2.1.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.963196, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database Administrator function: QIBM_DB_SQLADM", "bbox": {"l": 97.608582, "t": 71.33471999999995, "r": 433.47052, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM"}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77142333984375, "t": 96.74668884277344, "r": 547.01843, "b": 155.3083038330078, "coord_origin": "TOPLEFT"}, "confidence": 0.9876309037208557, "cells": [{"id": 4, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 536.12036, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "analyzing and viewing SQL performance data. Some of the more common database ", "bbox": {"l": 136.79999, "t": 109.48852999999997, "r": 511.064, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "administrator functions include displaying statements from the SQL Plan Cache, analyzing ", "bbox": {"l": 136.79999, "t": 121.48834000000011, "r": 537.42419, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details ", "bbox": {"l": 136.79999, "t": 133.48816, "r": 547.01843, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of a job other than your own.", "bbox": {"l": 136.79999, "t": 145.48798, "r": 263.15955, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function (QIBM_DB_SQLADM) is needed whenever a user is analyzing and viewing SQL performance data. Some of the more common database administrator functions include displaying statements from the SQL Plan Cache, analyzing SQL Performance Monitors and SQL Plan Cache Snapshots, and displaying the SQL details of a job other than your own."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78330993652344, "t": 166.6936798095703, "r": 547.32452, "b": 200.90953063964844, "coord_origin": "TOPLEFT"}, "confidence": 0.9852434396743774, "cells": [{"id": 9, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply ", "bbox": {"l": 136.79999, "t": 167.50757, "r": 547.32452, "b": 176.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "having the Database Administrator authorization does not carry with it all the needed object ", "bbox": {"l": 136.79999, "t": 179.50739, "r": 542.60645, "b": 188.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "authorities for every administration task. The default behavior is to deny authorization.", "bbox": {"l": 136.79999, "t": 191.5072, "r": 514.72595, "b": 200.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Administrator function provides an alternative to granting *JOBCTL, but simply having the Database Administrator authorization does not carry with it all the needed object authorities for every administration task. The default behavior is to deny authorization."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86964416503906, "t": 212.85244750976562, "r": 541.29852, "b": 259.014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9871625304222107, "cells": [{"id": 12, "text": "To perform database administrator tasks that are not related to performance analysis, you ", "bbox": {"l": 136.79999, "t": 213.52679, "r": 534.5368, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "must refer to the details of the task to determine its specific authorization requirements. For ", "bbox": {"l": 136.79999, "t": 225.52661, "r": 541.29852, "b": 234.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "example, to allow a database administrator to reorganize a table, the DBA must have ", "bbox": {"l": 136.79999, "t": 237.52643, "r": 513.49414, "b": 246.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "additional object authorities to the table that are not covered by QIBM_DB_SQLADM.", "bbox": {"l": 136.79999, "t": 249.52625, "r": 512.87775, "b": 258.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "To perform database administrator tasks that are not related to performance analysis, you must refer to the details of the task to determine its specific authorization requirements. For example, to allow a database administrator to reorganize a table, the DBA must have additional object authorities to the table that are not covered by QIBM_DB_SQLADM."}, {"label": "section_header", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.13877868652344, "t": 274.4320068359375, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9447333812713623, "cells": [{"id": 16, "text": "Granting QIBM_DB_SQLADM function usage", "bbox": {"l": 136.8, "t": 275.36401, "r": 392.7084, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SQLADM function usage"}, {"label": "text", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.1097412109375, "t": 289.3403625488281, "r": 532.06573, "b": 311.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9686275124549866, "cells": [{"id": 17, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 532.06573, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "perform Database Administration functions.", "bbox": {"l": 136.8, "t": 302.50854, "r": 328.11267, "b": 311.72153, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Administration functions."}, {"label": "section_header", "id": 8, "page_no": 24, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.01083374023438, "t": 331.09979248046875, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9618946313858032, "cells": [{"id": 19, "text": "2.1.4", "bbox": {"l": 64.800003, "t": 332.33475, "r": 93.95005, "b": 344.32272, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 97.593788, "t": 332.33475, "r": 419.47638, "b": 344.32272, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON"}, {"label": "text", "id": 9, "page_no": 24, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8494873046875, "t": 357.3560485839844, "r": 547.19281, "b": 391.70135, "coord_origin": "TOPLEFT"}, "confidence": 0.9852011203765869, "cells": [{"id": 21, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than ", "bbox": {"l": 136.8, "t": 358.48874, "r": 547.19281, "b": 367.70172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Database Administrator function. Its primary use allows a user to examine high-level ", "bbox": {"l": 136.8, "t": 370.48856, "r": 510.57599000000005, "b": 379.70154, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database properties.", "bbox": {"l": 136.8, "t": 382.48837000000003, "r": 228.09435000000002, "b": 391.70135, "coord_origin": "TOPLEFT"}}]}, "text": "The Database Information function (QIBM_DB_SYSMON) provides much less authority than Database Administrator function. Its primary use allows a user to examine high-level database properties."}, {"label": "text", "id": 10, "page_no": 24, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.19979858398438, "t": 403.33209228515625, "r": 547.29944, "b": 437.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9853191375732422, "cells": [{"id": 24, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the ", "bbox": {"l": 136.8, "t": 404.50793, "r": 539.83136, "b": 413.72092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this ", "bbox": {"l": 136.8, "t": 416.50775, "r": 547.29944, "b": 425.72073, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "authority, the default behavior is to deny authorization.", "bbox": {"l": 136.8, "t": 428.50757, "r": 375.51733, "b": 437.72055, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a user that does not have *JOBCTL or QIBM_DB_SQLADM can still view the SQL Plan Cache properties if granted authority to QIBM_DB_SYSMON. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 11, "page_no": 24, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 136.31793212890625, "t": 453.60760498046875, "r": 392.7384, "b": 465.75146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9519172310829163, "cells": [{"id": 27, "text": "Granting QIBM_DB_SYSMON function usage", "bbox": {"l": 136.8, "t": 454.40398999999996, "r": 392.7384, "b": 465.504, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SYSMON function usage"}, {"label": "text", "id": 12, "page_no": 24, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.06344604492188, "t": 468.69525146484375, "r": 532.06573, "b": 490.76129, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 28, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can ", "bbox": {"l": 136.8, "t": 469.48874, "r": 532.06573, "b": 478.70172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "perform Database Information functions.", "bbox": {"l": 136.8, "t": 481.54831, "r": 314.88379, "b": 490.76129, "coord_origin": "TOPLEFT"}}]}, "text": "Only the security administrator (*SECADM) is allowed to change the list of users that can perform Database Information functions."}, {"label": "section_header", "id": 13, "page_no": 24, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.14019775390625, "t": 510.3857727050781, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}, "confidence": 0.960561215877533, "cells": [{"id": 30, "text": "2.1.5", "bbox": {"l": 64.800003, "t": 511.37463, "r": 93.974159, "b": 523.36261, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Security Administrator function: QIBM_DB_SECADM", "bbox": {"l": 97.620941, "t": 511.37463, "r": 427.05014, "b": 523.36261, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM"}, {"label": "text", "id": 14, "page_no": 24, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.73634338378906, "t": 536.6364135742188, "r": 538.33221, "b": 582.74103, "coord_origin": "TOPLEFT"}, "confidence": 0.9864837527275085, "cells": [{"id": 32, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes ", "bbox": {"l": 136.8, "t": 537.52863, "r": 516.96027, "b": 546.74162, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "authorities, changes ownership, or changes the primary group without giving access to the ", "bbox": {"l": 136.8, "t": 549.52843, "r": 538.33221, "b": 558.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "object or, in the case of a database table, to the data that is in the table or allowing other ", "bbox": {"l": 136.8, "t": 561.52823, "r": 528.31073, "b": 570.74123, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "operations on the table. ", "bbox": {"l": 136.8, "t": 573.52803, "r": 243.62096, "b": 582.74103, "coord_origin": "TOPLEFT"}}]}, "text": "The Security Administrator function (QIBM_DB_SECADM) grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 15, "page_no": 24, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.88818359375, "t": 594.3782348632812, "r": 547.28961, "b": 652.959716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9881628155708313, "cells": [{"id": 36, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC ", "bbox": {"l": 136.8, "t": 595.54759, "r": 542.62207, "b": 604.76059, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing ", "bbox": {"l": 136.8, "t": 607.54739, "r": 547.22571, "b": 616.76039, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "all the data in a protected database. These users are excluded from data access unless they ", "bbox": {"l": 136.8, "t": 619.5472, "r": 547.27551, "b": 628.76019, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "are specifically authorized by RCAC. Without granting this authority, the default behavior is to ", "bbox": {"l": 136.8, "t": 631.547, "r": 547.28961, "b": 640.75999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "deny authorization.", "bbox": {"l": 136.8, "t": 643.5468, "r": 221.19012, "b": 652.7598, "coord_origin": "TOPLEFT"}}]}, "text": "Only those users with the QIBM_DB_SECADM function can administer and manage RCAC rules. RCAC can be used to prevent even users with *ALLOBJ authority from freely accessing all the data in a protected database. These users are excluded from data access unless they are specifically authorized by RCAC. Without granting this authority, the default behavior is to deny authorization."}, {"label": "section_header", "id": 16, "page_no": 24, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 136.17408752441406, "t": 668.4557495117188, "r": 392.72162, "b": 680.6693725585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9459793567657471, "cells": [{"id": 41, "text": "Granting QIBM_DB_SECADM function usage", "bbox": {"l": 136.8, "t": 669.3839, "r": 392.72162, "b": 680.4839, "coord_origin": "TOPLEFT"}}]}, "text": "Granting QIBM_DB_SECADM function usage"}, {"label": "text", "id": 17, "page_no": 24, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.1047821044922, "t": 683.893798828125, "r": 460.46808000000004, "b": 706.3756103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9628692269325256, "cells": [{"id": 42, "text": "Only QSECOFR or a user with *SECADM special authority can grant the ", "bbox": {"l": 136.8, "t": 684.52872, "r": 460.46808000000004, "b": 693.741722, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "QIBM_DB_SECADM function usage to a user or group.", "bbox": {"l": 136.8, "t": 696.528526, "r": 381.91754, "b": 705.741531, "coord_origin": "TOPLEFT"}}]}, "text": "Only QSECOFR or a user with *SECADM special authority can grant the QIBM_DB_SECADM function usage to a user or group."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 360.4371643066406, "t": 754.883544921875, "r": 529.1568, "b": 764.1151123046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9521506428718567, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 360.89999, "t": 755.538002, "r": 529.1568, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 540.8857421875, "t": 754.3031616210938, "r": 547.2386474609375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8864408731460571, "cells": [{"id": 1, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}]}}, {"page_no": 25, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 25, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 25, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 25, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 25, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 25, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 25, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 25, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 25, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 25, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 25, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 25, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 25, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 25, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 26, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 27, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.58246612548828, "t": 754.4149780273438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9042928218841553, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.4140625, "t": 754.5875244140625, "r": 334.42142, "b": 764.0072631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.946682333946228, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"2": {"label": "table", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "ched", "ched", "ched", "ched", "ched", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl"], "num_rows": 22, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800568, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801422, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.58246612548828, "t": 754.4149780273438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9042928218841553, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.4140625, "t": 754.5875244140625, "r": 334.42142, "b": 764.0072631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.946682333946228, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "table", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "ched", "ched", "ched", "ched", "ched", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl"], "num_rows": 22, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800568, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801422, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}]}], "body": [{"label": "table", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "table", "bbox": {"l": 64.12763214111328, "t": 70.52249908447266, "r": 547.230224609375, "b": 569.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9888067245483398, "cells": [{"id": 2, "text": "START PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "X", "bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "X", "bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "END PLAN CACHE EVENT MONITOR procedure", "bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "X", "bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "X", "bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "X", "bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "X", "bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Work with RCAC row permissions (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "X", "bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Work with RCAC column masks (Create, modify, or delete)", "bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "X", "bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Change Object Owner (", "bbox": {"l": 70.800598, "t": 270.55688, "r": 165.18898, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHGOBJOWN", "bbox": {"l": 165.18091, "t": 270.69183, "r": 205.62061, "b": 278.66583, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ") CL command", "bbox": {"l": 205.62061, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "X", "bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Change Object Primary Group (", "bbox": {"l": 70.800598, "t": 289.51715, "r": 197.55119, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHGOBJPGP", "bbox": {"l": 197.5809, "t": 289.6521599999999, "r": 238.0206, "b": 297.62616, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": ") CL command ", "bbox": {"l": 238.0206, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "X", "bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Grant Object Authority (", "bbox": {"l": 70.800598, "t": 308.53687, "r": 164.9973, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GRTOBJAUT", "bbox": {"l": 165.00089, "t": 308.67188, "r": 205.44058, "b": 316.64587, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ") CL command ", "bbox": {"l": 205.44058, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "X", "bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Revoke Object Authority (", "bbox": {"l": 70.800568, "t": 327.55658, "r": 172.35025, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RVKOBJAUT", "bbox": {"l": 172.38086, "t": 327.6915900000001, "r": 212.82056, "b": 335.66559000000007, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ") CL command", "bbox": {"l": 212.82056, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "X", "bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Edit Object Authority (", "bbox": {"l": 70.800537, "t": 346.51688, "r": 158.12213, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "EDTOBJAUT", "bbox": {"l": 158.10052, "t": 346.65189, "r": 198.60052, "b": 354.62589, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") CL command", "bbox": {"l": 198.54022, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "X", "bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Display Object Authority (", "bbox": {"l": 70.800537, "t": 365.53659, "r": 171.80392, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "DSPOBJAUT", "bbox": {"l": 171.78055, "t": 365.6716, "r": 212.22025, "b": 373.6456, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": ") CL command", "bbox": {"l": 212.22025, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "X", "bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Work with Objects (", "bbox": {"l": 70.800537, "t": 384.5563, "r": 148.52722, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WRKOBJ", "bbox": {"l": 148.56055, "t": 384.69131, "r": 175.50024, "b": 392.66531, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ") CL command ", "bbox": {"l": 175.50024, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Work with Libraries (", "bbox": {"l": 70.800537, "t": 403.5166, "r": 152.58801, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WRKLIB", "bbox": {"l": 152.58084, "t": 403.65161, "r": 179.58084, "b": 411.62561, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ") CL command", "bbox": {"l": 179.58084, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "X", "bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Add Authorization List Entry (", "bbox": {"l": 70.801422, "t": 422.53632, "r": 187.26411, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ADDAUTLE", "bbox": {"l": 187.32172, "t": 422.67133000000007, "r": 223.26141, "b": 430.64532, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": ") CL command ", "bbox": {"l": 223.26141, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Change Authorization List Entry (", "bbox": {"l": 70.801392, "t": 441.55603, "r": 202.70538, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CHGAUTLE", "bbox": {"l": 202.8017, "t": 441.69104, "r": 238.74139000000002, "b": 449.66504000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": ") CL command", "bbox": {"l": 238.74139000000002, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Remove Authorization List Entry (", "bbox": {"l": 70.801392, "t": 460.51633, "r": 204.3821, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "RMVAUTLE", "bbox": {"l": 204.42169, "t": 460.65134, "r": 240.36139000000003, "b": 468.62534, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Retrieve Authorization List Entry (", "bbox": {"l": 70.801392, "t": 479.53604, "r": 204.3857, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "RTVAUTLE", "bbox": {"l": 204.42169, "t": 479.67105, "r": 240.36139000000003, "b": 487.64505, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": ") CL command", "bbox": {"l": 240.36139000000003, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Display Authorization List (", "bbox": {"l": 70.801392, "t": 498.55576, "r": 176.69899, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DSPAUTL", "bbox": {"l": 176.76109, "t": 498.69077, "r": 208.26109, "b": 506.66476, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": ") CL command ", "bbox": {"l": 208.26109, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Display Authorization List Objects (", "bbox": {"l": 70.801392, "t": 517.51605, "r": 209.70918, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "DSPAUTLOBJ", "bbox": {"l": 209.76138, "t": 517.6510599999999, "r": 254.70108, "b": 525.6250600000001, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": ") CL command", "bbox": {"l": 254.70108, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "X", "bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Edit Authorization List (", "bbox": {"l": 70.801392, "t": 536.53575, "r": 163.09819, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "EDTAUTL", "bbox": {"l": 163.08109, "t": 536.67076, "r": 194.52078, "b": 544.64476, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": ") CL command", "bbox": {"l": 194.52078, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Work with Authorization Lists (", "bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 191.40945, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "WRKAUTL", "bbox": {"l": 191.40137, "t": 555.69046, "r": 222.84106000000003, "b": 563.66446, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": ") CL command", "bbox": {"l": 222.84106000000003, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "User action", "bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "No Authority", "bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "ched", "ched", "ched", "ched", "ched", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl", "rhed", "ecel", "fcel", "ecel", "ecel", "ecel", "nl"], "num_rows": 22, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800606, "t": 175.5177, "r": 278.58273, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "START PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 175.5177, "r": 435.00357, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 175.5177, "r": 486.0038799999999, "b": 183.84265000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 194.53741000000002, "r": 269.44949, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END PLAN CACHE EVENT MONITOR procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 194.53741000000002, "r": 435.00357, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 194.53741000000002, "r": 486.0038799999999, "b": 202.86237000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 213.55713000000003, "r": 293.97632, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "END ALL PLAN CACHE EVENT MONITORS procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00058000000007, "t": 213.55713000000003, "r": 435.00357, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00088999999997, "t": 213.55713000000003, "r": 486.0038799999999, "b": 221.88207999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 232.51746000000003, "r": 311.22574, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC row permissions (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 232.51746000000003, "r": 460.5033, "b": 240.84240999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 251.53716999999995, "r": 303.58829, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with RCAC column masks (Create, modify, or delete)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 251.53716999999995, "r": 460.5033, "b": 259.86212, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 270.55688, "r": 264.57959, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Owner ( CHGOBJOWN ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 270.55688, "r": 460.5033, "b": 278.88184, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 289.51715, "r": 299.39697, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Object Primary Group ( CHGOBJPGP ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50031, "t": 289.51715, "r": 460.5033, "b": 297.84216, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800598, "t": 308.53687, "r": 266.84399, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grant Object Authority ( GRTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50027, "t": 308.53687, "r": 460.50327000000004, "b": 316.86188, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800568, "t": 327.55658, "r": 271.78857, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Revoke Object Authority ( RVKOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 327.55658, "r": 460.50323, "b": 335.88159, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 346.51688, "r": 257.35434, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Object Authority ( EDTOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 346.51688, "r": 460.50323, "b": 354.84189, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 365.53659, "r": 271.18826, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Object Authority ( DSPOBJAUT ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 365.53659, "r": 460.50323, "b": 373.8616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 384.5563, "r": 237.02424999999997, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Objects ( WRKOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50024, "t": 384.5563, "r": 460.50323, "b": 392.8813200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800537, "t": 403.5166, "r": 238.51825, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Libraries ( WRKLIB ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50113, "t": 403.5166, "r": 460.50411999999994, "b": 411.84160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801422, "t": 422.53632, "r": 284.72513, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Add Authorization List Entry ( ADDAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 422.53632, "r": 460.50409, "b": 430.86133, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 441.55603, "r": 297.70038, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Change Authorization List Entry ( CHGAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 441.55603, "r": 460.50409, "b": 449.88104, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 460.51633, "r": 299.32037, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Remove Authorization List Entry ( RMVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 460.51633, "r": 460.50409, "b": 468.84134, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 479.53604, "r": 299.32037, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Retrieve Authorization List Entry ( RTVAUTLE ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 479.53604, "r": 460.50409, "b": 487.86105, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 498.55576, "r": 269.7851, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List ( DSPAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 498.55576, "r": 460.50409, "b": 506.88077, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 517.51605, "r": 313.63849, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Display Authorization List Objects ( DSPAUTLOBJ ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.5011, "t": 517.51605, "r": 460.50409, "b": 525.84106, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801392, "t": 536.53575, "r": 253.48878000000002, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Edit Authorization List ( EDTAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 536.53575, "r": 460.50406000000004, "b": 544.86076, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 555.5554500000001, "r": 281.80908, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Work with Authorization Lists ( WRKAUTL ) CL command", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 454.50107, "t": 555.5554500000001, "r": 460.50406000000004, "b": 563.88046, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.801361, "t": 77.53577000000007, "r": 119.78657, "b": 85.86072000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 424.93805, "t": 124.52936, "r": 433.26294000000007, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 78.62401999999997, "r": 458.46295, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 78.62401999999997, "r": 484.26324000000005, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 78.56273999999996, "r": 509.46326, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39874, "t": 109.86841000000004, "r": 534.72351, "b": 163.97997999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": true, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.58246612548828, "t": 754.4149780273438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9042928218841553, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.4140625, "t": 754.5875244140625, "r": 334.42142, "b": 764.0072631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.946682333946228, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 28, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.7396240234375, "t": 754.7451171875, "r": 257.24335, "b": 764.0840454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9487502574920654, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.8259887695312, "t": 754.357666015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9122608304023743, "cells": [{"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 252.77349853515625, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9356535077095032, "cells": [{"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.7134552001953, "t": 316.6616516113281, "r": 536.15228, "b": 338.90152, "coord_origin": "TOPLEFT"}, "confidence": 0.9694458246231079, "cells": [{"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.12974548339844, "t": 350.6626892089844, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}, "confidence": 0.9007801413536072, "cells": [{"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.65553283691406, "t": 367.98822021484375, "r": 397.10867, "b": 378.2244567871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9492710828781128, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.7020721435547, "t": 380.12860107421875, "r": 348.45898, "b": 390.13079833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9349842071533203, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.77047729492188, "t": 391.8711853027344, "r": 327.03601, "b": 402.288330078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9309741854667664, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8464813232422, "t": 404.0476989746094, "r": 454.0878000000001, "b": 414.33953857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9496814012527466, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.77333068847656, "t": 415.80474853515625, "r": 385.73236, "b": 426.15533447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9369764924049377, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.60595703125, "t": 428.0014953613281, "r": 270.36362, "b": 437.9747009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9415654540061951, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 500.39999, "t": 93.10602569580078, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6890690326690674, "cells": [{"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.1435661315918, "t": 70.39622497558594, "r": 239.34097290039062, "b": 238.1275177001953, "coord_origin": "TOPLEFT"}, "confidence": 0.6961746215820312, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7396240234375, "t": 754.7451171875, "r": 257.24335, "b": 764.0840454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9487502574920654, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.8259887695312, "t": 754.357666015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9122608304023743, "cells": [{"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}, {"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3."}, {"label": "section_header", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 252.77349853515625, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9356535077095032, "cells": [{"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control"}, {"label": "text", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7134552001953, "t": 316.6616516113281, "r": 536.15228, "b": 338.90152, "coord_origin": "TOPLEFT"}, "confidence": 0.9694458246231079, "cells": [{"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example."}, {"label": "text", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.12974548339844, "t": 350.6626892089844, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}, "confidence": 0.9007801413536072, "cells": [{"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.65553283691406, "t": 367.98822021484375, "r": 397.10867, "b": 378.2244567871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9492710828781128, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explanation of RCAC and the concept of access control"}, {"label": "list_item", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7020721435547, "t": 380.12860107421875, "r": 348.45898, "b": 390.13079833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9349842071533203, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Special registers and built-in global variables"}, {"label": "list_item", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77047729492188, "t": 391.8711853027344, "r": 327.03601, "b": 402.288330078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9309741854667664, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH VERIFY_GROUP_FOR_USER function"}, {"label": "list_item", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8464813232422, "t": 404.0476989746094, "r": 454.0878000000001, "b": 414.33953857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9496814012527466, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "list_item", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.77333068847656, "t": 415.80474853515625, "r": 385.73236, "b": 426.15533447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9369764924049377, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "list_item", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.60595703125, "t": 428.0014953613281, "r": 270.36362, "b": 437.9747009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9415654540061951, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human resources example"}, {"label": "text", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "text", "bbox": {"l": 500.39999, "t": 93.10602569580078, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6890690326690674, "cells": [{"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "picture", "id": 13, "page_no": 28, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.1435661315918, "t": 70.39622497558594, "r": 239.34097290039062, "b": 238.1275177001953, "coord_origin": "TOPLEFT"}, "confidence": 0.6961746215820312, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 3.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3."}, {"label": "section_header", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 252.77349853515625, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9356535077095032, "cells": [{"id": 3, "text": "Row and Column Access Control", "bbox": {"l": 136.8, "t": 254.88635, "r": 546.02917, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control"}, {"label": "text", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7134552001953, "t": 316.6616516113281, "r": 536.15228, "b": 338.90152, "coord_origin": "TOPLEFT"}, "confidence": 0.9694458246231079, "cells": [{"id": 4, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, ", "bbox": {"l": 136.8, "t": 317.68872, "r": 536.15228, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and then illustrates RCAC with a simple example.", "bbox": {"l": 136.80002, "t": 329.68854, "r": 354.78754, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes what Row and Column Access Control (RCAC) is, its components, and then illustrates RCAC with a simple example."}, {"label": "text", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.12974548339844, "t": 350.6626892089844, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}, "confidence": 0.9007801413536072, "cells": [{"id": 6, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 351.7081, "r": 347.41214, "b": 360.92108, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.65553283691406, "t": 367.98822021484375, "r": 397.10867, "b": 378.2244567871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9492710828781128, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 368.83728, "r": 141.78001, "b": 377.61206, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 151.20018, "t": 368.6879, "r": 397.10867, "b": 377.90088, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explanation of RCAC and the concept of access control"}, {"label": "list_item", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7020721435547, "t": 380.12860107421875, "r": 348.45898, "b": 390.13079833984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9349842071533203, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 380.8371, "r": 141.78001, "b": 389.61188, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Special registers and built-in global variables", "bbox": {"l": 151.20018, "t": 380.6877099999999, "r": 348.45898, "b": 389.9006999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Special registers and built-in global variables"}, {"label": "list_item", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77047729492188, "t": 391.8711853027344, "r": 327.03601, "b": 402.288330078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9309741854667664, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 392.83691, "r": 141.78001, "b": 401.61169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 151.20018, "t": 392.68753000000004, "r": 327.03601, "b": 401.90051, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH VERIFY_GROUP_FOR_USER function"}, {"label": "list_item", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8464813232422, "t": 404.0476989746094, "r": 454.0878000000001, "b": 414.33953857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9496814012527466, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 404.83673, "r": 141.78001, "b": 413.61151, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Establishing and controlling accessibility by using the RCAC rule text", "bbox": {"l": 151.20018, "t": 404.68735, "r": 454.0878000000001, "b": 413.90033, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "list_item", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.77333068847656, "t": 415.80474853515625, "r": 385.73236, "b": 426.15533447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9369764924049377, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 416.83655, "r": 141.78001, "b": 425.61133, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 151.20018, "t": 416.68716, "r": 385.73236, "b": 425.90015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "list_item", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.60595703125, "t": 428.0014953613281, "r": 270.36362, "b": 437.9747009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9415654540061951, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 428.83636000000007, "r": 141.78001, "b": 437.61115, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Human resources example", "bbox": {"l": 151.20018, "t": 428.68698, "r": 270.36362, "b": 437.89996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human resources example"}, {"label": "text", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "text", "bbox": {"l": 500.39999, "t": 93.10602569580078, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6890690326690674, "cells": [{"id": 19, "text": "3", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "picture", "id": 13, "page_no": 28, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.1435661315918, "t": 70.39622497558594, "r": 239.34097290039062, "b": 238.1275177001953, "coord_origin": "TOPLEFT"}, "confidence": 0.6961746215820312, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.7396240234375, "t": 754.7451171875, "r": 257.24335, "b": 764.0840454101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9487502574920654, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.8259887695312, "t": 754.357666015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9122608304023743, "cells": [{"id": 1, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}]}}, {"page_no": 29, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.47321319580078, "t": 754.3320922851562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086033701896667, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28377532958984, "t": 754.7196655273438, "r": 334.42142, "b": 763.9346313476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9480336904525757, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.3137435913086, "t": 73.53276062011719, "r": 518.77576, "b": 89.27471923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9650559425354004, "cells": [{"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.03993225097656, "t": 106.02466583251953, "r": 547.24268, "b": 152.26783752441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9864612221717834, "cells": [{"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.07485961914062, "t": 163.92002868652344, "r": 505.92376999999993, "b": 186.08607482910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9790142178535461, "cells": [{"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7504425048828, "t": 192.93507385253906, "r": 227.34537000000003, "b": 202.84515380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.943821907043457, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5780487060547, "t": 205.08816528320312, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9294455051422119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.8238983154297, "t": 226.61538696289062, "r": 547.20178, "b": 284.83905, "coord_origin": "TOPLEFT"}, "confidence": 0.9863597750663757, "cells": [{"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.0462646484375, "t": 296.7554016113281, "r": 547.2973, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9848619699478149, "cells": [{"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.23114013671875, "t": 354.7263488769531, "r": 535.67212, "b": 401.10906982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870187044143677, "cells": [{"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.24093627929688, "t": 501.6220397949219, "r": 383.47995, "b": 514.7472534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9663240909576416, "cells": [{"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.77207946777344, "t": 528.0364990234375, "r": 423.53543, "b": 538.3961791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9584894776344299, "cells": [{"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 136.47561645507812, "t": 553.8549194335938, "r": 229.26001, "b": 565.8992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526190161705017, "cells": [{"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9830322265625, "t": 568.7094116210938, "r": 544.57147, "b": 602.930908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9861118793487549, "cells": [{"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 141.94046020507812, "t": 418.39910888671875, "r": 541.24963, "b": 477.48040771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9858124256134033, "cells": [{"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.47321319580078, "t": 754.3320922851562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086033701896667, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28377532958984, "t": 754.7196655273438, "r": 334.42142, "b": 763.9346313476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9480336904525757, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.3137435913086, "t": 73.53276062011719, "r": 518.77576, "b": 89.27471923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9650559425354004, "cells": [{"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "3.1 Explanation of RCAC and the concept of access control"}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.03993225097656, "t": 106.02466583251953, "r": 547.24268, "b": 152.26783752441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9864612221717834, "cells": [{"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called \u201cIBM Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.07485961914062, "t": 163.92002868652344, "r": 505.92376999999993, "b": 186.08607482910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9790142178535461, "cells": [{"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms:"}, {"label": "list_item", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7504425048828, "t": 192.93507385253906, "r": 227.34537000000003, "b": 202.84515380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.943821907043457, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Row permissions"}, {"label": "list_item", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5780487060547, "t": 205.08816528320312, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9294455051422119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Column masks"}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8238983154297, "t": 226.61538696289062, "r": 547.20178, "b": 284.83905, "coord_origin": "TOPLEFT"}, "confidence": 0.9863597750663757, "cells": [{"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}]}, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0462646484375, "t": 296.7554016113281, "r": 547.2973, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9848619699478149, "cells": [{"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.23114013671875, "t": 354.7263488769531, "r": 535.67212, "b": 401.10906982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870187044143677, "cells": [{"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic."}, {"label": "section_header", "id": 10, "page_no": 29, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.24093627929688, "t": 501.6220397949219, "r": 383.47995, "b": 514.7472534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9663240909576416, "cells": [{"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.1 Row permission and column mask definitions"}, {"label": "text", "id": 11, "page_no": 29, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.77207946777344, "t": 528.0364990234375, "r": 423.53543, "b": 538.3961791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9584894776344299, "cells": [{"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections define row permission and column masks."}, {"label": "section_header", "id": 12, "page_no": 29, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.47561645507812, "t": 553.8549194335938, "r": 229.26001, "b": 565.8992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526190161705017, "cells": [{"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}]}, "text": "Row permission"}, {"label": "text", "id": 13, "page_no": 29, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9830322265625, "t": 568.7094116210938, "r": 544.57147, "b": 602.930908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9861118793487549, "cells": [{"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}]}, "text": "A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees."}, {"label": "text", "id": 14, "page_no": 29, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.94046020507812, "t": 418.39910888671875, "r": 541.24963, "b": 477.48040771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9858124256134033, "cells": [{"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}]}, "text": "Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility."}], "body": [{"label": "section_header", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.3137435913086, "t": 73.53276062011719, "r": 518.77576, "b": 89.27471923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9650559425354004, "cells": [{"id": 2, "text": "3.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.198265, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Explanation of RCAC and the concept of access control", "bbox": {"l": 91.677902, "t": 74.34069999999997, "r": 518.77576, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "3.1 Explanation of RCAC and the concept of access control"}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.03993225097656, "t": 106.02466583251953, "r": 547.24268, "b": 152.26783752441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9864612221717834, "cells": [{"id": 4, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24268, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "easy to set up a rich and robust security policy that is based on roles and responsibilities. ", "bbox": {"l": 136.8, "t": 118.60852, "r": 532.82855, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "RCAC functionality is made available through the optional, no charge feature called \u201cIBM ", "bbox": {"l": 136.80099, "t": 130.60834, "r": 530.06171, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2.", "bbox": {"l": 136.80099, "t": 142.60815000000002, "r": 435.24844, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC limits data access to those users who have a business \u201cneed to know\u201d. RCAC makes it easy to set up a rich and robust security policy that is based on roles and responsibilities. RCAC functionality is made available through the optional, no charge feature called \u201cIBM Advanced Data Security for i\u201d, also known as option 47 of IBM i 7.2."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.07485961914062, "t": 163.92002868652344, "r": 505.92376999999993, "b": 186.08607482910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9790142178535461, "cells": [{"id": 8, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the ", "bbox": {"l": 136.80099, "t": 164.62775, "r": 505.92376999999993, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shortcomings of traditional control methods and mechanisms:", "bbox": {"l": 136.80099, "t": 176.62756000000002, "r": 408.77774, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In DB2 for i, RCAC is implemented using two different approaches that address the shortcomings of traditional control methods and mechanisms:"}, {"label": "list_item", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7504425048828, "t": 192.93507385253906, "r": 227.34537000000003, "b": 202.84515380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.943821907043457, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 193.75676999999996, "r": 141.78099, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Row permissions", "bbox": {"l": 151.20116, "t": 193.60735999999997, "r": 227.34537000000003, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Row permissions"}, {"label": "list_item", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5780487060547, "t": 205.08816528320312, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9294455051422119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 205.75658999999996, "r": 141.78099, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column masks", "bbox": {"l": 151.20116, "t": 205.60717999999997, "r": 217.25092, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Column masks"}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8238983154297, "t": 226.61538696289062, "r": 547.20178, "b": 284.83905, "coord_origin": "TOPLEFT"}, "confidence": 0.9863597750663757, "cells": [{"id": 14, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. ", "bbox": {"l": 136.80099, "t": 227.62676999999996, "r": 539.90802, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Users with *ALLOBJ authority can no longer freely access all of the data in the database ", "bbox": {"l": 136.80099, "t": 239.62658999999996, "r": 529.76575, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "unless they have the appropriate permission to do so. The ability to manage row permissions ", "bbox": {"l": 136.80099, "t": 251.6264, "r": 547.20178, "b": 260.83942, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "and column masks rests with the database security administrator. The RCAC definitions, ", "bbox": {"l": 136.80099, "t": 263.62622, "r": 529.6911, "b": 272.83923000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "enablement, and activation are controlled by SQL statements.", "bbox": {"l": 136.80099, "t": 275.62604, "r": 409.41107, "b": 284.83905, "coord_origin": "TOPLEFT"}}]}, "text": "Another benefit of RCAC is that no database user is automatically exempt from the control. Users with *ALLOBJ authority can no longer freely access all of the data in the database unless they have the appropriate permission to do so. The ability to manage row permissions and column masks rests with the database security administrator. The RCAC definitions, enablement, and activation are controlled by SQL statements."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0462646484375, "t": 296.7554016113281, "r": 547.2973, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9848619699478149, "cells": [{"id": 19, "text": "Row permissions and column masks require virtually no application changes. RCAC is based ", "bbox": {"l": 136.80099, "t": 297.64563, "r": 547.2973, "b": 306.85861, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "on specific rules that are transparent to existing applications and SQL interfaces. ", "bbox": {"l": 136.80101, "t": 309.64545000000004, "r": 495.0034800000001, "b": 318.85843, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enforcement of your security policy does not depend on how applications or tools access the ", "bbox": {"l": 136.80101, "t": 321.64526, "r": 547.2865, "b": 330.85825, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data.", "bbox": {"l": 136.80101, "t": 333.64508, "r": 158.99387, "b": 342.8580600000001, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks require virtually no application changes. RCAC is based on specific rules that are transparent to existing applications and SQL interfaces. Enforcement of your security policy does not depend on how applications or tools access the data."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.23114013671875, "t": 354.7263488769531, "r": 535.67212, "b": 401.10906982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870187044143677, "cells": [{"id": 23, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or ", "bbox": {"l": 136.80101, "t": 355.60489, "r": 529.88434, "b": 364.81787, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "business units can share a single database table without being aware of one another. The ", "bbox": {"l": 136.80096, "t": 367.60470999999995, "r": 535.67212, "b": 376.81769, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC row permission ensures each user sees only the rows they are entitled to view ", "bbox": {"l": 136.80096, "t": 379.60452, "r": 515.33978, "b": 388.81750000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "because the enforcement is handled by DB2 and not the application logic.", "bbox": {"l": 136.80096, "t": 391.60434, "r": 462.38034, "b": 400.81732, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC also facilitates multi-tenancy, which means that several independent customers or business units can share a single database table without being aware of one another. The RCAC row permission ensures each user sees only the rows they are entitled to view because the enforcement is handled by DB2 and not the application logic."}, {"label": "section_header", "id": 10, "page_no": 29, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.24093627929688, "t": 501.6220397949219, "r": 383.47995, "b": 514.7472534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9663240909576416, "cells": [{"id": 27, "text": "3.1.1", "bbox": {"l": 64.800003, "t": 502.49472, "r": 93.984444, "b": 514.4827, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Row permission and column mask definitions", "bbox": {"l": 97.632515, "t": 502.49472, "r": 383.47995, "b": 514.4827, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.1 Row permission and column mask definitions"}, {"label": "text", "id": 11, "page_no": 29, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.77207946777344, "t": 528.0364990234375, "r": 423.53543, "b": 538.3961791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9584894776344299, "cells": [{"id": 29, "text": "The following sections define row permission and column masks.", "bbox": {"l": 136.8, "t": 528.6486199999999, "r": 423.53543, "b": 537.86162, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections define row permission and column masks."}, {"label": "section_header", "id": 12, "page_no": 29, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.47561645507812, "t": 553.8549194335938, "r": 229.26001, "b": 565.8992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526190161705017, "cells": [{"id": 30, "text": "Row permission", "bbox": {"l": 136.8, "t": 554.4839, "r": 229.26001, "b": 565.58389, "coord_origin": "TOPLEFT"}}]}, "text": "Row permission"}, {"label": "text", "id": 13, "page_no": 29, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9830322265625, "t": 568.7094116210938, "r": 544.57147, "b": 602.930908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9861118793487549, "cells": [{"id": 31, "text": "A row permission is a database object that manifests a row access control rule for a specific ", "bbox": {"l": 136.8, "t": 569.6287199999999, "r": 544.57147, "b": 578.84172, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table. It is essentially a search condition that describes which rows you can access. For ", "bbox": {"l": 136.8, "t": 581.62852, "r": 524.09955, "b": 590.84152, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "example, a manager can see only the rows that represent his or her employees.", "bbox": {"l": 136.8, "t": 593.62833, "r": 488.96762, "b": 602.84132, "coord_origin": "TOPLEFT"}}]}, "text": "A row permission is a database object that manifests a row access control rule for a specific table. It is essentially a search condition that describes which rows you can access. For example, a manager can see only the rows that represent his or her employees."}, {"label": "text", "id": 14, "page_no": 29, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.94046020507812, "t": 418.39910888671875, "r": 541.24963, "b": 477.48040771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9858124256134033, "cells": [{"id": 34, "text": "Label-based access control (LBAC):", "bbox": {"l": 142.8, "t": 419.62871999999993, "r": 312.3212, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " RCAC and LBAC are not the same thing. LBAC is a ", "bbox": {"l": 312.36005, "t": 419.62871999999993, "r": 541.24963, "b": 428.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "security model that is primarily intended for government applications. LBAC requires that ", "bbox": {"l": 142.80002, "t": 431.62854, "r": 536.27075, "b": 440.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data and users be classified with a fixed set of rules that are implemented. RCAC is a ", "bbox": {"l": 142.80002, "t": 443.62836, "r": 522.34973, "b": 452.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "general-purpose security model that is primarily intended for commercial customers. You ", "bbox": {"l": 142.80002, "t": 455.62817, "r": 536.03772, "b": 464.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can use RCAC to create your own security rules, which in turn allows for more flexibility.", "bbox": {"l": 142.80002, "t": 467.62799, "r": 528.96118, "b": 476.84097, "coord_origin": "TOPLEFT"}}]}, "text": "Label-based access control (LBAC): RCAC and LBAC are not the same thing. LBAC is a security model that is primarily intended for government applications. LBAC requires that data and users be classified with a fixed set of rules that are implemented. RCAC is a general-purpose security model that is primarily intended for commercial customers. You can use RCAC to create your own security rules, which in turn allows for more flexibility."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.47321319580078, "t": 754.3320922851562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086033701896667, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28377532958984, "t": 754.7196655273438, "r": 334.42142, "b": 763.9346313476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9480336904525757, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 30, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 31, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.44506072998047, "t": 754.4765014648438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9057300090789795, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31855010986328, "t": 754.713134765625, "r": 334.42142, "b": 763.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9489884376525879, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.0411376953125, "t": 70.60277557373047, "r": 546.56934, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.975629985332489, "cells": [{"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.94520568847656, "t": 416.65887451171875, "r": 311.8898620605469, "b": 426.3029479980469, "coord_origin": "TOPLEFT"}, "confidence": 0.9420653581619263, "cells": [{"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.21709442138672, "t": 445.58026123046875, "r": 286.79703, "b": 459.303955078125, "coord_origin": "TOPLEFT"}, "confidence": 0.967232346534729, "cells": [{"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.47596740722656, "t": 471.9873046875, "r": 547.1828, "b": 506.3340759277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9810652136802673, "cells": [{"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.03172302246094, "t": 517.8567504882812, "r": 547.22864, "b": 623.89934, "coord_origin": "TOPLEFT"}, "confidence": 0.9877449870109558, "cells": [{"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 135.58670043945312, "t": 119.31904602050781, "r": 545.5314331054688, "b": 414.1254577636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9763185381889343, "cells": [{"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 142.643798828125, "t": 641.9248657226562, "r": 531.85156, "b": 663.9739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9614552855491638, "cells": [{"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.44506072998047, "t": 754.4765014648438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9057300090789795, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31855010986328, "t": 754.713134765625, "r": 334.42142, "b": 763.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9489884376525879, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0411376953125, "t": 70.60277557373047, "r": 546.56934, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.975629985332489, "cells": [{"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules."}, {"label": "caption", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94520568847656, "t": 416.65887451171875, "r": 311.8898620605469, "b": 426.3029479980469, "coord_origin": "TOPLEFT"}, "confidence": 0.9420653581619263, "cells": [{"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-2 CREATE MASK SQL statement"}, {"label": "section_header", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21709442138672, "t": 445.58026123046875, "r": 286.79703, "b": 459.303955078125, "coord_origin": "TOPLEFT"}, "confidence": 0.967232346534729, "cells": [{"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.2 Enabling and activating RCAC"}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.47596740722656, "t": 471.9873046875, "r": 547.1828, "b": 506.3340759277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9810652136802673, "cells": [{"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}]}, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.03172302246094, "t": 517.8567504882812, "r": 547.22864, "b": 623.89934, "coord_origin": "TOPLEFT"}, "confidence": 0.9877449870109558, "cells": [{"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}]}, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table."}, {"label": "picture", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.58670043945312, "t": 119.31904602050781, "r": 545.5314331054688, "b": 414.1254577636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9763185381889343, "cells": [{"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 142.643798828125, "t": 641.9248657226562, "r": 531.85156, "b": 663.9739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9614552855491638, "cells": [{"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}], "body": [{"label": "text", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0411376953125, "t": 70.60277557373047, "r": 546.56934, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.975629985332489, "cells": [{"id": 2, "text": "Column masks replace the need to create and use views to implement access control. The ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 539.91992, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "SQL", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 156.83156, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " CREATE MASK", "bbox": {"l": 156.77977, "t": 83.65790000000004, "r": 216.71904000000004, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " statement that is shown in Figure 3-2 is used to define and initially enable ", "bbox": {"l": 216.7798, "t": 83.50847999999996, "r": 546.56934, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "or disable the column value access rules.", "bbox": {"l": 136.79898, "t": 95.50829999999996, "r": 319.09384, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Column masks replace the need to create and use views to implement access control. The SQL CREATE MASK statement that is shown in Figure 3-2 is used to define and initially enable or disable the column value access rules."}, {"label": "caption", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94520568847656, "t": 416.65887451171875, "r": 311.8898620605469, "b": 426.3029479980469, "coord_origin": "TOPLEFT"}, "confidence": 0.9420653581619263, "cells": [{"id": 7, "text": "Figure 3-2 CREATE MASK SQL statement", "bbox": {"l": 136.8, "t": 417.67801, "r": 311.0202, "b": 426.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-2 CREATE MASK SQL statement"}, {"label": "section_header", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21709442138672, "t": 445.58026123046875, "r": 286.79703, "b": 459.303955078125, "coord_origin": "TOPLEFT"}, "confidence": 0.967232346534729, "cells": [{"id": 8, "text": "3.1.2", "bbox": {"l": 64.800003, "t": 446.51474, "r": 94.02639, "b": 458.50272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Enabling and activating RCAC", "bbox": {"l": 97.679688, "t": 446.51474, "r": 286.79703, "b": 458.50272, "coord_origin": "TOPLEFT"}}]}, "text": "3.1.2 Enabling and activating RCAC"}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.47596740722656, "t": 471.9873046875, "r": 547.1828, "b": 506.3340759277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9810652136802673, "cells": [{"id": 10, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL", "bbox": {"l": 136.8, "t": 472.66873, "r": 542.90002, "b": 481.88171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALTER PERMISSION", "bbox": {"l": 136.80002, "t": 484.81793, "r": 216.71905999999998, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " statement and the SQL", "bbox": {"l": 216.77982, "t": 484.66855, "r": 322.30304, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " ALTER MASK", "bbox": {"l": 322.31995, "t": 484.81793, "r": 377.27921, "b": 493.64252, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " statement, as shown in Figure 3-3 on ", "bbox": {"l": 377.28021, "t": 484.66855, "r": 547.1828, "b": 493.88153, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "page 17.", "bbox": {"l": 136.8, "t": 496.66837, "r": 175.72868, "b": 505.88135, "coord_origin": "TOPLEFT"}}]}, "text": "You can enable, disable, or regenerate row permissions and column masks by using the SQL ALTER PERMISSION statement and the SQL ALTER MASK statement, as shown in Figure 3-3 on page 17."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.03172302246094, "t": 517.8567504882812, "r": 547.22864, "b": 623.89934, "coord_origin": "TOPLEFT"}, "confidence": 0.9877449870109558, "cells": [{"id": 16, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row ", "bbox": {"l": 136.8, "t": 518.68793, "r": 512.64056, "b": 527.9009100000001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "permission or column mask. Regenerating causes the row permission or column mask to be ", "bbox": {"l": 136.8, "t": 530.6877099999999, "r": 546.4837, "b": 539.9007300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "regenerated. The row permission definition in the catalog is used and existing dependencies ", "bbox": {"l": 136.8, "t": 542.68753, "r": 546.5564, "b": 551.90053, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and authorizations, if any, are retained. The row permission definition is reevaluated as ", "bbox": {"l": 136.8, "t": 554.68733, "r": 521.92834, "b": 563.9003299999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "though the row permission were being created. Any user-defined functions (UDFs) that are ", "bbox": {"l": 136.8, "t": 566.68713, "r": 539.95581, "b": 575.90013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "referenced in the row permission must be resolved to the same secure UDFs as were ", "bbox": {"l": 136.8, "t": 578.68694, "r": 516.60944, "b": 587.89993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "resolved during the original row permission or column mask creation. The regenerate option ", "bbox": {"l": 136.8, "t": 590.68674, "r": 545.22186, "b": 599.89973, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "can be used to ensure that the RCAC logic is intact and still valid before any user attempts to ", "bbox": {"l": 136.8, "t": 602.68654, "r": 547.22864, "b": 611.89954, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "access the table.", "bbox": {"l": 136.79999, "t": 614.68634, "r": 211.46214, "b": 623.89934, "coord_origin": "TOPLEFT"}}]}, "text": "Enabling and disabling effectively turns on or off the logic that is contained in the row permission or column mask. Regenerating causes the row permission or column mask to be regenerated. The row permission definition in the catalog is used and existing dependencies and authorizations, if any, are retained. The row permission definition is reevaluated as though the row permission were being created. Any user-defined functions (UDFs) that are referenced in the row permission must be resolved to the same secure UDFs as were resolved during the original row permission or column mask creation. The regenerate option can be used to ensure that the RCAC logic is intact and still valid before any user attempts to access the table."}, {"label": "picture", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.58670043945312, "t": 119.31904602050781, "r": 545.5314331054688, "b": 414.1254577636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9763185381889343, "cells": [{"id": 25, "text": "CREATE MASK ", "bbox": {"l": 148.0576, "t": 157.17620999999997, "r": 217.21564000000004, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "<", "bbox": {"l": 219.86591, "t": 157.17620999999997, "r": 225.57451999999998, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "mask name", "bbox": {"l": 225.58026000000004, "t": 157.17620999999997, "r": 279.14044, "b": 166.98859000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "> ", "bbox": {"l": 279.14389, "t": 157.17620999999997, "r": 287.45465, "b": 166.97717, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Names the column mask for column access control", "bbox": {"l": 343.7215, "t": 133.51855, "r": 532.37885, "b": 141.37694999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ON", "bbox": {"l": 148.0576, "t": 198.48461999999995, "r": 163.34479, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "<", "bbox": {"l": 168.47108, "t": 198.48461999999995, "r": 174.1797, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "table name", "bbox": {"l": 174.18544, "t": 198.48461999999995, "r": 226.64977000000002, "b": 208.29700000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ">", "bbox": {"l": 226.64746, "t": 198.48461999999995, "r": 232.35608, "b": 208.28557999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Identifies the table on which the column", "bbox": {"l": 315.11551, "t": 178.26935000000003, "r": 459.8544299999999, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "mask is created", "bbox": {"l": 486.66354, "t": 178.26935000000003, "r": 524.99982, "b": 186.12775, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS ", "bbox": {"l": 148.0576, "t": 239.79303000000004, "r": 163.00664, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "<", "bbox": {"l": 165.57895, "t": 239.79303000000004, "r": 171.28757, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "correlation name", "bbox": {"l": 171.2933, "t": 239.79303000000004, "r": 250.94238000000004, "b": 249.60541, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ">", "bbox": {"l": 250.95038, "t": 239.79303000000004, "r": 256.659, "b": 249.59398999999996, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 238.9704, "t": 219.57763999999997, "r": 409.48642, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "be used within case-expression", "bbox": {"l": 471.4333500000001, "t": 219.57763999999997, "r": 532.17932, "b": 227.43604000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN ", "bbox": {"l": 148.0576, "t": 281.10144, "r": 215.81255, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "<", "bbox": {"l": 218.48804, "t": 281.10144, "r": 224.19666, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "column name", "bbox": {"l": 224.20238999999998, "t": 281.10144, "r": 287.21161, "b": 290.91385, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "> ", "bbox": {"l": 287.23224, "t": 281.10144, "r": 295.543, "b": 290.9023700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Identifies the column to which", "bbox": {"l": 352.91269, "t": 260.88604999999995, "r": 461.25995, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "the mask applies", "bbox": {"l": 461.25995, "t": 260.88604999999995, "r": 530.51782, "b": 268.74445000000003, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "RETURN", "bbox": {"l": 148.0576, "t": 322.4097300000001, "r": 187.1972, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "<", "bbox": {"l": 194.49576, "t": 322.4097300000001, "r": 200.20438, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "logic to test: user and/or group and/or column values", "bbox": {"l": 200.21011, "t": 322.4097300000001, "r": 446.92813000000007, "b": 332.22214, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ">", "bbox": {"l": 446.99347, "t": 322.4097300000001, "r": 452.70208999999994, "b": 332.21066, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "<", "bbox": {"l": 194.4951, "t": 336.17923, "r": 200.20372, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "logic to mask or return column value", "bbox": {"l": 200.2094, "t": 336.17923, "r": 369.65121, "b": 345.99164, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ">", "bbox": {"l": 369.677, "t": 336.17923, "r": 375.38562, "b": 345.98016000000007, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Specifies a CASE expression", "bbox": {"l": 366.5788, "t": 298.7520400000001, "r": 464.75512999999995, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "t", "bbox": {"l": 450.4165300000001, "t": 298.7520400000001, "r": 473.7167400000001, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "o be evaluated", "bbox": {"l": 473.60275000000007, "t": 298.7520400000001, "r": 528.61884, "b": 306.61044, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ENABLE", "bbox": {"l": 148.0576, "t": 377.48764000000006, "r": 185.03297, "b": 387.30005, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Specifies that the column mask is to be", "bbox": {"l": 316.1138, "t": 364.15692, "r": 456.32498000000004, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "initially enabled", "bbox": {"l": 484.35620000000006, "t": 364.15692, "r": 522.08081, "b": 372.01532000000003, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Si", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 348.48367, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "f", "bbox": {"l": 335.17587, "t": 384.81112999999993, "r": 351.27777, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "it", "bbox": {"l": 337.96262, "t": 384.81112999999993, "r": 366.59012, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "h", "bbox": {"l": 353.27679, "t": 384.81112999999993, "r": 371.40073, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "t", "bbox": {"l": 362.39529, "t": 384.81112999999993, "r": 378.77292, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "h l", "bbox": {"l": 370.62317, "t": 384.81112999999993, "r": 392.91788, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "k i tb", "bbox": {"l": 427.19424, "t": 384.81112999999993, "r": 462.85345, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "ii", "bbox": {"l": 462.58322, "t": 384.81112999999993, "r": 478.50681, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 471.59326, "t": 384.81112999999993, "r": 481.57663, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "il", "bbox": {"l": 474.65756, "t": 384.81112999999993, "r": 490.16849, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "ldi", "bbox": {"l": 483.2549399999999, "t": 384.81112999999993, "r": 498.37952000000007, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "bl d", "bbox": {"l": 506.36566000000005, "t": 384.81112999999993, "r": 522.67157, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "DISABLE", "bbox": {"l": 148.0576, "t": 391.25702, "r": 187.47119, "b": 401.06943, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": ";", "bbox": {"l": 187.43794, "t": 391.25702, "r": 190.51006, "b": 401.05795000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "Specifies that the column mask is to be i", "bbox": {"l": 315.56299, "t": 384.81112999999993, "r": 464.69116, "b": 392.66953, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "nitially disabled", "bbox": {"l": 464.68619, "t": 384.81112999999993, "r": 522.69604, "b": 392.66953, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 142.643798828125, "t": 641.9248657226562, "r": 531.85156, "b": 663.9739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9614552855491638, "cells": [{"id": 77, "text": "Note:", "bbox": {"l": 142.8, "t": 642.70872, "r": 168.33246, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 642.70872, "r": 531.85156, "b": 651.92172, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 654.70853, "r": 273.34174, "b": 663.92152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.44506072998047, "t": 754.4765014648438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9057300090789795, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31855010986328, "t": 754.713134765625, "r": 334.42142, "b": 763.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9489884376525879, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 32, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.607666015625, "t": 754.6572875976562, "r": 523.60162, "b": 764.1538696289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9509176015853882, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0054321289062, "t": 754.273193359375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9023982882499695, "cells": [{"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.7609405517578, "t": 349.9282531738281, "r": 415.2347106933594, "b": 359.3016052246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9314021468162537, "cells": [{"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8385467529297, "t": 375.867431640625, "r": 547.2995, "b": 434.064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9820544719696045, "cells": [{"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.1680145263672, "t": 724.62646484375, "r": 306.3438720703125, "b": 734.2166137695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9344669580459595, "cells": [{"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 142.42935180664062, "t": 452.0504150390625, "r": 531.85156, "b": 474.2764587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9186185598373413, "cells": [{"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.23851013183594, "t": 77.76332092285156, "r": 507.5733642578125, "b": 347.19940185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9780997633934021, "cells": [{"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 135.7325897216797, "t": 500.9567565917969, "r": 514.99365234375, "b": 721.4244995117188, "coord_origin": "TOPLEFT"}, "confidence": 0.9797928333282471, "cells": [{"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.607666015625, "t": 754.6572875976562, "r": 523.60162, "b": 764.1538696289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9509176015853882, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0054321289062, "t": 754.273193359375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9023982882499695, "cells": [{"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}, {"label": "caption", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.7609405517578, "t": 349.9282531738281, "r": 415.2347106933594, "b": 359.3016052246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9314021468162537, "cells": [{"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements"}, {"label": "text", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8385467529297, "t": 375.867431640625, "r": 547.2995, "b": 434.064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9820544719696045, "cells": [{"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}]}, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC."}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.1680145263672, "t": 724.62646484375, "r": 306.3438720703125, "b": 734.2166137695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9344669580459595, "cells": [{"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-4 ALTER TABLE SQL statement"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 142.42935180664062, "t": 452.0504150390625, "r": 531.85156, "b": 474.2764587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9186185598373413, "cells": [{"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}, {"label": "picture", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.23851013183594, "t": 77.76332092285156, "r": 507.5733642578125, "b": 347.19940185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9780997633934021, "cells": [{"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.7325897216797, "t": 500.9567565917969, "r": 514.99365234375, "b": 721.4244995117188, "coord_origin": "TOPLEFT"}, "confidence": 0.9797928333282471, "cells": [{"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.7609405517578, "t": 349.9282531738281, "r": 415.2347106933594, "b": 359.3016052246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9314021468162537, "cells": [{"id": 2, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements", "bbox": {"l": 136.8, "t": 350.77798, "r": 414.92795, "b": 359.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-3 ALTER PERMISSION and ALTER MASK SQL statements"}, {"label": "text", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8385467529297, "t": 375.867431640625, "r": 547.2995, "b": 434.064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9820544719696045, "cells": [{"id": 3, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL", "bbox": {"l": 136.8, "t": 376.78873, "r": 499.03439, "b": 386.00171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " ALTER ", "bbox": {"l": 498.9595299999999, "t": 376.93811, "r": 533.87927, "b": 385.7627, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TABLE", "bbox": {"l": 136.79999, "t": 388.93793, "r": 161.75975, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " statement (Figure 3-4). The ", "bbox": {"l": 161.75975, "t": 388.78853999999995, "r": 288.95093, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACTIVATE", "bbox": {"l": 288.9599, "t": 388.93793, "r": 328.91943, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " or ", "bbox": {"l": 328.98016, "t": 388.78853999999995, "r": 343.37933, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DEACTIVATE", "bbox": {"l": 343.38034, "t": 388.93793, "r": 393.35962, "b": 397.76251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " clause must be the option that is ", "bbox": {"l": 393.36063, "t": 388.78853999999995, "r": 542.38611, "b": 398.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "specified in the statement. No other alterations are permitted at the same time. The activating ", "bbox": {"l": 136.80096, "t": 400.78836000000007, "r": 547.2995, "b": 410.00134, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and deactivating effectively turns on or off all RCAC processing for the table. Only enabled ", "bbox": {"l": 136.80096, "t": 412.78818, "r": 537.36926, "b": 422.00116, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "row permissions and column masks take effect when activating RCAC.", "bbox": {"l": 136.80096, "t": 424.7879899999999, "r": 448.40952000000004, "b": 434.00098, "coord_origin": "TOPLEFT"}}]}, "text": "You can activate and deactivate RCAC for new or existing tables by using the SQL ALTER TABLE statement (Figure 3-4). The ACTIVATE or DEACTIVATE clause must be the option that is specified in the statement. No other alterations are permitted at the same time. The activating and deactivating effectively turns on or off all RCAC processing for the table. Only enabled row permissions and column masks take effect when activating RCAC."}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.1680145263672, "t": 724.62646484375, "r": 306.3438720703125, "b": 734.2166137695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9344669580459595, "cells": [{"id": 14, "text": "Figure 3-4 ALTER TABLE SQL statement", "bbox": {"l": 136.8, "t": 725.477898, "r": 305.51761, "b": 733.802898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-4 ALTER TABLE SQL statement"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 142.42935180664062, "t": 452.0504150390625, "r": 531.85156, "b": 474.2764587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9186185598373413, "cells": [{"id": 15, "text": "Note:", "bbox": {"l": 142.8, "t": 452.74872, "r": 168.33246, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " An exclusive lock is required on the table object to perform the alter operation. All ", "bbox": {"l": 168.36035, "t": 452.74872, "r": 531.85156, "b": 461.9617, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "open cursors must be closed.", "bbox": {"l": 142.8, "t": 464.74854, "r": 273.34174, "b": 473.96152, "coord_origin": "TOPLEFT"}}]}, "text": "Note: An exclusive lock is required on the table object to perform the alter operation. All open cursors must be closed."}, {"label": "picture", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.23851013183594, "t": 77.76332092285156, "r": 507.5733642578125, "b": 347.19940185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9780997633934021, "cells": [{"id": 18, "text": "ALTER PERMISSION", "bbox": {"l": 149.2699, "t": 110.98553000000004, "r": 231.19603, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "<", "bbox": {"l": 235.77481, "t": 110.98553000000004, "r": 240.86904999999996, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "permission name", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 311.6275, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "> ", "bbox": {"l": 311.58862, "t": 110.98553000000004, "r": 319.00494, "b": 119.73168999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Names the row permission for row access control", "bbox": {"l": 329.09839, "t": 91.25610000000006, "r": 493.15857, "b": 98.26886000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "p", "bbox": {"l": 240.87360000000004, "t": 110.98553000000004, "r": 246.13150000000002, "b": 119.74194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 147.84826999999996, "r": 182.26585, "b": 156.60468000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Specifies", "bbox": {"l": 311.4657, "t": 135.67584, "r": 337.83026, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that the row permission is to be enabled", "bbox": {"l": 342.39178, "t": 135.67584, "r": 477.03091, "b": 142.68859999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies", "bbox": {"l": 310.97421, "t": 155.58159999999998, "r": 340.08932, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "that the row permission is to be disabled", "bbox": {"l": 341.86423, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 160.13585999999998, "r": 184.44882, "b": 168.89227000000005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 172.42340000000002, "r": 204.24371, "b": 181.17980999999997, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": ";", "bbox": {"l": 204.22632, "t": 172.42340000000002, "r": 206.9678, "b": 181.16956000000005, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": " that the row permission is to be disabled", "bbox": {"l": 340.1264, "t": 155.58159999999998, "r": 477.48803999999996, "b": 162.59436000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Specifies", "bbox": {"l": 304.58469, "t": 175.48755000000006, "r": 330.95551, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that the row permission is to be regenerated", "bbox": {"l": 335.51816, "t": 175.48755000000006, "r": 483.95947, "b": 182.50031, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ALTER MASK ", "bbox": {"l": 149.2699, "t": 264.97968000000003, "r": 205.02728, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 207.42096, "t": 264.97968000000003, "r": 212.5152, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "mask name", "bbox": {"l": 212.52031, "t": 264.97968000000003, "r": 260.34683, "b": 273.73608, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "> ", "bbox": {"l": 260.34991, "t": 264.97968000000003, "r": 267.76624, "b": 273.72583, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Names the column mask for column access control", "bbox": {"l": 328.6376, "t": 243.43781, "r": 496.99047999999993, "b": 250.45056, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE", "bbox": {"l": 149.2699, "t": 301.84235, "r": 182.26585, "b": 310.59872, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "DISABLE", "bbox": {"l": 149.2699, "t": 314.12985, "r": 184.44882, "b": 322.88623, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Specifies that the column mask is to be enabled", "bbox": {"l": 316.90289, "t": 287.85745, "r": 474.94449000000003, "b": 294.87015, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the column mask is to be disabled", "bbox": {"l": 316.41141, "t": 307.76337, "r": 475.41339, "b": 314.77606, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "REGENERATE", "bbox": {"l": 149.2699, "t": 326.41754, "r": 204.24371, "b": 335.17392, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": ";", "bbox": {"l": 204.22632, "t": 326.41754, "r": 206.9678, "b": 335.1637, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Specifies that the column mask is to be regenerated", "bbox": {"l": 310.02191, "t": 327.66925, "r": 481.82784999999996, "b": 334.6819499999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.7325897216797, "t": 500.9567565917969, "r": 514.99365234375, "b": 721.4244995117188, "coord_origin": "TOPLEFT"}, "confidence": 0.9797928333282471, "cells": [{"id": 47, "text": "Id", "bbox": {"l": 381.92691, "t": 514.20789, "r": 388.31406, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "tifi", "bbox": {"l": 396.65976, "t": 514.20789, "r": 405.67206, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "th", "bbox": {"l": 414.82132, "t": 514.20789, "r": 421.89322, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t bl", "bbox": {"l": 427.89014, "t": 514.20789, "r": 440.70319, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "t", "bbox": {"l": 446.63906999999995, "t": 514.20789, "r": 449.39127, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "b", "bbox": {"l": 455.56888, "t": 514.20789, "r": 459.88857999999993, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "lt", "bbox": {"l": 469.84055, "t": 514.20789, "r": 474.47372, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "d", "bbox": {"l": 485.34805000000006, "t": 514.20789, "r": 489.66776, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "ALTER TABLE", "bbox": {"l": 148.2388, "t": 552.25224, "r": 202.0045, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "<", "bbox": {"l": 206.6377, "t": 552.25224, "r": 211.76176, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "table name", "bbox": {"l": 211.76691, "t": 552.25224, "r": 258.88251, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": ">", "bbox": {"l": 258.8876, "t": 552.25224, "r": 264.01169, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Identifies the table to be altered", "bbox": {"l": 381.92691, "t": 514.20789, "r": 489.70754999999997, "b": 521.26163, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "ALTER TABLE ", "bbox": {"l": 148.2388, "t": 552.25224, "r": 206.66792, "b": 561.05989, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "> ", "bbox": {"l": 258.8876, "t": 552.25224, "r": 266.34219, "b": 561.04961, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Specifies to activate row access control for the table", "bbox": {"l": 325.8764, "t": 563.64609, "r": 499.40607000000006, "b": 570.69984, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 601.69044, "r": 290.58826, "b": 610.49809, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DEACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 614.04996, "r": 302.02682, "b": 622.8576, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "Specifies", "bbox": {"l": 317.00839, "t": 625.44389, "r": 343.54861, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "to deactivate row access control for the table", "bbox": {"l": 348.11584, "t": 625.44389, "r": 498.97121999999996, "b": 632.49765, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "ACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 663.48816, "r": 307.72708, "b": 672.2958, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "Specifies", "bbox": {"l": 312.25, "t": 647.07309, "r": 338.41428, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "t", "bbox": {"l": 316.86722, "t": 647.07309, "r": 346.10965, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "o activate column access control for the table", "bbox": {"l": 346.00735, "t": 647.07309, "r": 497.60767, "b": 654.12685, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "DEACTIVATE COLUMN ACCESS CONTROL", "bbox": {"l": 148.2388, "t": 675.84776, "r": 319.12659, "b": 684.6554, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": ";", "bbox": {"l": 319.07822, "t": 675.84776, "r": 321.83575, "b": 684.6451, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Specifies to deactivate column access control for the table", "bbox": {"l": 302.51691, "t": 705.780998, "r": 496.27634000000006, "b": 712.834747, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.607666015625, "t": 754.6572875976562, "r": 523.60162, "b": 764.1538696289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9509176015853882, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0054321289062, "t": 754.273193359375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9023982882499695, "cells": [{"id": 1, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}]}}, {"page_no": 33, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.41429901123047, "t": 754.440673828125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157553911209106, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.24517059326172, "t": 754.6806030273438, "r": 334.42142, "b": 763.880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9524391889572144, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.7600555419922, "t": 70.74359130859375, "r": 547.27368, "b": 153.18722534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9859952330589294, "cells": [{"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.96725463867188, "t": 164.6621856689453, "r": 547.26862, "b": 211.24705505371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9864240288734436, "cells": [{"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29631042480469, "t": 283.35809326171875, "r": 438.75719999999995, "b": 299.7961730957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9686634540557861, "cells": [{"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.81504821777344, "t": 315.3957824707031, "r": 525.50189, "b": 337.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9780532121658325, "cells": [{"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.23223114013672, "t": 357.744873046875, "r": 204.58528, "b": 370.9036865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9646314978599548, "cells": [{"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.89915466308594, "t": 384.0397644042969, "r": 547.10638, "b": 418.1158447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9852918386459351, "cells": [{"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.08819580078125, "t": 429.4395446777344, "r": 544.57635, "b": 475.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9797153472900391, "cells": [{"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6575927734375, "t": 482.5708923339844, "r": 546.9812, "b": 517.0709228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9826201796531677, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.68878173828125, "t": 523.186767578125, "r": 522.54559, "b": 545.72144, "coord_origin": "TOPLEFT"}, "confidence": 0.9765340089797974, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.3015594482422, "t": 552.5537719726562, "r": 547.24835, "b": 634.927978515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9861234426498413, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.51412963867188, "t": 641.8392333984375, "r": 547.26508, "b": 700.5236206054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9852910041809082, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.05694580078125, "t": 712.0028686523438, "r": 547.20148, "b": 734.2177124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9718018174171448, "cells": [{"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 142.8, "t": 228.60476684570312, "r": 537.48688, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9677881598472595, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41429901123047, "t": 754.440673828125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157553911209106, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.24517059326172, "t": 754.6806030273438, "r": 334.42142, "b": 763.880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9524391889572144, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.7600555419922, "t": 70.74359130859375, "r": 547.27368, "b": 153.18722534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9859952330589294, "cells": [{"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set."}, {"label": "text", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.96725463867188, "t": 164.6621856689453, "r": 547.26862, "b": 211.24705505371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9864240288734436, "cells": [{"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user\u2019s ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first."}, {"label": "section_header", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29631042480469, "t": 283.35809326171875, "r": 438.75719999999995, "b": 299.7961730957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9686634540557861, "cells": [{"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}]}, "text": "3.2 Special registers and built-in global variables"}, {"label": "text", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.81504821777344, "t": 315.3957824707031, "r": 525.50189, "b": 337.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9780532121658325, "cells": [{"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section describes how you can use special registers and built-in global variables to implement RCAC."}, {"label": "section_header", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.23223114013672, "t": 357.744873046875, "r": 204.58528, "b": 370.9036865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9646314978599548, "cells": [{"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.1 Special registers"}, {"label": "text", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.89915466308594, "t": 384.0397644042969, "r": 547.10638, "b": 418.1158447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9852918386459351, "cells": [{"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server."}, {"label": "text", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08819580078125, "t": 429.4395446777344, "r": 544.57635, "b": 475.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9797153472900391, "cells": [{"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers:"}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6575927734375, "t": 482.5708923339844, "r": 546.9812, "b": 517.0709228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9826201796531677, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION ."}, {"label": "list_item", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.68878173828125, "t": 523.186767578125, "r": 522.54559, "b": 545.72144, "coord_origin": "TOPLEFT"}, "confidence": 0.9765340089797974, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.3015594482422, "t": 552.5537719726562, "r": 547.24835, "b": 634.927978515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9861234426498413, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller\u2019s or the owner\u2019s user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner\u2019s authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.51412963867188, "t": 641.8392333984375, "r": 547.26508, "b": 700.5236206054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9852910041809082, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128)."}, {"label": "text", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05694580078125, "t": 712.0028686523438, "r": 547.20148, "b": 734.2177124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9718018174171448, "cells": [{"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text."}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.8, "t": 228.60476684570312, "r": 537.48688, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9677881598472595, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Note: If a user does not have permission to access the row, the column mask logic is not invoked."}], "body": [{"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.7600555419922, "t": 70.74359130859375, "r": 547.27368, "b": 153.18722534179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9859952330589294, "cells": [{"id": 2, "text": "When row access control is activated on a table, a default permission is established for that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.60541, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "table. The name of this permission is QIBM_DEFAULT_ _. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 532.44617, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This default permission contains a simple piece of logic (0=1) which is never true. The default ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 547.27368, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permission effectively denies access to every user unless there is a permission defined that ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 543.20679, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "allows access explicitly. If row access control is activated on a table, and there is no ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 507.37884999999994, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "permission that is defined, no one has permission to any rows. All queries against the table ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 541.29761, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produce an empty set.", "bbox": {"l": 136.80003, "t": 143.50757, "r": 235.74368, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "When row access control is activated on a table, a default permission is established for that table. The name of this permission is QIBM_DEFAULT_ _. This default permission contains a simple piece of logic (0=1) which is never true. The default permission effectively denies access to every user unless there is a permission defined that allows access explicitly. If row access control is activated on a table, and there is no permission that is defined, no one has permission to any rows. All queries against the table produce an empty set."}, {"label": "text", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.96725463867188, "t": 164.6621856689453, "r": 547.26862, "b": 211.24705505371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9864240288734436, "cells": [{"id": 9, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the ", "bbox": {"l": 136.80003, "t": 165.52715999999998, "r": 547.26862, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "permissions are ORed together to form a comprehensive test of the user\u2019s ability to access ", "bbox": {"l": 136.80003, "t": 177.52697999999998, "r": 540.27271, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "the data. A column can have only one mask that is defined over it. From an implementation ", "bbox": {"l": 136.80005, "t": 189.52679, "r": 540.56946, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "standpoint, it does not matter if you create the column masks first or the row permissions first.", "bbox": {"l": 136.80005, "t": 201.52661, "r": 547.26361, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "It is possible to define, create, and enable multiple permissions on a table. Logically, all of the permissions are ORed together to form a comprehensive test of the user\u2019s ability to access the data. A column can have only one mask that is defined over it. From an implementation standpoint, it does not matter if you create the column masks first or the row permissions first."}, {"label": "section_header", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29631042480469, "t": 283.35809326171875, "r": 438.75719999999995, "b": 299.7961730957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9686634540557861, "cells": [{"id": 13, "text": "3.2", "bbox": {"l": 64.800003, "t": 284.2207, "r": 87.228401, "b": 298.9837, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Special registers and built-in global variables", "bbox": {"l": 91.714066, "t": 284.2207, "r": 438.75719999999995, "b": 298.9837, "coord_origin": "TOPLEFT"}}]}, "text": "3.2 Special registers and built-in global variables"}, {"label": "text", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.81504821777344, "t": 315.3957824707031, "r": 525.50189, "b": 337.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9780532121658325, "cells": [{"id": 15, "text": "This section describes how you can use special registers and built-in global variables to ", "bbox": {"l": 136.8, "t": 316.48874, "r": 525.50189, "b": 325.70172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implement RCAC.", "bbox": {"l": 136.8, "t": 328.48856, "r": 216.11847, "b": 337.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section describes how you can use special registers and built-in global variables to implement RCAC."}, {"label": "section_header", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.23223114013672, "t": 357.744873046875, "r": 204.58528, "b": 370.9036865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9646314978599548, "cells": [{"id": 17, "text": "3.2.1", "bbox": {"l": 64.800003, "t": 358.37473, "r": 94.390945, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Special registers", "bbox": {"l": 98.089813, "t": 358.37473, "r": 204.58528, "b": 370.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.1 Special registers"}, {"label": "text", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.89915466308594, "t": 384.0397644042969, "r": 547.10638, "b": 418.1158447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9852918386459351, "cells": [{"id": 19, "text": "A special register is a storage area that is defined for an application process by DB2 and is ", "bbox": {"l": 136.8, "t": 384.52872, "r": 539.57452, "b": 393.7417, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "used to store information that can be referenced in SQL statements. A reference to a special ", "bbox": {"l": 136.80002, "t": 396.52853, "r": 547.10638, "b": 405.74152, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "register is a reference to a value that is provided by the current server.", "bbox": {"l": 136.80002, "t": 408.52835, "r": 446.1227999999999, "b": 417.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "A special register is a storage area that is defined for an application process by DB2 and is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value that is provided by the current server."}, {"label": "text", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08819580078125, "t": 429.4395446777344, "r": 544.57635, "b": 475.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9797153472900391, "cells": [{"id": 22, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user ", "bbox": {"l": 136.80002, "t": 430.48816, "r": 541.74866, "b": 439.70114000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "profiles are relevant to determining object authorities in the current connection to the server. ", "bbox": {"l": 136.80002, "t": 442.48798, "r": 544.57635, "b": 451.70096, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SQL uses the term ", "bbox": {"l": 136.80002, "t": 454.48779, "r": 223.17113000000003, "b": 463.70078, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "runtime authorization ID", "bbox": {"l": 223.14, "t": 453.965, "r": 333.65698, "b": 464.02267, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ", which corresponds to a user profile on ", "bbox": {"l": 332.94, "t": 454.48874, "r": 510.13167999999996, "b": 463.70172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DB2 for i. Here are the four special registers:", "bbox": {"l": 136.79987, "t": 466.48856, "r": 333.85648, "b": 475.70154, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports four different special registers that can be used to identify what user profiles are relevant to determining object authorities in the current connection to the server. SQL uses the term runtime authorization ID , which corresponds to a user profile on DB2 for i. Here are the four special registers:"}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6575927734375, "t": 482.5708923339844, "r": 546.9812, "b": 517.0709228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9826201796531677, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.79987, "t": 483.67752, "r": 141.77986, "b": 492.4523, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER", "bbox": {"l": 151.2, "t": 483.00497, "r": 177.96045, "b": 493.06265, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is the runtime user profile that determines the object authorities for the current ", "bbox": {"l": 178.02, "t": 483.52872, "r": 527.85907, "b": 492.7417, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "connection to the server. It has a data type of VARCHAR(18). This value can be changed ", "bbox": {"l": 151.19972, "t": 495.52853, "r": 546.9812, "b": 504.74152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "by the SQL statement ", "bbox": {"l": 151.19972, "t": 507.52835, "r": 250.47899, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "SET SESSION AUTHORIZATION", "bbox": {"l": 250.44016, "t": 507.67773, "r": 375.35846, "b": 516.50232, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": ".", "bbox": {"l": 375.36047, "t": 507.52835, "r": 378.12936, "b": 516.7413300000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER is the runtime user profile that determines the object authorities for the current connection to the server. It has a data type of VARCHAR(18). This value can be changed by the SQL statement SET SESSION AUTHORIZATION ."}, {"label": "list_item", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.68878173828125, "t": 523.186767578125, "r": 522.54559, "b": 545.72144, "coord_origin": "TOPLEFT"}, "confidence": 0.9765340089797974, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.80055, "t": 524.65753, "r": 141.78055, "b": 533.4323099999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SESSION_USER", "bbox": {"l": 151.2, "t": 523.98489, "r": 225.65868999999998, "b": 534.0425700000001, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " is the same as the USER register, except that it has a data type of ", "bbox": {"l": 225.65999999999997, "t": 524.50864, "r": 522.54559, "b": 533.72162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "VARCHAR(128).", "bbox": {"l": 151.20004, "t": 536.5084400000001, "r": 225.40204, "b": 545.72144, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SESSION_USER is the same as the USER register, except that it has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.3015594482422, "t": 552.5537719726562, "r": 547.24835, "b": 634.927978515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9861234426498413, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79988, "t": 553.6974, "r": 141.77988, "b": 562.47215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CURRENT USER", "bbox": {"l": 151.2, "t": 553.02498, "r": 229.63782, "b": 563.08266, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " was added in IBM i 7.2 and is similar to the USER register, but it has ", "bbox": {"l": 229.62, "t": 553.54872, "r": 537.24548, "b": 562.76172, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "one important difference in that it also reports adopted authority. High-level language ", "bbox": {"l": 151.19994, "t": 565.54852, "r": 527.54938, "b": 574.76152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "programs and SQL routines such as functions, procedures, and triggers can optionally be ", "bbox": {"l": 151.19994, "t": 577.54832, "r": 547.24835, "b": 586.7613200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "created to run using either the caller\u2019s or the owner\u2019s user profile to determine data ", "bbox": {"l": 151.19994, "t": 589.54813, "r": 518.6712, "b": 598.76112, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "authorities. For example, an SQL procedure can be created to run under the owner\u2019s ", "bbox": {"l": 151.19994, "t": 601.54793, "r": 526.85022, "b": 610.76093, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "authority by specifying ", "bbox": {"l": 151.19994, "t": 613.54773, "r": 252.84670999999997, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 252.77998, "t": 613.69713, "r": 372.71829, "b": 622.5216800000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": ". This special register can also be ", "bbox": {"l": 372.72031, "t": 613.54773, "r": 523.83533, "b": 622.76073, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "referenced as CURRENT_USER. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19995, "t": 625.54753, "r": 467.14914, "b": 634.76053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CURRENT USER was added in IBM i 7.2 and is similar to the USER register, but it has one important difference in that it also reports adopted authority. High-level language programs and SQL routines such as functions, procedures, and triggers can optionally be created to run using either the caller\u2019s or the owner\u2019s user profile to determine data authorities. For example, an SQL procedure can be created to run under the owner\u2019s authority by specifying SET OPTION USRPRF=*OWNER . This special register can also be referenced as CURRENT_USER. It has a data type of VARCHAR(128)."}, {"label": "list_item", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.51412963867188, "t": 641.8392333984375, "r": 547.26508, "b": 700.5236206054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9852910041809082, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79979, "t": 642.67674, "r": 141.77979, "b": 651.45149, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "SYSTEM_USER", "bbox": {"l": 151.2, "t": 642.00488, "r": 222.60513, "b": 652.06256, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": " is the user profile that initiates the connection to the server. It is not used ", "bbox": {"l": 222.60000999999997, "t": 642.52863, "r": 547.23834, "b": 651.74162, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT ", "bbox": {"l": 151.19975, "t": 654.52843, "r": 541.24725, "b": 663.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "prestarted jobs, initially connect to the server with a default user profile and then change to ", "bbox": {"l": 151.19974, "t": 666.52823, "r": 547.26508, "b": 675.74123, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "use some other user profile. SYSTEM_USER reports this value, typically QUSER for a ", "bbox": {"l": 151.19974, "t": 678.52804, "r": 535.65375, "b": 687.74104, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "QZDASOINIT job. It has a data type of VARCHAR(128).", "bbox": {"l": 151.19974, "t": 690.52785, "r": 397.80933, "b": 699.740852, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_USER is the user profile that initiates the connection to the server. It is not used by RCAC, but is included here for completeness. Many jobs, including the QZDASOINIT prestarted jobs, initially connect to the server with a default user profile and then change to use some other user profile. SYSTEM_USER reports this value, typically QUSER for a QZDASOINIT job. It has a data type of VARCHAR(128)."}, {"label": "text", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05694580078125, "t": 712.0028686523438, "r": 547.20148, "b": 734.2177124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9718018174171448, "cells": [{"id": 57, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced ", "bbox": {"l": 136.79958, "t": 712.547417, "r": 547.20148, "b": 721.7604220000001, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "as part of the rule text.", "bbox": {"l": 136.79959, "t": 724.547226, "r": 236.50912000000002, "b": 733.760231, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to these four special registers, any of the DB2 special registers can be referenced as part of the rule text."}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.8, "t": 228.60476684570312, "r": 537.48688, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9677881598472595, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 229.48870999999997, "r": 168.33246, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " If a user does not have permission to access the row, the column mask logic is not ", "bbox": {"l": 168.36035, "t": 229.48870999999997, "r": 537.48688, "b": 238.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "invoked.", "bbox": {"l": 142.8, "t": 241.48852999999997, "r": 179.3741, "b": 250.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Note: If a user does not have permission to access the row, the column mask logic is not invoked."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41429901123047, "t": 754.440673828125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157553911209106, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.24517059326172, "t": 754.6806030273438, "r": 334.42142, "b": 763.880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9524391889572144, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 34, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 34, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 34, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 34, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 34, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 34, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 34, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 34, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 34, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 34, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 35, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 35, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 35, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 35, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 35, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 35, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 35, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 35, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 35, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 35, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 36, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.57867431640625, "t": 754.7420043945312, "r": 523.60162, "b": 764.0948486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520102739334106, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7230834960938, "t": 754.28857421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108889102935791, "cells": [{"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.577880859375, "t": 70.0939712524414, "r": 512.90088, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.9630382061004639, "cells": [{"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.82391357421875, "t": 121.33588409423828, "r": 544.90198, "b": 155.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9855659604072571, "cells": [{"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.99398803710938, "t": 168.17491149902344, "r": 545.6568, "b": 214.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9861353635787964, "cells": [{"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.151123046875, "t": 225.48377990722656, "r": 537.8551, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9822747707366943, "cells": [{"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.31472778320312, "t": 271.4064636230469, "r": 547.2691, "b": 293.71936, "coord_origin": "TOPLEFT"}, "confidence": 0.9792705774307251, "cells": [{"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.01747131347656, "t": 306.14697265625, "r": 545.94769, "b": 327.9010925292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9774510264396667, "cells": [{"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.0785675048828, "t": 339.462646484375, "r": 547.24945, "b": 410.0204772949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9882258176803589, "cells": [{"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.35562133789062, "t": 421.3914794921875, "r": 542.04926, "b": 443.71701, "coord_origin": "TOPLEFT"}, "confidence": 0.9723648428916931, "cells": [{"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1328582763672, "t": 450.9010009765625, "r": 546.53522, "b": 472.40781, "coord_origin": "TOPLEFT"}, "confidence": 0.9142380952835083, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.92572021484375, "t": 484.72674560546875, "r": 547.02722, "b": 554.9171142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9879254102706909, "cells": [{"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.01707458496094, "t": 566.9345703125, "r": 547.37488, "b": 637.0723266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875260591506958, "cells": [{"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.3708953857422, "t": 648.479736328125, "r": 355.12689208984375, "b": 658.3316650390625, "coord_origin": "TOPLEFT"}, "confidence": 0.804072916507721, "cells": [{"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 699.452499, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 226.11877, "t": 678.1546020507812, "r": 331.77557373046875, "b": 687.45269, "coord_origin": "TOPLEFT"}, "confidence": 0.6781665682792664, "cells": [{"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 222.19522, "t": 689.8526611328125, "r": 371.63684, "b": 700.1818237304688, "coord_origin": "TOPLEFT"}, "confidence": 0.7035561203956604, "cells": [{"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.57867431640625, "t": 754.7420043945312, "r": 523.60162, "b": 764.0948486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520102739334106, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7230834960938, "t": 754.28857421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108889102935791, "cells": [{"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}, {"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.577880859375, "t": 70.0939712524414, "r": 512.90088, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.9630382061004639, "cells": [{"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82391357421875, "t": 121.33588409423828, "r": 544.90198, "b": 155.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9855659604072571, "cells": [{"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}]}, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.99398803710938, "t": 168.17491149902344, "r": 545.6568, "b": 214.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9861353635787964, "cells": [{"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.151123046875, "t": 225.48377990722656, "r": 537.8551, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9822747707366943, "cells": [{"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value."}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.31472778320312, "t": 271.4064636230469, "r": 547.2691, "b": 293.71936, "coord_origin": "TOPLEFT"}, "confidence": 0.9792705774307251, "cells": [{"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}]}, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman resources example\u201d on page 22."}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.01747131347656, "t": 306.14697265625, "r": 545.94769, "b": 327.9010925292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9774510264396667, "cells": [{"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}]}, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0785675048828, "t": 339.462646484375, "r": 547.24945, "b": 410.0204772949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9882258176803589, "cells": [{"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.35562133789062, "t": 421.3914794921875, "r": 542.04926, "b": 443.71701, "coord_origin": "TOPLEFT"}, "confidence": 0.9723648428916931, "cells": [{"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the IBM i 7.2 Knowledge Center, found at:"}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1328582763672, "t": 450.9010009765625, "r": 546.53522, "b": 472.40781, "coord_origin": "TOPLEFT"}, "confidence": 0.9142380952835083, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en"}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.92572021484375, "t": 484.72674560546875, "r": 547.02722, "b": 554.9171142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9879254102706909, "cells": [{"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}]}, "text": "One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.01707458496094, "t": 566.9345703125, "r": 547.37488, "b": 637.0723266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875260591506958, "cells": [{"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}]}, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1."}, {"label": "caption", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.3708953857422, "t": 648.479736328125, "r": 355.12689208984375, "b": 658.3316650390625, "coord_origin": "TOPLEFT"}, "confidence": 0.804072916507721, "cells": [{"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-1 Subquery that is used as part of the rule"}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 699.452499, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE"}, {"label": "text", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "text", "bbox": {"l": 226.11877, "t": 678.1546020507812, "r": 331.77557373046875, "b": 687.45269, "coord_origin": "TOPLEFT"}, "confidence": 0.6781665682792664, "cells": [{"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}]}, "text": "DATE_MASTER D"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 222.19522, "t": 689.8526611328125, "r": 371.63684, "b": 700.1818237304688, "coord_origin": "TOPLEFT"}, "confidence": 0.7035561203956604, "cells": [{"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "D.BUSINESS_DAY = 'Y')"}], "body": [{"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.577880859375, "t": 70.0939712524414, "r": 512.90088, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.9630382061004639, "cells": [{"id": 2, "text": "3.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.21553, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Establishing and controlling accessibility by using the ", "bbox": {"l": 91.698616, "t": 71.22069999999997, "r": 512.90088, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC rule text", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 176.72586, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82391357421875, "t": 121.33588409423828, "r": 544.90198, "b": 155.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9855659604072571, "cells": [{"id": 5, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 544.90198, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "accessibility comes from the ", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 264.56488, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "rule text", "bbox": {"l": 264.54001, "t": 133.98492, "r": 300.83551, "b": 144.0426, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". The rule text represents the search criteria and logic ", "bbox": {"l": 300.84, "t": 134.50867000000005, "r": 539.85315, "b": 143.72168, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that is implemented by the database engine.", "bbox": {"l": 136.79979, "t": 146.50847999999996, "r": 332.60843, "b": 155.7215, "coord_origin": "TOPLEFT"}}]}, "text": "When defining a row permission or column mask, the \u201cmagic\u201d of establishing and controlling accessibility comes from the rule text . The rule text represents the search criteria and logic that is implemented by the database engine."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.99398803710938, "t": 168.17491149902344, "r": 545.6568, "b": 214.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9861353635787964, "cells": [{"id": 10, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the ", "bbox": {"l": 136.79979, "t": 168.52808000000005, "r": 545.6568, "b": 177.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "row. If the test result is true, the row can be accessed. If the test result is false, the row ", "bbox": {"l": 136.79979, "t": 180.52788999999996, "r": 520.19312, "b": 189.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "essentially does not exist for the user. From a set-at-a-time perspective, the permission ", "bbox": {"l": 136.79979, "t": 192.52770999999996, "r": 522.82147, "b": 201.74072, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "defines which rows can be part of the query result set, and which rows cannot.", "bbox": {"l": 136.7998, "t": 204.52752999999996, "r": 483.42691, "b": 213.74054, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a row permission, the rule text is the \u201ctest\u201d of whether the user can access the row. If the test result is true, the row can be accessed. If the test result is false, the row essentially does not exist for the user. From a set-at-a-time perspective, the permission defines which rows can be part of the query result set, and which rows cannot."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.151123046875, "t": 225.48377990722656, "r": 537.8551, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9822747707366943, "cells": [{"id": 14, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the ", "bbox": {"l": 136.7998, "t": 226.4873, "r": 537.8551, "b": 235.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "actual column value, and it is the masking logic if the user cannot have access to actual ", "bbox": {"l": 136.7998, "t": 238.48712, "r": 525.43597, "b": 247.70012999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "column value.", "bbox": {"l": 136.7998, "t": 250.48694, "r": 198.05679, "b": 259.69994999999994, "coord_origin": "TOPLEFT"}}]}, "text": "In the case of a column mask, the rule text is both the test of whether the user can see the actual column value, and it is the masking logic if the user cannot have access to actual column value."}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.31472778320312, "t": 271.4064636230469, "r": 547.2691, "b": 293.71936, "coord_origin": "TOPLEFT"}, "confidence": 0.9792705774307251, "cells": [{"id": 17, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman ", "bbox": {"l": 136.7998, "t": 272.50653, "r": 547.2691, "b": 281.71954, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "resources example\u201d on page 22.", "bbox": {"l": 136.7998, "t": 284.50638, "r": 279.77264, "b": 293.71936, "coord_origin": "TOPLEFT"}}]}, "text": "For a simple example of implementing row permissions and column masks, see 3.6, \u201cHuman resources example\u201d on page 22."}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.01747131347656, "t": 306.14697265625, "r": 545.94769, "b": 327.9010925292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9774510264396667, "cells": [{"id": 19, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search ", "bbox": {"l": 136.7998, "t": 306.52594, "r": 545.94769, "b": 315.73892000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "condition follows the same rules that are used by the search condition in a WHERE clause.", "bbox": {"l": 136.7998, "t": 318.52576, "r": 537.92279, "b": 327.73874, "coord_origin": "TOPLEFT"}}]}, "text": "In general, almost any set-based, relational logic is valid. For the row permission, the search condition follows the same rules that are used by the search condition in a WHERE clause."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0785675048828, "t": 339.462646484375, "r": 547.24945, "b": 410.0204772949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9882258176803589, "cells": [{"id": 21, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result ", "bbox": {"l": 136.7998, "t": 340.48556999999994, "r": 537.5434, "b": 349.69855, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "data type, length, null attribute, and CCSID of the CASE expression must be compatible with ", "bbox": {"l": 136.79979, "t": 352.48538, "r": 547.18268, "b": 361.69836000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the data type of the column. If the column does not allow the null value, the result of the CASE ", "bbox": {"l": 136.80081, "t": 364.4852, "r": 547.24945, "b": 373.69818, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "expression cannot be the NULL value. The application or interface making the data access ", "bbox": {"l": 136.80083, "t": 376.48502, "r": 539.22668, "b": 385.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "request is expecting that all of the column attributes and values are consistent with the ", "bbox": {"l": 136.80083, "t": 388.48483, "r": 520.22992, "b": 397.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "original definition, regardless of any masking.", "bbox": {"l": 136.80083, "t": 400.48465, "r": 336.8624, "b": 409.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "For the column mask, the logic follows the same rules as the CASE expression. The result data type, length, null attribute, and CCSID of the CASE expression must be compatible with the data type of the column. If the column does not allow the null value, the result of the CASE expression cannot be the NULL value. The application or interface making the data access request is expecting that all of the column attributes and values are consistent with the original definition, regardless of any masking."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.35562133789062, "t": 421.3914794921875, "r": 542.04926, "b": 443.71701, "coord_origin": "TOPLEFT"}, "confidence": 0.9723648428916931, "cells": [{"id": 27, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the ", "bbox": {"l": 136.80083, "t": 422.50421000000006, "r": 542.04926, "b": 431.71719, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM i 7.2 Knowledge Center, found at:", "bbox": {"l": 136.80083, "t": 434.50403, "r": 304.71448, "b": 443.71701, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about what is permitted, see the \u201cDatabase programming\u201d topic of the IBM i 7.2 Knowledge Center, found at:"}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1328582763672, "t": 450.9010009765625, "r": 546.53522, "b": 472.40781, "coord_origin": "TOPLEFT"}, "confidence": 0.9142380952835083, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang", "bbox": {"l": 136.80083, "t": 451.63321, "r": 546.53522, "b": 460.40799, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "=en", "bbox": {"l": 136.80083, "t": 463.63303, "r": 151.74083, "b": 472.40781, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?lang =en"}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.92572021484375, "t": 484.72674560546875, "r": 547.02722, "b": 554.9171142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9879254102706909, "cells": [{"id": 31, "text": "One of the first tasks in either the row permission or the column mask logic is to determine ", "bbox": {"l": 136.80083, "t": 485.5032, "r": 538.12109, "b": 494.71619, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "who the user is, and whether they have access to the data. Elegant methods to establish the ", "bbox": {"l": 136.80083, "t": 497.50302, "r": 546.96045, "b": 506.716, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "identity and attributes of the user can be employed by using the special registers, global ", "bbox": {"l": 136.80083, "t": 509.50284, "r": 526.4729, "b": 518.71582, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple ", "bbox": {"l": 136.80083, "t": 521.50266, "r": 525.20898, "b": 530.71564, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "matter of allowing or disallowing access by using true or false testing. The examples that are ", "bbox": {"l": 136.79984, "t": 533.50244, "r": 547.02722, "b": 542.71545, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "included in this paper demonstrate some of the more common and obvious techniques.", "bbox": {"l": 136.79984, "t": 545.50226, "r": 521.35547, "b": 554.71526, "coord_origin": "TOPLEFT"}}]}, "text": "One of the first tasks in either the row permission or the column mask logic is to determine who the user is, and whether they have access to the data. Elegant methods to establish the identity and attributes of the user can be employed by using the special registers, global variables, and the VERIFY function. After the user\u2019s identity is established, it is a simple matter of allowing or disallowing access by using true or false testing. The examples that are included in this paper demonstrate some of the more common and obvious techniques."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.01707458496094, "t": 566.9345703125, "r": 547.37488, "b": 637.0723266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9875260591506958, "cells": [{"id": 37, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational ", "bbox": {"l": 136.79984, "t": 567.5218199999999, "r": 541.17859, "b": 576.73482, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "comparisons with set operations. For example, you can use a date master or date dimension ", "bbox": {"l": 136.79984, "t": 579.52162, "r": 547.37488, "b": 588.73462, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "table to determine whether the current date is a normal business day. If the current date is a ", "bbox": {"l": 136.79984, "t": 591.52142, "r": 544.3847, "b": 600.73442, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "valid business day, then access is allowed. If the current date is not a business day (for ", "bbox": {"l": 136.79984, "t": 603.52122, "r": 521.69189, "b": 612.73422, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "example a weekend day or holiday), access is denied. This test can be accomplished by ", "bbox": {"l": 136.79984, "t": 615.52103, "r": 528.19098, "b": 624.73402, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "performing a lookup using a subquery, such as the one that is shown in Example 3-1.", "bbox": {"l": 136.79984, "t": 627.5208299999999, "r": 512.61157, "b": 636.73383, "coord_origin": "TOPLEFT"}}]}, "text": "More sophisticated methods can employ existential, day of year / time of day, and relational comparisons with set operations. For example, you can use a date master or date dimension table to determine whether the current date is a normal business day. If the current date is a valid business day, then access is allowed. If the current date is not a business day (for example a weekend day or holiday), access is denied. This test can be accomplished by performing a lookup using a subquery, such as the one that is shown in Example 3-1."}, {"label": "caption", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.3708953857422, "t": 648.479736328125, "r": 355.12689208984375, "b": 658.3316650390625, "coord_origin": "TOPLEFT"}, "confidence": 0.804072916507721, "cells": [{"id": 43, "text": "Example 3-1 Subquery that is used as part of the rule", "bbox": {"l": 136.8, "t": 649.5179, "r": 354.82498, "b": 657.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-1 Subquery that is used as part of the rule"}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 699.452499, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 44, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY", "bbox": {"l": 136.8, "t": 666.67812, "r": 316.67755, "b": 675.45288, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "FROM", "bbox": {"l": 177.39944, "t": 678.6779300000001, "r": 209.879, "b": 687.45269, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHERE", "bbox": {"l": 172.38135, "t": 690.67774, "r": 207.96268, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "CURRENT_DATE IN (SELECT D.DATE_KEY FROM WHERE"}, {"label": "text", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "text", "bbox": {"l": 226.11877, "t": 678.1546020507812, "r": 331.77557373046875, "b": 687.45269, "coord_origin": "TOPLEFT"}, "confidence": 0.6781665682792664, "cells": [{"id": 46, "text": "DATE_MASTER D", "bbox": {"l": 226.11877, "t": 678.6779300000001, "r": 331.67731, "b": 687.45269, "coord_origin": "TOPLEFT"}}]}, "text": "DATE_MASTER D"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 222.19522, "t": 689.8526611328125, "r": 371.63684, "b": 700.1818237304688, "coord_origin": "TOPLEFT"}, "confidence": 0.7035561203956604, "cells": [{"id": 48, "text": "D.BUSINESS_DAY = 'Y')", "bbox": {"l": 222.19522, "t": 690.67774, "r": 371.63684, "b": 699.452499, "coord_origin": "TOPLEFT"}}]}, "text": "D.BUSINESS_DAY = 'Y')"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.57867431640625, "t": 754.7420043945312, "r": 523.60162, "b": 764.0948486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520102739334106, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7230834960938, "t": 754.28857421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108889102935791, "cells": [{"id": 1, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}]}}, {"page_no": 37, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.83726119995117, "t": 754.3733520507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9199120402336121, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2356185913086, "t": 754.7048950195312, "r": 334.42142, "b": 763.8771362304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9534041881561279, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.83892822265625, "t": 70.66429138183594, "r": 547.29156, "b": 176.9203643798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9871932864189148, "cells": [{"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.40492248535156, "t": 203.78817749023438, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9655107259750366, "cells": [{"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.95579528808594, "t": 236.6680450439453, "r": 547.29742, "b": 318.8705749511719, "coord_origin": "TOPLEFT"}, "confidence": 0.9883361458778381, "cells": [{"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.07569885253906, "t": 330.7037658691406, "r": 547.19586, "b": 365.0055236816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9833049774169922, "cells": [{"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.00733947753906, "t": 376.6234130859375, "r": 547.26068, "b": 398.8757019042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9724586009979248, "cells": [{"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.5394515991211, "t": 483.1797180175781, "r": 298.85339, "b": 499.07220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9677695631980896, "cells": [{"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.87118530273438, "t": 516.0023193359375, "r": 542.82935, "b": 585.74065, "coord_origin": "TOPLEFT"}, "confidence": 0.9858933687210083, "cells": [{"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.85508728027344, "t": 592.7136840820312, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}, "confidence": 0.9412627220153809, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.5828094482422, "t": 604.7291259765625, "r": 470.03765999999996, "b": 614.775634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9563513398170471, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.1318817138672, "t": 626.7003173828125, "r": 375.29803, "b": 636.9021606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9345581531524658, "cells": [{"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.77261352539062, "t": 643.6381225585938, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}, "confidence": 0.9286965727806091, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.6394805908203, "t": 655.4417724609375, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}, "confidence": 0.9287638664245605, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.6507568359375, "t": 667.2589111328125, "r": 276.5639343261719, "b": 677.71925, "coord_origin": "TOPLEFT"}, "confidence": 0.9430361390113831, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.71376037597656, "t": 679.4451904296875, "r": 539.58447, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9746949672698975, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 135.66419982910156, "t": 713.9166870117188, "r": 546.52435, "b": 735.738243, "coord_origin": "TOPLEFT"}, "confidence": 0.9735910892486572, "cells": [{"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 141.89248657226562, "t": 416.5281066894531, "r": 541.21985, "b": 451.1007080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9794700741767883, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.83726119995117, "t": 754.3733520507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9199120402336121, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2356185913086, "t": 754.7048950195312, "r": 334.42142, "b": 763.8771362304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9534041881561279, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.83892822265625, "t": 70.66429138183594, "r": 547.29156, "b": 176.9203643798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9871932864189148, "cells": [{"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions."}, {"label": "section_header", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.40492248535156, "t": 203.78817749023438, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9655107259750366, "cells": [{"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95579528808594, "t": 236.6680450439453, "r": 547.29742, "b": 318.8705749511719, "coord_origin": "TOPLEFT"}, "confidence": 0.9883361458778381, "cells": [{"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.07569885253906, "t": 330.7037658691406, "r": 547.19586, "b": 365.0055236816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9833049774169922, "cells": [{"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}]}, "text": "Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you."}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.00733947753906, "t": 376.6234130859375, "r": 547.26068, "b": 398.8757019042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9724586009979248, "cells": [{"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}]}, "text": "For more information and considerations about data movement in an RCAC environment, see Chapter 6, \u201cAdditional considerations\u201d on page 85."}, {"label": "section_header", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.5394515991211, "t": 483.1797180175781, "r": 298.85339, "b": 499.07220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9677695631980896, "cells": [{"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}]}, "text": "3.6 Human resources example"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87118530273438, "t": 516.0023193359375, "r": 542.82935, "b": 585.74065, "coord_origin": "TOPLEFT"}, "confidence": 0.9858933687210083, "cells": [{"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}]}, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users:"}, {"label": "list_item", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.85508728027344, "t": 592.7136840820312, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}, "confidence": 0.9412627220153809, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tax_Id information"}, {"label": "list_item", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.5828094482422, "t": 604.7291259765625, "r": 470.03765999999996, "b": 614.775634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9563513398170471, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH YEAR of the birth date of the employee (hiding the age of the employee)"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1318817138672, "t": 626.7003173828125, "r": 375.29803, "b": 636.9021606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9345581531524658, "cells": [{"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, there are four different types of users:"}, {"label": "list_item", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.77261352539062, "t": 643.6381225585938, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}, "confidence": 0.9286965727806091, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Employees"}, {"label": "list_item", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.6394805908203, "t": 655.4417724609375, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}, "confidence": 0.9287638664245605, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managers"}, {"label": "list_item", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.6507568359375, "t": 667.2589111328125, "r": 276.5639343261719, "b": 677.71925, "coord_origin": "TOPLEFT"}, "confidence": 0.9430361390113831, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human Resources Manager"}, {"label": "list_item", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.71376037597656, "t": 679.4451904296875, "r": 539.58447, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9746949672698975, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.)"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.66419982910156, "t": 713.9166870117188, "r": 546.52435, "b": 735.738243, "coord_origin": "TOPLEFT"}, "confidence": 0.9735910892486572, "cells": [{"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC in this environment."}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 141.89248657226562, "t": 416.5281066894531, "r": 541.21985, "b": 451.1007080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9794700741767883, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data."}], "body": [{"label": "text", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.83892822265625, "t": 70.66429138183594, "r": 547.29156, "b": 176.9203643798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9871932864189148, "cells": [{"id": 2, "text": "Given that joins and subqueries can be used to perform set-based operations against existing ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.29156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "data that is housed in other objects, almost any relational test can be constructed. If the data ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.18164, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "in the objects is manipulated over time, the RCAC test logic (and user query results) can be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 542.89301, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changed without modifying the actual row permission or column mask. This includes moving ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 546.20483, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "a user from one group to another or changing a column value that is used to allow or disallow ", "bbox": {"l": 136.8, "t": 119.50792999999999, "r": 547.21387, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value ", "bbox": {"l": 136.8, "t": 131.50775, "r": 547.23071, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "in the DATE_MASTER must be updated, not the permission logic. This technique can ", "bbox": {"l": 136.79999, "t": 143.50757, "r": 516.55499, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "potentially avoid downtime because of the exclusive lock that is needed on the table when ", "bbox": {"l": 136.79999, "t": 155.50739, "r": 535.33044, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "adding or changing RCAC definitions.", "bbox": {"l": 136.79999, "t": 167.5072, "r": 302.98856, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Given that joins and subqueries can be used to perform set-based operations against existing data that is housed in other objects, almost any relational test can be constructed. If the data in the objects is manipulated over time, the RCAC test logic (and user query results) can be changed without modifying the actual row permission or column mask. This includes moving a user from one group to another or changing a column value that is used to allow or disallow access. For example, if Saturday is now a valid business day, only the BUSINESS_DAY value in the DATE_MASTER must be updated, not the permission logic. This technique can potentially avoid downtime because of the exclusive lock that is needed on the table when adding or changing RCAC definitions."}, {"label": "section_header", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.40492248535156, "t": 203.78817749023438, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9655107259750366, "cells": [{"id": 11, "text": "3.5", "bbox": {"l": 64.800003, "t": 205.20068000000003, "r": 86.952782, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 91.383354, "t": 205.20068000000003, "r": 486.32437, "b": 219.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95579528808594, "t": 236.6680450439453, "r": 547.29742, "b": 318.8705749511719, "coord_origin": "TOPLEFT"}, "confidence": 0.9883361458778381, "cells": [{"id": 13, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and ", "bbox": {"l": 136.8, "t": 237.52868999999998, "r": 547.2735, "b": 246.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "what column values can be seen by a specific user. Given that the control is handled by DB2 ", "bbox": {"l": 136.8, "t": 249.5285, "r": 547.29742, "b": 258.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "internally, every data manipulation statement is under the influence of RCAC, with no ", "bbox": {"l": 136.8, "t": 261.52832, "r": 513.53516, "b": 270.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "exceptions. When accessing the table, the ", "bbox": {"l": 136.8, "t": 273.52814, "r": 325.96036, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 325.98022, "t": 273.67755, "r": 355.97977, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statements, searched ", "bbox": {"l": 355.97974, "t": 273.52814, "r": 456.93231, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "UPDATE", "bbox": {"l": 456.96020999999996, "t": 273.67755, "r": 486.89996, "b": 282.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " statements, ", "bbox": {"l": 486.89996, "t": 273.52814, "r": 544.01459, "b": 282.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and searched ", "bbox": {"l": 136.79999, "t": 285.52798, "r": 200.11673, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DELETE", "bbox": {"l": 200.15953, "t": 285.67736999999994, "r": 230.15904000000003, "b": 294.50195, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " statements implicitly and transparently contain the row permission and ", "bbox": {"l": 230.09929, "t": 285.52798, "r": 546.29034, "b": 294.74097, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "the column mask rule text. This means that the data set can be logically restricted and ", "bbox": {"l": 136.79898, "t": 297.5278, "r": 519.62463, "b": 306.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "reduced on a user by user basis.", "bbox": {"l": 136.79898, "t": 309.52762, "r": 281.48892, "b": 318.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides a database-centric approach to determining which rows can be accessed and what column values can be seen by a specific user. Given that the control is handled by DB2 internally, every data manipulation statement is under the influence of RCAC, with no exceptions. When accessing the table, the SELECT statements, searched UPDATE statements, and searched DELETE statements implicitly and transparently contain the row permission and the column mask rule text. This means that the data set can be logically restricted and reduced on a user by user basis."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.07569885253906, "t": 330.7037658691406, "r": 547.19586, "b": 365.0055236816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9833049774169922, "cells": [{"id": 26, "text": "Furthermore, DB2 prevents an ", "bbox": {"l": 136.79898, "t": 331.48743, "r": 273.8327, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "INSERT", "bbox": {"l": 273.77887, "t": 331.63681, "r": 303.77838, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " statement from inserting a row or an ", "bbox": {"l": 303.77838, "t": 331.48743, "r": 468.12946, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "UPDATE", "bbox": {"l": 468.11838, "t": 331.63681, "r": 498.11792, "b": 340.46139999999997, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " statement ", "bbox": {"l": 498.11789, "t": 331.48743, "r": 547.19586, "b": 340.70041, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "from modifying a row such that the current user cannot be permitted to access it. You cannot ", "bbox": {"l": 136.79797, "t": 343.48724, "r": 547.10968, "b": 352.70023, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "create a situation in which the data you inserted or changed is no longer accessible to you.", "bbox": {"l": 136.79797, "t": 355.48706, "r": 537.22864, "b": 364.70004, "coord_origin": "TOPLEFT"}}]}, "text": "Furthermore, DB2 prevents an INSERT statement from inserting a row or an UPDATE statement from modifying a row such that the current user cannot be permitted to access it. You cannot create a situation in which the data you inserted or changed is no longer accessible to you."}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.00733947753906, "t": 376.6234130859375, "r": 547.26068, "b": 398.8757019042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9724586009979248, "cells": [{"id": 33, "text": "For more information and considerations about data movement in an RCAC environment, see ", "bbox": {"l": 136.79797, "t": 377.50661999999994, "r": 547.26068, "b": 386.7196, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Chapter 6, \u201cAdditional considerations\u201d on page 85.", "bbox": {"l": 136.79797, "t": 389.50644000000005, "r": 359.45187, "b": 398.71942, "coord_origin": "TOPLEFT"}}]}, "text": "For more information and considerations about data movement in an RCAC environment, see Chapter 6, \u201cAdditional considerations\u201d on page 85."}, {"label": "section_header", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.5394515991211, "t": 483.1797180175781, "r": 298.85339, "b": 499.07220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9677695631980896, "cells": [{"id": 35, "text": "3.6", "bbox": {"l": 64.800003, "t": 484.20062, "r": 87.400505, "b": 498.96362, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Human resources example", "bbox": {"l": 91.920601, "t": 484.20062, "r": 298.85339, "b": 498.96362, "coord_origin": "TOPLEFT"}}]}, "text": "3.6 Human resources example"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87118530273438, "t": 516.0023193359375, "r": 542.82935, "b": 585.74065, "coord_origin": "TOPLEFT"}, "confidence": 0.9858933687210083, "cells": [{"id": 37, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human ", "bbox": {"l": 136.8, "t": 516.52863, "r": 515.45135, "b": 525.74161, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Resources application (schema). In this sample Human Resources schema, there is an ", "bbox": {"l": 136.79999, "t": 528.52844, "r": 525.09943, "b": 537.74144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "important table that is called EMPLOYEES that contains all the information that is related to ", "bbox": {"l": 136.79999, "t": 540.52824, "r": 542.82935, "b": 549.7412400000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the employees of the company. Among the information that normally is stored in the ", "bbox": {"l": 136.79996, "t": 552.52805, "r": 508.23926, "b": 561.74104, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "EMPLOYEES table, there is some sensitive information that must be hidden from certain ", "bbox": {"l": 136.79996, "t": 564.52785, "r": 530.18805, "b": 573.7408399999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "users:", "bbox": {"l": 136.79996, "t": 576.52765, "r": 163.97581, "b": 585.74065, "coord_origin": "TOPLEFT"}}]}, "text": "This section illustrates with a simple example the usage of RCAC on a typical Human Resources application (schema). In this sample Human Resources schema, there is an important table that is called EMPLOYEES that contains all the information that is related to the employees of the company. Among the information that normally is stored in the EMPLOYEES table, there is some sensitive information that must be hidden from certain users:"}, {"label": "list_item", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.85508728027344, "t": 592.7136840820312, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}, "confidence": 0.9412627220153809, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 593.65686, "r": 141.77995, "b": 602.43161, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Tax_Id information ", "bbox": {"l": 151.20012, "t": 593.50746, "r": 235.38602, "b": 602.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tax_Id information"}, {"label": "list_item", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.5828094482422, "t": 604.7291259765625, "r": 470.03765999999996, "b": 614.775634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9563513398170471, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 605.65666, "r": 141.77995, "b": 614.43141, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "YEAR of the birth date of the employee (hiding the age of the employee)", "bbox": {"l": 151.20012, "t": 605.50726, "r": 470.03765999999996, "b": 614.72026, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH YEAR of the birth date of the employee (hiding the age of the employee)"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1318817138672, "t": 626.7003173828125, "r": 375.29803, "b": 636.9021606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9345581531524658, "cells": [{"id": 47, "text": "In this example, there are four different types of users:", "bbox": {"l": 136.79994, "t": 627.52682, "r": 375.29803, "b": 636.73982, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, there are four different types of users:"}, {"label": "list_item", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.77261352539062, "t": 643.6381225585938, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}, "confidence": 0.9286965727806091, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 644.65604, "r": 141.77994, "b": 653.43079, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Employees", "bbox": {"l": 151.2001, "t": 644.5066400000001, "r": 200.11467, "b": 653.71964, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Employees"}, {"label": "list_item", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.6394805908203, "t": 655.4417724609375, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}, "confidence": 0.9287638664245605, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 656.65584, "r": 141.77994, "b": 665.4306, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Managers", "bbox": {"l": 151.2001, "t": 656.50644, "r": 195.63866, "b": 665.71944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managers"}, {"label": "list_item", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.6507568359375, "t": 667.2589111328125, "r": 276.5639343261719, "b": 677.71925, "coord_origin": "TOPLEFT"}, "confidence": 0.9430361390113831, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 668.65565, "r": 141.77994, "b": 677.4304, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Human Resources Manager", "bbox": {"l": 151.2001, "t": 668.50624, "r": 276.16125, "b": 677.71925, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Human Resources Manager"}, {"label": "list_item", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.71376037597656, "t": 679.4451904296875, "r": 539.58447, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9746949672698975, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.79994, "t": 680.65546, "r": 141.77994, "b": 689.43021, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Consultant/IT Database Engineer (In this example, this person is an external consultant ", "bbox": {"l": 151.2001, "t": 680.50605, "r": 539.58447, "b": 689.71906, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "that is not an employee of the company.)", "bbox": {"l": 151.2001, "t": 692.505859, "r": 330.16245, "b": 701.7188639999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Consultant/IT Database Engineer (In this example, this person is an external consultant that is not an employee of the company.)"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.66419982910156, "t": 713.9166870117188, "r": 546.52435, "b": 735.738243, "coord_origin": "TOPLEFT"}, "confidence": 0.9735910892486572, "cells": [{"id": 57, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC ", "bbox": {"l": 136.79994, "t": 714.525429, "r": 546.52435, "b": 723.738434, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "in this environment.", "bbox": {"l": 136.79994, "t": 726.525238, "r": 223.17204000000004, "b": 735.738243, "coord_origin": "TOPLEFT"}}]}, "text": "The following sections describe step-by-step what is needed to be done to implement RCAC in this environment."}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 141.89248657226562, "t": 416.5281066894531, "r": 541.21985, "b": 451.1007080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9794700741767883, "cells": [{"id": 59, "text": "Note:", "bbox": {"l": 142.8, "t": 417.52872, "r": 168.33246, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": " DB2 does not provide any indication back to the user that the data set requested ", "bbox": {"l": 168.36035, "t": 417.52872, "r": 529.13947, "b": 426.7417, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to ", "bbox": {"l": 142.8, "t": 429.52853, "r": 541.21985, "b": 438.74152, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "the applications accessing the data.", "bbox": {"l": 142.8, "t": 441.52835, "r": 301.22571, "b": 450.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: DB2 does not provide any indication back to the user that the data set requested was restricted or reduced by RCAC. This is by design, as it helps minimize any changes to the applications accessing the data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.83726119995117, "t": 754.3733520507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9199120402336121, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2356185913086, "t": 754.7048950195312, "r": 334.42142, "b": 763.8771362304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9534041881561279, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 38, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5692443847656, "t": 754.7427978515625, "r": 523.60162, "b": 764.1153564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9611534476280212, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6176147460938, "t": 754.3688354492188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9237489104270935, "cells": [{"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.25519561767578, "t": 70.19824981689453, "r": 500.5502, "b": 83.69473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9652671813964844, "cells": [{"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7902069091797, "t": 96.61418914794922, "r": 547.24261, "b": 130.93356323242188, "coord_origin": "TOPLEFT"}, "confidence": 0.967630922794342, "cells": [{"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 137.95547485351562, "r": 510.9772300000001, "b": 172.0559844970703, "coord_origin": "TOPLEFT"}, "confidence": 0.9708675146102905, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.3125762939453, "t": 183.1469268798828, "r": 358.5176696777344, "b": 193.2852325439453, "coord_origin": "TOPLEFT"}, "confidence": 0.8427231907844543, "cells": [{"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.02276611328125, "t": 236.57188415527344, "r": 547.28821, "b": 258.8540954589844, "coord_origin": "TOPLEFT"}, "confidence": 0.931101381778717, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 136.46849060058594, "t": 270.5647277832031, "r": 460.0157775878906, "b": 280.2876892089844, "coord_origin": "TOPLEFT"}, "confidence": 0.8696954846382141, "cells": [{"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 346.67709, "b": 369.45178, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.87002563476562, "t": 383.9129638671875, "r": 545.5683, "b": 406.03265380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9212824106216431, "cells": [{"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.01937866210938, "t": 467.0556945800781, "r": 307.21844482421875, "b": 477.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9000418782234192, "cells": [{"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.10499572753906, "t": 495.4826965332031, "r": 418.56525, "b": 509.02349853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9646822810173035, "cells": [{"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9925994873047, "t": 521.9961547851562, "r": 532.93518, "b": 544.3550415039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9723882675170898, "cells": [{"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 136.8, "t": 551.5098266601562, "r": 357.905, "b": 561.7009887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9077166318893433, "cells": [{"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 151.3660430908203, "t": 567.9530639648438, "r": 313.85294, "b": 578.359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9419451951980591, "cells": [{"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 151.38209533691406, "t": 580.20458984375, "r": 242.83118, "b": 590.8248291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9090039134025574, "cells": [{"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 151.16091918945312, "t": 592.0626220703125, "r": 245.60703, "b": 602.3350219726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9277263879776001, "cells": [{"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 150.5602569580078, "t": 609.2984619140625, "r": 547.29541, "b": 631.7743530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9484594464302063, "cells": [{"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "caption", "bbox": {"l": 136.35838317871094, "t": 643.2757568359375, "r": 285.8739318847656, "b": 653.2639770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.804556131362915, "cells": [{"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 136.8, "t": 661.15802, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 38, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5692443847656, "t": 754.7427978515625, "r": 523.60162, "b": 764.1153564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9611534476280212, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 38, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6176147460938, "t": 754.3688354492188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9237489104270935, "cells": [{"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}, {"label": "section_header", "id": 2, "page_no": 38, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.25519561767578, "t": 70.19824981689453, "r": 500.5502, "b": 83.69473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9652671813964844, "cells": [{"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants"}, {"label": "text", "id": 3, "page_no": 38, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7902069091797, "t": 96.61418914794922, "r": 547.24261, "b": 130.93356323242188, "coord_origin": "TOPLEFT"}, "confidence": 0.967630922794342, "cells": [{"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: QIBM_DB_SECADM\u201d on page 9). Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 38, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 137.95547485351562, "r": 510.9772300000001, "b": 172.0559844970703, "coord_origin": "TOPLEFT"}, "confidence": 0.9708675146102905, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority."}, {"label": "caption", "id": 5, "page_no": 38, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.3125762939453, "t": 183.1469268798828, "r": 358.5176696777344, "b": 193.2852325439453, "coord_origin": "TOPLEFT"}, "confidence": 0.8427231907844543, "cells": [{"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-2 Function ID required to implement RCAC"}, {"label": "text", "id": 6, "page_no": 38, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)"}, {"label": "list_item", "id": 7, "page_no": 38, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.02276611328125, "t": 236.57188415527344, "r": 547.28821, "b": 258.8540954589844, "coord_origin": "TOPLEFT"}, "confidence": 0.931101381778717, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}]}, "text": "2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3."}, {"label": "caption", "id": 8, "page_no": 38, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.46849060058594, "t": 270.5647277832031, "r": 460.0157775878906, "b": 280.2876892089844, "coord_origin": "TOPLEFT"}, "confidence": 0.8696954846382141, "cells": [{"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC"}, {"label": "text", "id": 9, "page_no": 38, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 346.67709, "b": 369.45178, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id =\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "list_item", "id": 10, "page_no": 38, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.87002563476562, "t": 383.9129638671875, "r": 545.5683, "b": 406.03265380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9212824106216431, "cells": [{"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database."}, {"label": "caption", "id": 11, "page_no": 38, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.01937866210938, "t": 467.0556945800781, "r": 307.21844482421875, "b": 477.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9000418782234192, "cells": [{"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-6 Result of the function ID query"}, {"label": "section_header", "id": 12, "page_no": 38, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.10499572753906, "t": 495.4826965332031, "r": 418.56525, "b": 509.02349853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9646822810173035, "cells": [{"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.2 Creating group profiles for the users and their roles"}, {"label": "text", "id": 13, "page_no": 38, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9925994873047, "t": 521.9961547851562, "r": 532.93518, "b": 544.3550415039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9723882675170898, "cells": [{"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}]}, "text": "Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 38, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.8, "t": 551.5098266601562, "r": 357.905, "b": 561.7009887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9077166318893433, "cells": [{"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}]}, "text": "1. In this example, there are three group profiles:"}, {"label": "list_item", "id": 15, "page_no": 38, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 151.3660430908203, "t": 567.9530639648438, "r": 313.85294, "b": 578.359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9419451951980591, "cells": [{"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}]}, "text": "-HR (Human Resource personnel)"}, {"label": "list_item", "id": 16, "page_no": 38, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 151.38209533691406, "t": 580.20458984375, "r": 242.83118, "b": 590.8248291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9090039134025574, "cells": [{"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}]}, "text": "-MGR (Managers)"}, {"label": "list_item", "id": 17, "page_no": 38, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 151.16091918945312, "t": 592.0626220703125, "r": 245.60703, "b": 602.3350219726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9277263879776001, "cells": [{"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}]}, "text": "-EMP (Employees)"}, {"label": "text", "id": 18, "page_no": 38, "cluster": {"id": 18, "label": "text", "bbox": {"l": 150.5602569580078, "t": 609.2984619140625, "r": 547.29541, "b": 631.7743530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9484594464302063, "cells": [{"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}]}, "text": "These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles."}, {"label": "caption", "id": 19, "page_no": 38, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.35838317871094, "t": 643.2757568359375, "r": 285.8739318847656, "b": 653.2639770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.804556131362915, "cells": [{"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-4 Creating group profiles"}, {"label": "text", "id": 20, "page_no": 38, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.8, "t": 661.15802, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}]}, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')"}], "body": [{"label": "section_header", "id": 2, "page_no": 38, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.25519561767578, "t": 70.19824981689453, "r": 500.5502, "b": 83.69473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9652671813964844, "cells": [{"id": 2, "text": "3.6.1", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.918098, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants", "bbox": {"l": 97.557877, "t": 71.33471999999995, "r": 500.5502, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants"}, {"label": "text", "id": 3, "page_no": 38, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7902069091797, "t": 96.61418914794922, "r": 547.24261, "b": 130.93356323242188, "coord_origin": "TOPLEFT"}, "confidence": 0.967630922794342, "cells": [{"id": 4, "text": "The consultant must have authority to implement RCAC, so you must use one of the function ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.24261, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 478.6330899999999, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "QIBM_DB_SECADM\u201d on page 9). Complete the following steps:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 419.59521, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The consultant must have authority to implement RCAC, so you must use one of the function IDs that are provided in DB2 for i (see 2.1.5, \u201cSecurity Administrator function: QIBM_DB_SECADM\u201d on page 9). Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 38, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 137.95547485351562, "r": 510.9772300000001, "b": 172.0559844970703, "coord_origin": "TOPLEFT"}, "confidence": 0.9708675146102905, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.8, "t": 138.52788999999996, "r": 145.29478, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Run the Change Functional Usage (", "bbox": {"l": 148.12639, "t": 138.52788999999996, "r": 310.60699, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHGFCNUSG", "bbox": {"l": 310.61993, "t": 138.67731000000003, "r": 355.55945, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ") CL commands that are shown in ", "bbox": {"l": 355.62021, "t": 138.52788999999996, "r": 507.77319000000006, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Example 3-2. These commands must be run by someone that has the *SECOFR ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 510.9772300000001, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "authority. ", "bbox": {"l": 151.20018, "t": 162.52752999999996, "r": 194.25031, "b": 171.74054, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the Change Functional Usage ( CHGFCNUSG ) CL commands that are shown in Example 3-2. These commands must be run by someone that has the *SECOFR authority."}, {"label": "caption", "id": 5, "page_no": 38, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.3125762939453, "t": 183.1469268798828, "r": 358.5176696777344, "b": 193.2852325439453, "coord_origin": "TOPLEFT"}, "confidence": 0.8427231907844543, "cells": [{"id": 13, "text": "Example 3-2 Function ID required to implement RCAC", "bbox": {"l": 136.8, "t": 184.51801, "r": 357.83176, "b": 192.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-2 Function ID required to implement RCAC"}, {"label": "text", "id": 6, "page_no": 38, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 201.67809999999997, "r": 441.59589, "b": 210.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)", "bbox": {"l": 136.8, "t": 213.67791999999997, "r": 431.63588999999996, "b": 222.45270000000005, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(MCAIN) USAGE(*ALLOWED)"}, {"label": "list_item", "id": 7, "page_no": 38, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.02276611328125, "t": 236.57188415527344, "r": 547.28821, "b": 258.8540954589844, "coord_origin": "TOPLEFT"}, "confidence": 0.931101381778717, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 237.52814, "r": 145.03545, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "There is a way to discover which user profiles have authorization to implement RCAC. This ", "bbox": {"l": 147.78058, "t": 237.52814, "r": 547.28821, "b": 246.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "can be done by running the SQL statement that is shown in Example 3-3.", "bbox": {"l": 151.20016, "t": 249.52795000000003, "r": 474.92215000000004, "b": 258.74096999999995, "coord_origin": "TOPLEFT"}}]}, "text": "2. There is a way to discover which user profiles have authorization to implement RCAC. This can be done by running the SQL statement that is shown in Example 3-3."}, {"label": "caption", "id": 8, "page_no": 38, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.46849060058594, "t": 270.5647277832031, "r": 460.0157775878906, "b": 280.2876892089844, "coord_origin": "TOPLEFT"}, "confidence": 0.8696954846382141, "cells": [{"id": 19, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC", "bbox": {"l": 136.8, "t": 271.51801, "r": 459.29779, "b": 279.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-3 Verifying what user profiles have authorization to implement RCAC"}, {"label": "text", "id": 9, "page_no": 38, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 346.67709, "b": 369.45178, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "SELECT", "bbox": {"l": 136.8, "t": 288.67810000000003, "r": 174.27548, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "function_id,", "bbox": {"l": 186.76732, "t": 288.67810000000003, "r": 261.71829, "b": 297.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "user_name,", "bbox": {"l": 169.62816, "t": 300.67792, "r": 251.69853, "b": 309.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "usage,", "bbox": {"l": 174.76752, "t": 312.67773, "r": 231.71878000000004, "b": 321.45251, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "user_type", "bbox": {"l": 170.62109, "t": 324.67755, "r": 246.71854, "b": 333.45233, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "FROM", "bbox": {"l": 136.8, "t": 336.67736999999994, "r": 161.22635, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "qsys2.function_usage", "bbox": {"l": 179.5461, "t": 336.67736999999994, "r": 301.6778, "b": 345.45215, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHERE", "bbox": {"l": 136.8, "t": 348.67719000000005, "r": 163.70732, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "function_id =\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 179.85172, "t": 348.67719000000005, "r": 346.67709, "b": 357.45196999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 360.677, "r": 182.75941, "b": 369.45178, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "user_name;", "bbox": {"l": 194.24927, "t": 360.677, "r": 251.69853, "b": 369.45178, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM qsys2.function_usage WHERE function_id =\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "list_item", "id": 10, "page_no": 38, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.87002563476562, "t": 383.9129638671875, "r": 545.5683, "b": 406.03265380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9212824106216431, "cells": [{"id": 31, "text": "3.", "bbox": {"l": 136.8, "t": 384.52722, "r": 145.19109, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or ", "bbox": {"l": 147.9881, "t": 384.52722, "r": 545.5683, "b": 393.7402, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HBEDOYA can implement RCAC in the Human Resources database.", "bbox": {"l": 151.20016, "t": 396.52703999999994, "r": 456.21323, "b": 405.74002, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the SQL statement is shown in Figure 3-6. In this example, either MCAIN or HBEDOYA can implement RCAC in the Human Resources database."}, {"label": "caption", "id": 11, "page_no": 38, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.01937866210938, "t": 467.0556945800781, "r": 307.21844482421875, "b": 477.0780029296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9000418782234192, "cells": [{"id": 34, "text": "Figure 3-6 Result of the function ID query", "bbox": {"l": 136.8, "t": 468.01801, "r": 306.4032, "b": 476.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-6 Result of the function ID query"}, {"label": "section_header", "id": 12, "page_no": 38, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.10499572753906, "t": 495.4826965332031, "r": 418.56525, "b": 509.02349853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9646822810173035, "cells": [{"id": 35, "text": "3.6.2", "bbox": {"l": 64.800003, "t": 496.85464, "r": 93.871941, "b": 508.84262, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 496.85464, "r": 418.56525, "b": 508.84262, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.2 Creating group profiles for the users and their roles"}, {"label": "text", "id": 13, "page_no": 38, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9925994873047, "t": 521.9961547851562, "r": 532.93518, "b": 544.3550415039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9723882675170898, "cells": [{"id": 37, "text": "Assuming that all the employees have a valid user profile, the next step is to create group ", "bbox": {"l": 136.8, "t": 523.00864, "r": 532.93518, "b": 532.22162, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "profiles to group the employees. Complete the following steps:", "bbox": {"l": 136.8, "t": 535.00842, "r": 411.17709, "b": 544.22144, "coord_origin": "TOPLEFT"}}]}, "text": "Assuming that all the employees have a valid user profile, the next step is to create group profiles to group the employees. Complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 38, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.8, "t": 551.5098266601562, "r": 357.905, "b": 561.7009887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9077166318893433, "cells": [{"id": 39, "text": "1.", "bbox": {"l": 136.8, "t": 551.98825, "r": 145.35057, "b": 561.20125, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "In this example, there are three group profiles:", "bbox": {"l": 148.20076, "t": 551.98825, "r": 357.905, "b": 561.20125, "coord_origin": "TOPLEFT"}}]}, "text": "1. In this example, there are three group profiles:"}, {"label": "list_item", "id": 15, "page_no": 38, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 151.3660430908203, "t": 567.9530639648438, "r": 313.85294, "b": 578.359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9419451951980591, "cells": [{"id": 41, "text": "-", "bbox": {"l": 152.03979, "t": 568.96806, "r": 157.56958, "b": 578.18106, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "HR (Human Resource personnel)", "bbox": {"l": 165.59933, "t": 568.96806, "r": 313.85294, "b": 578.18106, "coord_origin": "TOPLEFT"}}]}, "text": "-HR (Human Resource personnel)"}, {"label": "list_item", "id": 16, "page_no": 38, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 151.38209533691406, "t": 580.20458984375, "r": 242.83118, "b": 590.8248291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9090039134025574, "cells": [{"id": 43, "text": "-", "bbox": {"l": 152.03979, "t": 580.96786, "r": 157.6154, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "MGR (Managers)", "bbox": {"l": 165.59933, "t": 580.96786, "r": 242.83118, "b": 590.1808599999999, "coord_origin": "TOPLEFT"}}]}, "text": "-MGR (Managers)"}, {"label": "list_item", "id": 17, "page_no": 38, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 151.16091918945312, "t": 592.0626220703125, "r": 245.60703, "b": 602.3350219726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9277263879776001, "cells": [{"id": 45, "text": "-", "bbox": {"l": 152.03979, "t": 592.96767, "r": 157.60046, "b": 602.18066, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "EMP (Employees)", "bbox": {"l": 165.59933, "t": 592.96767, "r": 245.60703, "b": 602.18066, "coord_origin": "TOPLEFT"}}]}, "text": "-EMP (Employees)"}, {"label": "text", "id": 18, "page_no": 38, "cluster": {"id": 18, "label": "text", "bbox": {"l": 150.5602569580078, "t": 609.2984619140625, "r": 547.29541, "b": 631.7743530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9484594464302063, "cells": [{"id": 47, "text": "These are created by creating user profiles with no password. Example 3-4 shows the ", "bbox": {"l": 151.20016, "t": 610.0072299999999, "r": 532.71594, "b": 619.22023, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Create User Profile (", "bbox": {"l": 151.20016, "t": 622.00703, "r": 241.71167, "b": 631.22003, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CRTUSRPRF", "bbox": {"l": 241.74054, "t": 622.15643, "r": 286.68005, "b": 630.98099, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ") CL commands that you use to create these group profiles.", "bbox": {"l": 286.68005, "t": 622.00703, "r": 547.29541, "b": 631.22003, "coord_origin": "TOPLEFT"}}]}, "text": "These are created by creating user profiles with no password. Example 3-4 shows the Create User Profile ( CRTUSRPRF ) CL commands that you use to create these group profiles."}, {"label": "caption", "id": 19, "page_no": 38, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.35838317871094, "t": 643.2757568359375, "r": 285.8739318847656, "b": 653.2639770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.804556131362915, "cells": [{"id": 51, "text": "Example 3-4 Creating group profiles", "bbox": {"l": 136.8, "t": 643.99789, "r": 285.5574, "b": 652.32291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-4 Creating group profiles"}, {"label": "text", "id": 20, "page_no": 38, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.8, "t": 661.15802, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 52, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group')", "bbox": {"l": 136.8, "t": 661.15802, "r": 416.63611, "b": 669.93278, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group')", "bbox": {"l": 136.8, "t": 673.15783, "r": 411.65613, "b": 681.93259, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')", "bbox": {"l": 136.8, "t": 685.15764, "r": 441.59589, "b": 693.9323959999999, "coord_origin": "TOPLEFT"}}]}, "text": "CRTUSRPRF USRPRF(EMP) PASSWORD() TEXT('Employees Group') CRTUSRPRF USRPRF(MGR) PASSWORD() TEXT('Managers Group') CRTUSRPRF USRPRF(HR) PASSWORD() TEXT('Human Resources Group')"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 38, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5692443847656, "t": 754.7427978515625, "r": 523.60162, "b": 764.1153564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9611534476280212, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 38, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6176147460938, "t": 754.3688354492188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9237489104270935, "cells": [{"id": 1, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}]}}, {"page_no": 39, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.88653564453125, "t": 754.3186645507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9114106297492981, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27753448486328, "t": 754.6685180664062, "r": 334.42142, "b": 763.9840087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486663937568665, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.0978240966797, "t": 70.40028381347656, "r": 547.26752, "b": 117.03543853759766, "coord_origin": "TOPLEFT"}, "confidence": 0.9766601324081421, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.17131805419922, "t": 168.79916381835938, "r": 360.16098, "b": 182.6798553466797, "coord_origin": "TOPLEFT"}, "confidence": 0.961124837398529, "cells": [{"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.1033477783203, "t": 195.17257690429688, "r": 540.30652, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.953971803188324, "cells": [{"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.76841735839844, "t": 224.45919799804688, "r": 547.2157, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9609369039535522, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.413330078125, "t": 258.6246643066406, "r": 334.6294250488281, "b": 268.3210754394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6967653632164001, "cells": [{"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42640686035156, "t": 275.64599609375, "r": 406.61636, "b": 286.7776184082031, "coord_origin": "TOPLEFT"}, "confidence": 0.6531516313552856, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.4588623046875, "t": 299.9428405761719, "r": 545.10712, "b": 322.47479248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9646008610725403, "cells": [{"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "caption", "bbox": {"l": 136.30203247070312, "t": 375.2716369628906, "r": 272.9559326171875, "b": 384.7872009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.7269786596298218, "cells": [{"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.12722778320312, "t": 401.2595520019531, "r": 547.25177, "b": 423.76806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9607868790626526, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.4648895263672, "t": 435.44384765625, "r": 369.71875, "b": 444.9762268066406, "coord_origin": "TOPLEFT"}, "confidence": 0.7871338725090027, "cells": [{"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 453.31812, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 156.851318359375, "t": 134.62420654296875, "r": 533.43896, "b": 145.3269805908203, "coord_origin": "TOPLEFT"}, "confidence": 0.901655912399292, "cells": [{"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "picture", "bbox": {"l": 136.4460906982422, "t": 337.62408447265625, "r": 227.48138427734375, "b": 370.2557067871094, "coord_origin": "TOPLEFT"}, "confidence": 0.6461378931999207, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.88653564453125, "t": 754.3186645507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9114106297492981, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27753448486328, "t": 754.6685180664062, "r": 334.42142, "b": 763.9840087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486663937568665, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0978240966797, "t": 70.40028381347656, "r": 547.26752, "b": 117.03543853759766, "coord_origin": "TOPLEFT"}, "confidence": 0.9766601324081421, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS)."}, {"label": "section_header", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.17131805419922, "t": 168.79916381835938, "r": 360.16098, "b": 182.6798553466797, "coord_origin": "TOPLEFT"}, "confidence": 0.961124837398529, "cells": [{"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.3 Demonstrating data access without RCAC"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.1033477783203, "t": 195.17257690429688, "r": 540.30652, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.953971803188324, "cells": [{"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.76841735839844, "t": 224.45919799804688, "r": 547.2157, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9609369039535522, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table."}, {"label": "caption", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.413330078125, "t": 258.6246643066406, "r": 334.6294250488281, "b": 268.3210754394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6967653632164001, "cells": [{"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-5 Counting the number of employees"}, {"label": "text", "id": 7, "page_no": 39, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42640686035156, "t": 275.64599609375, "r": 406.61636, "b": 286.7776184082031, "coord_origin": "TOPLEFT"}, "confidence": 0.6531516313552856, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "text", "id": 8, "page_no": 39, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.4588623046875, "t": 299.9428405761719, "r": 545.10712, "b": 322.47479248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9646008610725403, "cells": [{"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of the company."}, {"label": "caption", "id": 9, "page_no": 39, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.30203247070312, "t": 375.2716369628906, "r": 272.9559326171875, "b": 384.7872009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.7269786596298218, "cells": [{"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-7 Number of employees"}, {"label": "list_item", "id": 10, "page_no": 39, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.12722778320312, "t": 401.2595520019531, "r": 547.25177, "b": 423.76806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9607868790626526, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}]}, "text": "2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are."}, {"label": "caption", "id": 11, "page_no": 39, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.4648895263672, "t": 435.44384765625, "r": 369.71875, "b": 444.9762268066406, "coord_origin": "TOPLEFT"}, "confidence": 0.7871338725090027, "cells": [{"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-6 Displaying the information of the Employees"}, {"label": "text", "id": 12, "page_no": 39, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 453.31812, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 13, "page_no": 39, "cluster": {"id": 13, "label": "text", "bbox": {"l": 156.851318359375, "t": 134.62420654296875, "r": 533.43896, "b": 145.3269805908203, "coord_origin": "TOPLEFT"}, "confidence": 0.901655912399292, "cells": [{"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile."}, {"label": "picture", "id": 14, "page_no": 39, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 136.4460906982422, "t": 337.62408447265625, "r": 227.48138427734375, "b": 370.2557067871094, "coord_origin": "TOPLEFT"}, "confidence": 0.6461378931999207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0978240966797, "t": 70.40028381347656, "r": 547.26752, "b": 117.03543853759766, "coord_origin": "TOPLEFT"}, "confidence": 0.9766601324081421, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15074, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "You now must assign users to a group profile. Employees go in to the EMP group profile, ", "bbox": {"l": 147.93431, "t": 71.50867000000005, "r": 544.18408, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Managers go into the MGR group profile, and Human Resource employees go into the HR ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24072, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group profile. For simplicity, this example selects one employee (DSSMITH), one manager ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 547.26752, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "(TQSPENSER), and one HR analyst (VGLUCCHESS).", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 393.52896, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. You now must assign users to a group profile. Employees go in to the EMP group profile, Managers go into the MGR group profile, and Human Resource employees go into the HR group profile. For simplicity, this example selects one employee (DSSMITH), one manager (TQSPENSER), and one HR analyst (VGLUCCHESS)."}, {"label": "section_header", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.17131805419922, "t": 168.79916381835938, "r": 360.16098, "b": 182.6798553466797, "coord_origin": "TOPLEFT"}, "confidence": 0.961124837398529, "cells": [{"id": 7, "text": "3.6.3", "bbox": {"l": 64.800003, "t": 170.33471999999995, "r": 93.988304, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Demonstrating data access without RCAC", "bbox": {"l": 97.636864, "t": 170.33471999999995, "r": 360.16098, "b": 182.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.3 Demonstrating data access without RCAC"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.1033477783203, "t": 195.17257690429688, "r": 540.30652, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.953971803188324, "cells": [{"id": 9, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access ", "bbox": {"l": 136.8, "t": 196.48870999999997, "r": 540.30652, "b": 205.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "without RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 208.48852999999997, "r": 334.59366, "b": 217.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Before implementing RCAC, run some simple SQL statements to demonstrate data access without RCAC. Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.76841735839844, "t": 224.45919799804688, "r": 547.2157, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9609369039535522, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.8, "t": 225.52808000000005, "r": 145.08882, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The first SQL statement, which is shown in Example 3-5, basically counts the total number ", "bbox": {"l": 147.85175, "t": 225.52808000000005, "r": 547.2157, "b": 234.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "of rows in the EMPLOYEES table.", "bbox": {"l": 151.19917, "t": 237.52788999999996, "r": 301.134, "b": 246.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement, which is shown in Example 3-5, basically counts the total number of rows in the EMPLOYEES table."}, {"label": "caption", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.413330078125, "t": 258.6246643066406, "r": 334.6294250488281, "b": 268.3210754394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6967653632164001, "cells": [{"id": 14, "text": "Example 3-5 Counting the number of employees", "bbox": {"l": 136.8, "t": 259.51801, "r": 334.13672, "b": 267.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-5 Counting the number of employees"}, {"label": "text", "id": 7, "page_no": 39, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42640686035156, "t": 275.64599609375, "r": 406.61636, "b": 286.7776184082031, "coord_origin": "TOPLEFT"}, "confidence": 0.6531516313552856, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 276.6781, "r": 406.61636, "b": 285.45287999999994, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "text", "id": 8, "page_no": 39, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.4588623046875, "t": 299.9428405761719, "r": 545.10712, "b": 322.47479248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9646008610725403, "cells": [{"id": 16, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of ", "bbox": {"l": 151.20016, "t": 300.52831999999995, "r": 545.10712, "b": 309.7413, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the company.", "bbox": {"l": 151.20016, "t": 312.52814000000006, "r": 210.05083, "b": 321.74112, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-7, which is the total number of employees of the company."}, {"label": "caption", "id": 9, "page_no": 39, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.30203247070312, "t": 375.2716369628906, "r": 272.9559326171875, "b": 384.7872009277344, "coord_origin": "TOPLEFT"}, "confidence": 0.7269786596298218, "cells": [{"id": 18, "text": "Figure 3-7 Number of employees", "bbox": {"l": 136.8, "t": 376.21799000000004, "r": 272.65857, "b": 384.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-7 Number of employees"}, {"label": "list_item", "id": 10, "page_no": 39, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.12722778320312, "t": 401.2595520019531, "r": 547.25177, "b": 423.76806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9607868790626526, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.8, "t": 402.1687299999999, "r": 145.05576, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have ", "bbox": {"l": 147.80766, "t": 402.1687299999999, "r": 547.25177, "b": 411.38171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "read access to the table, you see all the rows no matter who you are.", "bbox": {"l": 151.20016, "t": 414.16855000000004, "r": 455.22919, "b": 423.38153, "coord_origin": "TOPLEFT"}}]}, "text": "2. Run a second SQL statement (shown in Example 3-6) that lists the employees. If you have read access to the table, you see all the rows no matter who you are."}, {"label": "caption", "id": 11, "page_no": 39, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.4648895263672, "t": 435.44384765625, "r": 369.71875, "b": 444.9762268066406, "coord_origin": "TOPLEFT"}, "confidence": 0.7871338725090027, "cells": [{"id": 22, "text": "Example 3-6 Displaying the information of the Employees", "bbox": {"l": 136.8, "t": 436.21799000000004, "r": 369.315, "b": 444.54299999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-6 Displaying the information of the Employees"}, {"label": "text", "id": 12, "page_no": 39, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 453.31812, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "SELECT", "bbox": {"l": 136.8, "t": 453.31812, "r": 171.26956, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "EMPLOYEE_ID,", "bbox": {"l": 182.75941, "t": 453.31812, "r": 251.69853, "b": 462.0929, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "LAST_NAME, ", "bbox": {"l": 166.11162, "t": 465.31793, "r": 246.71854, "b": 474.09271, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "JOB_DESCRIPTION,", "bbox": {"l": 163.77567, "t": 477.31775, "r": 271.67828, "b": 486.09253, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "DATE_OF_BIRTH,", "bbox": {"l": 164.55962, "t": 489.31757, "r": 261.71829, "b": 498.09235, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TAX_ID,", "bbox": {"l": 169.505, "t": 501.31738, "r": 226.73877000000002, "b": 510.09216, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "USER_ID,", "bbox": {"l": 168.43959, "t": 513.3172, "r": 231.71878000000004, "b": 522.0919799999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 162.86575, "t": 525.31702, "r": 286.67804, "b": 534.0917999999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " FROM", "bbox": {"l": 136.8, "t": 537.31683, "r": 164.55519, "b": 546.09158, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 181.20831, "t": 537.31683, "r": 286.67804, "b": 546.09158, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 13, "page_no": 39, "cluster": {"id": 13, "label": "text", "bbox": {"l": 156.851318359375, "t": 134.62420654296875, "r": 533.43896, "b": 145.3269805908203, "coord_origin": "TOPLEFT"}, "confidence": 0.901655912399292, "cells": [{"id": 33, "text": "Note:", "bbox": {"l": 157.2, "t": 135.52855999999997, "r": 182.73245, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": " Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile.", "bbox": {"l": 182.76035, "t": 135.52855999999997, "r": 533.43896, "b": 144.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Neither of the consultants (MCAIN and HBEDOYA) belong to any group profile."}, {"label": "picture", "id": 14, "page_no": 39, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 136.4460906982422, "t": 337.62408447265625, "r": 227.48138427734375, "b": 370.2557067871094, "coord_origin": "TOPLEFT"}, "confidence": 0.6461378931999207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.88653564453125, "t": 754.3186645507812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9114106297492981, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27753448486328, "t": 754.6685180664062, "r": 334.42142, "b": 763.9840087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486663937568665, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 40, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.6938781738281, "t": 754.8302612304688, "r": 523.60162, "b": 764.0167236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9586459994316101, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7025146484375, "t": 754.375244140625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9186720848083496, "cells": [{"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 150.51434326171875, "t": 70.7142562866211, "r": 356.2522, "b": 81.25257873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.7506248354911804, "cells": [{"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.24310302734375, "t": 470.6240539550781, "r": 276.3370361328125, "b": 479.94299, "coord_origin": "TOPLEFT"}, "confidence": 0.927272617816925, "cells": [{"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.31729888916016, "t": 499.6622314453125, "r": 339.95895, "b": 513.0746459960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9666332602500916, "cells": [{"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.47174072265625, "t": 526.1157836914062, "r": 484.33429, "b": 536.0692749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.920616090297699, "cells": [{"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.80002, "t": 542.7721557617188, "r": 519.3288, "b": 565.2183837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9658254981040955, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.23526000976562, "t": 572.105712890625, "r": 392.51511, "b": 582.262939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449333548545837, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.32948303222656, "t": 584.3190307617188, "r": 484.94476000000003, "b": 594.1929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476761221885681, "cells": [{"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.46128845214844, "t": 596.0510864257812, "r": 371.57324, "b": 606.2974243164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9385150671005249, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.29678344726562, "t": 608.191162109375, "r": 415.18304, "b": 618.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9464589953422546, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 40, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6938781738281, "t": 754.8302612304688, "r": 523.60162, "b": 764.0167236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9586459994316101, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 40, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7025146484375, "t": 754.375244140625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9186720848083496, "cells": [{"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}, {"label": "section_header", "id": 2, "page_no": 40, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 150.51434326171875, "t": 70.7142562866211, "r": 356.2522, "b": 81.25257873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.7506248354911804, "cells": [{"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-8."}, {"label": "caption", "id": 3, "page_no": 40, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.24310302734375, "t": 470.6240539550781, "r": 276.3370361328125, "b": 479.94299, "coord_origin": "TOPLEFT"}, "confidence": 0.927272617816925, "cells": [{"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-8 List of employees without RCAC enabled"}, {"label": "section_header", "id": 4, "page_no": 40, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.31729888916016, "t": 499.6622314453125, "r": 339.95895, "b": 513.0746459960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9666332602500916, "cells": [{"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.4 Defining and creating row permissions"}, {"label": "text", "id": 5, "page_no": 40, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.47174072265625, "t": 526.1157836914062, "r": 484.33429, "b": 536.0692749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.920616090297699, "cells": [{"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}]}, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:"}, {"label": "list_item", "id": 6, "page_no": 40, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80002, "t": 542.7721557617188, "r": 519.3288, "b": 565.2183837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9658254981040955, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by defining a row permission. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 7, "page_no": 40, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.23526000976562, "t": 572.105712890625, "r": 392.51511, "b": 582.262939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449333548545837, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources employees can see all the rows."}, {"label": "list_item", "id": 8, "page_no": 40, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.32948303222656, "t": 584.3190307617188, "r": 484.94476000000003, "b": 594.1929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476761221885681, "cells": [{"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see only information for the employees that they manage."}, {"label": "list_item", "id": 9, "page_no": 40, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.46128845214844, "t": 596.0510864257812, "r": 371.57324, "b": 606.2974243164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9385150671005249, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own information."}, {"label": "list_item", "id": 10, "page_no": 40, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.29678344726562, "t": 608.191162109375, "r": 415.18304, "b": 618.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9464589953422546, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}]}, "text": "-Consultants are not allowed to see any rows in the table."}], "body": [{"label": "section_header", "id": 2, "page_no": 40, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 150.51434326171875, "t": 70.7142562866211, "r": 356.2522, "b": 81.25257873535156, "coord_origin": "TOPLEFT"}, "confidence": 0.7506248354911804, "cells": [{"id": 2, "text": "The result of this query is shown in Figure 3-8.", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 356.2522, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "The result of this query is shown in Figure 3-8."}, {"label": "caption", "id": 3, "page_no": 40, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.24310302734375, "t": 470.6240539550781, "r": 276.3370361328125, "b": 479.94299, "coord_origin": "TOPLEFT"}, "confidence": 0.927272617816925, "cells": [{"id": 3, "text": "Figure 3-8 List of employees without RCAC enabled", "bbox": {"l": 64.800003, "t": 471.61798, "r": 275.62769, "b": 479.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-8 List of employees without RCAC enabled"}, {"label": "section_header", "id": 4, "page_no": 40, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.31729888916016, "t": 499.6622314453125, "r": 339.95895, "b": 513.0746459960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9666332602500916, "cells": [{"id": 4, "text": "3.6.4", "bbox": {"l": 64.800003, "t": 500.45462, "r": 94.008797, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 500.45462, "r": 339.95895, "b": 512.4426000000001, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.4 Defining and creating row permissions"}, {"label": "text", "id": 5, "page_no": 40, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.47174072265625, "t": 526.1157836914062, "r": 484.33429, "b": 536.0692749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.920616090297699, "cells": [{"id": 6, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:", "bbox": {"l": 136.8, "t": 526.60861, "r": 484.33429, "b": 535.82159, "coord_origin": "TOPLEFT"}}]}, "text": "Implement RCAC on the EMPLOYEES table by completing the following steps:"}, {"label": "list_item", "id": 6, "page_no": 40, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80002, "t": 542.7721557617188, "r": 519.3288, "b": 565.2183837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9658254981040955, "cells": [{"id": 7, "text": "1.", "bbox": {"l": 136.80002, "t": 543.58842, "r": 145.20392, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Start by defining a row permission. In this example, the rules to enforce include the ", "bbox": {"l": 148.00522, "t": 543.58842, "r": 519.3288, "b": 552.80142, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "following ones:", "bbox": {"l": 151.20018, "t": 555.5882300000001, "r": 216.83159000000003, "b": 564.8012200000001, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by defining a row permission. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 7, "page_no": 40, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.23526000976562, "t": 572.105712890625, "r": 392.51511, "b": 582.262939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9449333548545837, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03981, "t": 572.62779, "r": 157.57359, "b": 581.84079, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Human Resources employees can see all the rows.", "bbox": {"l": 165.59937, "t": 572.62779, "r": 392.51511, "b": 581.84079, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources employees can see all the rows."}, {"label": "list_item", "id": 8, "page_no": 40, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.32948303222656, "t": 584.3190307617188, "r": 484.94476000000003, "b": 594.1929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476761221885681, "cells": [{"id": 12, "text": "-", "bbox": {"l": 152.03981, "t": 584.6275899999999, "r": 157.60745, "b": 593.84059, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Managers can see only information for the employees that they manage.", "bbox": {"l": 165.59935, "t": 584.6275899999999, "r": 484.94476000000003, "b": 593.84059, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see only information for the employees that they manage."}, {"label": "list_item", "id": 9, "page_no": 40, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.46128845214844, "t": 596.0510864257812, "r": 371.57324, "b": 606.2974243164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9385150671005249, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03981, "t": 596.6274, "r": 157.60446, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Employees can see only their own information.", "bbox": {"l": 165.59935, "t": 596.6274, "r": 371.57324, "b": 605.8403900000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own information."}, {"label": "list_item", "id": 10, "page_no": 40, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.29678344726562, "t": 608.191162109375, "r": 415.18304, "b": 618.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9464589953422546, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03981, "t": 608.6272, "r": 157.56662, "b": 617.84019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Consultants are not allowed to see any rows in the table.", "bbox": {"l": 165.59937, "t": 608.6272, "r": 415.18304, "b": 617.84019, "coord_origin": "TOPLEFT"}}]}, "text": "-Consultants are not allowed to see any rows in the table."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 40, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6938781738281, "t": 754.8302612304688, "r": 523.60162, "b": 764.0167236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9586459994316101, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 40, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7025146484375, "t": 754.375244140625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9186720848083496, "cells": [{"id": 1, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}]}}, {"page_no": 41, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85331726074219, "t": 754.3814086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9175847768783569, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32594299316406, "t": 754.67138671875, "r": 334.42142, "b": 763.926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9555695652961731, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 150.2159423828125, "t": 70.65572357177734, "r": 538.5603, "b": 81.11334991455078, "coord_origin": "TOPLEFT"}, "confidence": 0.9370454549789429, "cells": [{"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3914031982422, "t": 92.4392318725586, "r": 383.7792053222656, "b": 102.14237213134766, "coord_origin": "TOPLEFT"}, "confidence": 0.8971781134605408, "cells": [{"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "code", "bbox": {"l": 134.622802734375, "t": 105.0101089477539, "r": 547.7505493164062, "b": 244.519775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7303169369697571, "cells": [{"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.9988250732422, "t": 253.1900634765625, "r": 539.85822, "b": 287.8277282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9342305064201355, "cells": [{"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 64.43289947509766, "t": 491.4513244628906, "r": 331.18115234375, "b": 500.79241943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436566233634949, "cells": [{"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.18317413330078, "t": 520.4345703125, "r": 327.40588, "b": 533.9813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9629243612289429, "cells": [{"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.35951232910156, "t": 546.794189453125, "r": 526.41431, "b": 568.794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.968765139579773, "cells": [{"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 136.79542541503906, "t": 575.26025390625, "r": 538.78564, "b": 597.7650756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9648330807685852, "cells": [{"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.26760864257812, "t": 604.6339721679688, "r": 467.65625, "b": 614.5850830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502057433128357, "cells": [{"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.2598114013672, "t": 621.2564086914062, "r": 375.38675, "b": 631.7196044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9498502016067505, "cells": [{"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 151.43798828125, "t": 638.585205078125, "r": 547.25653, "b": 648.8189086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9482884407043457, "cells": [{"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.7313232421875, "t": 655.2977905273438, "r": 530.06067, "b": 665.58984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9218307137489319, "cells": [{"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "caption", "bbox": {"l": 136.27670288085938, "t": 677.1241455078125, "r": 403.9977722167969, "b": 686.8948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098079204559326, "cells": [{"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 136.8, "t": 695.418121, "r": 416.63611, "b": 728.192497, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "picture", "bbox": {"l": 64.00577545166016, "t": 302.1222839355469, "r": 547.3966674804688, "b": 489.23321533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799203276634216, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 41, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85331726074219, "t": 754.3814086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9175847768783569, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 41, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32594299316406, "t": 754.67138671875, "r": 334.42142, "b": 763.926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9555695652961731, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 41, "cluster": {"id": 2, "label": "text", "bbox": {"l": 150.2159423828125, "t": 70.65572357177734, "r": 538.5603, "b": 81.11334991455078, "coord_origin": "TOPLEFT"}, "confidence": 0.9370454549789429, "cells": [{"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7."}, {"label": "caption", "id": 3, "page_no": 41, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3914031982422, "t": 92.4392318725586, "r": 383.7792053222656, "b": 102.14237213134766, "coord_origin": "TOPLEFT"}, "confidence": 0.8971781134605408, "cells": [{"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-7 Creating a permission for the EMPLOYEE table"}, {"label": "code", "id": 4, "page_no": 41, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.622802734375, "t": 105.0101089477539, "r": 547.7505493164062, "b": 244.519775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7303169369697571, "cells": [{"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ;"}, {"label": "list_item", "id": 5, "page_no": 41, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.9988250732422, "t": 253.1900634765625, "r": 539.85822, "b": 287.8277282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9342305064201355, "cells": [{"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16."}, {"label": "caption", "id": 6, "page_no": 41, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.43289947509766, "t": 491.4513244628906, "r": 331.18115234375, "b": 500.79241943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436566233634949, "cells": [{"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-9 Row permissions that are shown in System i Navigator"}, {"label": "section_header", "id": 7, "page_no": 41, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.18317413330078, "t": 520.4345703125, "r": 327.40588, "b": 533.9813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9629243612289429, "cells": [{"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.5 Defining and creating column masks"}, {"label": "text", "id": 8, "page_no": 41, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.35951232910156, "t": 546.794189453125, "r": 526.41431, "b": 568.794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.968765139579773, "cells": [{"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Define the different masks for the columns that are sensitive by completing the following steps:"}, {"label": "list_item", "id": 9, "page_no": 41, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.79542541503906, "t": 575.26025390625, "r": 538.78564, "b": 597.7650756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9648330807685852, "cells": [{"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 10, "page_no": 41, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.26760864257812, "t": 604.6339721679688, "r": 467.65625, "b": 614.5850830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502057433128357, "cells": [{"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the entire date of birth of the employees."}, {"label": "list_item", "id": 11, "page_no": 41, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.2598114013672, "t": 621.2564086914062, "r": 375.38675, "b": 631.7196044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9498502016067505, "cells": [{"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own date of birth."}, {"label": "list_item", "id": 12, "page_no": 41, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.43798828125, "t": 638.585205078125, "r": 547.25653, "b": 648.8189086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9482884407043457, "cells": [{"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see the date of birth of their employees masked with YEAR being 9999."}, {"label": "text", "id": 13, "page_no": 41, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.7313232421875, "t": 655.2977905273438, "r": 530.06067, "b": 665.58984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9218307137489319, "cells": [{"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8."}, {"label": "caption", "id": 14, "page_no": 41, "cluster": {"id": 14, "label": "caption", "bbox": {"l": 136.27670288085938, "t": 677.1241455078125, "r": 403.9977722167969, "b": 686.8948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098079204559326, "cells": [{"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column"}, {"label": "text", "id": 15, "page_no": 41, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.8, "t": 695.418121, "r": 416.63611, "b": 728.192497, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH"}, {"label": "picture", "id": 16, "page_no": 41, "cluster": {"id": 16, "label": "picture", "bbox": {"l": 64.00577545166016, "t": 302.1222839355469, "r": 547.3966674804688, "b": 489.23321533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799203276634216, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 41, "cluster": {"id": 2, "label": "text", "bbox": {"l": 150.2159423828125, "t": 70.65572357177734, "r": 538.5603, "b": 81.11334991455078, "coord_origin": "TOPLEFT"}, "confidence": 0.9370454549789429, "cells": [{"id": 2, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7.", "bbox": {"l": 151.2, "t": 71.50867000000005, "r": 538.5603, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this row permission, run the SQL statement that is shown in Example 3-7."}, {"label": "caption", "id": 3, "page_no": 41, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3914031982422, "t": 92.4392318725586, "r": 383.7792053222656, "b": 102.14237213134766, "coord_origin": "TOPLEFT"}, "confidence": 0.8971781134605408, "cells": [{"id": 3, "text": "Example 3-7 Creating a permission for the EMPLOYEE table", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 383.20923, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-7 Creating a permission for the EMPLOYEE table"}, {"label": "code", "id": 4, "page_no": 41, "cluster": {"id": 4, "label": "code", "bbox": {"l": 134.622802734375, "t": 105.0101089477539, "r": 547.7505493164062, "b": 244.519775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7303169369697571, "cells": [{"id": 4, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES", "bbox": {"l": 136.8, "t": 110.65808000000015, "r": 406.61636, "b": 119.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON", "bbox": {"l": 136.8, "t": 122.65790000000004, "r": 149.79282, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES", "bbox": {"l": 188.77129, "t": 122.65790000000004, "r": 396.65637, "b": 131.43268, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FOR ROWS", "bbox": {"l": 136.8, "t": 134.65770999999995, "r": 176.75952, "b": 143.4325, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "WHERE", "bbox": {"l": 136.8, "t": 146.65752999999995, "r": 165.35201, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 )", "bbox": {"l": 193.90401, "t": 146.65752999999995, "r": 496.55518, "b": 155.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "OR", "bbox": {"l": 136.8, "t": 158.65734999999995, "r": 148.62584, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 184.10336, "t": 158.65734999999995, "r": 491.57513, "b": 167.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "AND", "bbox": {"l": 136.8, "t": 170.65716999999995, "r": 154.73547, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER", "bbox": {"l": 184.62791, "t": 170.65716999999995, "r": 471.5954, "b": 179.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "OR EMPLOYEES . USER_ID = SESSION_USER ) ) ", "bbox": {"l": 181.77367, "t": 182.65697999999998, "r": 451.6156, "b": 191.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "OR", "bbox": {"l": 136.8, "t": 194.65679999999998, "r": 148.62584, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1", "bbox": {"l": 184.10336, "t": 194.65679999999998, "r": 491.57513, "b": 203.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "AND EMPLOYEES . USER_ID = SESSION_USER )", "bbox": {"l": 182.19513, "t": 206.65661999999998, "r": 441.59589, "b": 215.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 136.8, "t": 218.65643, "r": 251.69855000000004, "b": 227.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 230.65625, "r": 181.73952, "b": 239.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION HR_SCHEMA.PERMISSION1_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR ROWS WHERE ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND ( EMPLOYEES . MANAGER_OF_EMPLOYEE = SESSION_USER OR EMPLOYEES . USER_ID = SESSION_USER ) ) OR ( VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 AND EMPLOYEES . USER_ID = SESSION_USER ) ENFORCED FOR ALL ACCESS ENABLE ;"}, {"label": "list_item", "id": 5, "page_no": 41, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.9988250732422, "t": 253.1900634765625, "r": 539.85822, "b": 287.8277282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9342305064201355, "cells": [{"id": 20, "text": "2.", "bbox": {"l": 136.8, "t": 254.50647000000004, "r": 145.20389, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Look at the definition of the table and see the permissions, as shown in Figure 3-9. ", "bbox": {"l": 148.00517, "t": 254.50647000000004, "r": 518.79407, "b": 263.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in ", "bbox": {"l": 151.20016, "t": 266.50629000000004, "r": 539.85822, "b": 275.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.1.2, \u201cEnabling and activating RCAC\u201d on page 16.", "bbox": {"l": 151.20016, "t": 278.50609999999995, "r": 374.84296, "b": 287.71912, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the table and see the permissions, as shown in Figure 3-9. QIBM_DEFAULT_EMPLOYEE_HR_SCHEMA is the default permission, as described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16."}, {"label": "caption", "id": 6, "page_no": 41, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.43289947509766, "t": 491.4513244628906, "r": 331.18115234375, "b": 500.79241943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436566233634949, "cells": [{"id": 24, "text": "Figure 3-9 Row permissions that are shown in System i Navigator", "bbox": {"l": 64.800003, "t": 492.3179, "r": 330.28021, "b": 500.64291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-9 Row permissions that are shown in System i Navigator"}, {"label": "section_header", "id": 7, "page_no": 41, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.18317413330078, "t": 520.4345703125, "r": 327.40588, "b": 533.9813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9629243612289429, "cells": [{"id": 25, "text": "3.6.5", "bbox": {"l": 64.800003, "t": 521.15472, "r": 94.073502, "b": 533.1427, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 521.15472, "r": 327.40588, "b": 533.1427, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.5 Defining and creating column masks"}, {"label": "text", "id": 8, "page_no": 41, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.35951232910156, "t": 546.794189453125, "r": 526.41431, "b": 568.794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.968765139579773, "cells": [{"id": 27, "text": "Define the different masks for the columns that are sensitive by completing the following ", "bbox": {"l": 136.8, "t": 547.30862, "r": 526.41431, "b": 556.52162, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "steps:", "bbox": {"l": 136.8, "t": 559.30843, "r": 163.44897, "b": 568.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Define the different masks for the columns that are sensitive by completing the following steps:"}, {"label": "list_item", "id": 9, "page_no": 41, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.79542541503906, "t": 575.26025390625, "r": 538.78564, "b": 597.7650756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9648330807685852, "cells": [{"id": 29, "text": "1.", "bbox": {"l": 136.8, "t": 576.28824, "r": 145.16614, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the ", "bbox": {"l": 147.95483, "t": 576.28824, "r": 538.78564, "b": 585.50124, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "following ones:", "bbox": {"l": 151.20016, "t": 588.28804, "r": 216.83157, "b": 597.50104, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start with the DAY_OF_BIRTH column. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 10, "page_no": 41, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.26760864257812, "t": 604.6339721679688, "r": 467.65625, "b": 614.5850830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502057433128357, "cells": [{"id": 32, "text": "-", "bbox": {"l": 152.03979, "t": 605.26785, "r": 157.61441, "b": 614.48085, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Human Resources can see the entire date of birth of the employees.", "bbox": {"l": 165.59933, "t": 605.26785, "r": 467.65625, "b": 614.48085, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the entire date of birth of the employees."}, {"label": "list_item", "id": 11, "page_no": 41, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.2598114013672, "t": 621.2564086914062, "r": 375.38675, "b": 631.7196044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9498502016067505, "cells": [{"id": 34, "text": "-", "bbox": {"l": 152.03979, "t": 622.30742, "r": 157.60942, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Employees can see only their own date of birth.", "bbox": {"l": 165.59933, "t": 622.30742, "r": 375.38675, "b": 631.5204200000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own date of birth."}, {"label": "list_item", "id": 12, "page_no": 41, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.43798828125, "t": 638.585205078125, "r": 547.25653, "b": 648.8189086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9482884407043457, "cells": [{"id": 36, "text": "-", "bbox": {"l": 152.03979, "t": 639.28723, "r": 157.61142, "b": 648.50023, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Managers can see the date of birth of their employees masked with YEAR being 9999.", "bbox": {"l": 165.59933, "t": 639.28723, "r": 547.25653, "b": 648.50023, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers can see the date of birth of their employees masked with YEAR being 9999."}, {"label": "text", "id": 13, "page_no": 41, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.7313232421875, "t": 655.2977905273438, "r": 530.06067, "b": 665.58984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9218307137489319, "cells": [{"id": 38, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8.", "bbox": {"l": 151.20016, "t": 656.26704, "r": 530.06067, "b": 665.48004, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-8."}, {"label": "caption", "id": 14, "page_no": 41, "cluster": {"id": 14, "label": "caption", "bbox": {"l": 136.27670288085938, "t": 677.1241455078125, "r": 403.9977722167969, "b": 686.8948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098079204559326, "cells": [{"id": 39, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column", "bbox": {"l": 136.8, "t": 678.3179, "r": 403.40155, "b": 686.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-8 Creation of a mask on the DATE_OF_BIRTH column"}, {"label": "text", "id": 15, "page_no": 41, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.8, "t": 695.418121, "r": 416.63611, "b": 728.192497, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 40, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 695.418121, "r": 193.80365, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES", "bbox": {"l": 204.16795, "t": 695.418121, "r": 416.63611, "b": 704.192879, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ON", "bbox": {"l": 136.8, "t": 707.417931, "r": 148.79384, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 178.77841, "t": 707.417931, "r": 376.67661, "b": 716.192688, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 719.41774, "r": 192.76723, "b": 728.192497, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "DATE_OF_BIRTH", "bbox": {"l": 203.96066, "t": 719.41774, "r": 276.71805, "b": 728.192497, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_DATE_OF_BIRTH_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN DATE_OF_BIRTH"}, {"label": "picture", "id": 16, "page_no": 41, "cluster": {"id": 16, "label": "picture", "bbox": {"l": 64.00577545166016, "t": 302.1222839355469, "r": 547.3966674804688, "b": 489.23321533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799203276634216, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 41, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85331726074219, "t": 754.3814086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9175847768783569, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 41, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32594299316406, "t": 754.67138671875, "r": 334.42142, "b": 763.926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9555695652961731, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 42, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 42, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 42, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 42, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 42, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 42, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 42, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 42, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 42, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 42, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 42, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 42, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 42, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 42, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 42, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 42, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 42, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 42, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 42, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 42, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 42, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 42, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 42, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 42, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 42, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 43, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 43, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 43, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 43, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 43, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 43, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 43, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 43, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 43, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 43, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 43, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 43, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 43, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 43, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 43, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 43, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 43, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 43, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 43, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 43, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 43, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 43, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 43, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 43, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 43, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 43, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 43, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 43, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 43, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 43, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 43, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 44, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.54718017578125, "t": 754.7352905273438, "r": 523.60162, "b": 764.0706787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.956475555896759, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6342163085938, "t": 754.2794799804688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9159544110298157, "cells": [{"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.99427795410156, "t": 70.56324005126953, "r": 531.19666, "b": 92.8935775756836, "coord_origin": "TOPLEFT"}, "confidence": 0.9691283106803894, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.06971740722656, "t": 340.4026794433594, "r": 356.7056579589844, "b": 350.1046142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9446441531181335, "cells": [{"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.2018051147461, "t": 368.99359130859375, "r": 339.83972, "b": 382.4454650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.9611930847167969, "cells": [{"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.7947235107422, "t": 395.46563720703125, "r": 547.25952, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9570380449295044, "cells": [{"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.66810607910156, "t": 424.56658935546875, "r": 544.10724, "b": 459.0443115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9760121703147888, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.4961700439453, "t": 470.568359375, "r": 279.97296142578125, "b": 479.7723693847656, "coord_origin": "TOPLEFT"}, "confidence": 0.7746148705482483, "cells": [{"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.306396484375, "t": 487.3329772949219, "r": 406.61636, "b": 498.07952880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6185739040374756, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.95774841308594, "t": 511.2691955566406, "r": 511.53809, "b": 533.8543701171875, "coord_origin": "TOPLEFT"}, "confidence": 0.947382390499115, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.27264404296875, "t": 585.9351196289062, "r": 309.68194580078125, "b": 595.4780883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9036827683448792, "cells": [{"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 136.16087341308594, "t": 611.9103393554688, "r": 540.72186, "b": 646.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9704285860061646, "cells": [{"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 136.1033172607422, "t": 697.8408813476562, "r": 340.1351318359375, "b": 707.6279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9447281956672668, "cells": [{"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 135.93521118164062, "t": 106.84259796142578, "r": 547.290771484375, "b": 337.8546142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9848360419273376, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 137.4537811279297, "t": 661.5006713867188, "r": 220.26930236816406, "b": 693.4776611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8302825689315796, "cells": []}, {"id": 15, "label": "picture", "bbox": {"l": 137.24044799804688, "t": 548.8035888671875, "r": 225.1509246826172, "b": 582.4473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.7854686975479126, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 44, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.54718017578125, "t": 754.7352905273438, "r": 523.60162, "b": 764.0706787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.956475555896759, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 44, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6342163085938, "t": 754.2794799804688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9159544110298157, "cells": [{"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}, {"label": "list_item", "id": 2, "page_no": 44, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.99427795410156, "t": 70.56324005126953, "r": 531.19666, "b": 92.8935775756836, "coord_origin": "TOPLEFT"}, "confidence": 0.9691283106803894, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked."}, {"label": "caption", "id": 3, "page_no": 44, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06971740722656, "t": 340.4026794433594, "r": 356.7056579589844, "b": 350.1046142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9446441531181335, "cells": [{"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table"}, {"label": "section_header", "id": 4, "page_no": 44, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.2018051147461, "t": 368.99359130859375, "r": 339.83972, "b": 382.4454650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.9611930847167969, "cells": [{"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.7 Demonstrating data access with RCAC"}, {"label": "text", "id": 5, "page_no": 44, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.7947235107422, "t": 395.46563720703125, "r": 547.25952, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9570380449295044, "cells": [{"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to start testing RCAC with the four different users. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 44, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.66810607910156, "t": 424.56658935546875, "r": 544.10724, "b": 459.0443115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9760121703147888, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24)."}, {"label": "caption", "id": 7, "page_no": 44, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.4961700439453, "t": 470.568359375, "r": 279.97296142578125, "b": 479.7723693847656, "coord_origin": "TOPLEFT"}, "confidence": 0.7746148705482483, "cells": [{"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-11 EMPLOYEES count"}, {"label": "text", "id": 8, "page_no": 44, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.306396484375, "t": 487.3329772949219, "r": 406.61636, "b": 498.07952880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6185739040374756, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "list_item", "id": 9, "page_no": 44, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.95774841308594, "t": 511.2691955566406, "r": 511.53809, "b": 533.8543701171875, "coord_origin": "TOPLEFT"}, "confidence": 0.947382390499115, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}]}, "text": "2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees)."}, {"label": "caption", "id": 10, "page_no": 44, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.27264404296875, "t": 585.9351196289062, "r": 309.68194580078125, "b": 595.4780883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9036827683448792, "cells": [{"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-13 Count of EMPLOYEES by HR"}, {"label": "list_item", "id": 11, "page_no": 44, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 136.16087341308594, "t": 611.9103393554688, "r": 540.72186, "b": 646.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9704285860061646, "cells": [{"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6."}, {"label": "caption", "id": 12, "page_no": 44, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.1033172607422, "t": 697.8408813476562, "r": 340.1351318359375, "b": 707.6279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9447281956672668, "cells": [{"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-14 Count of EMPLOYEES by a manager"}, {"label": "picture", "id": 13, "page_no": 44, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 135.93521118164062, "t": 106.84259796142578, "r": 547.290771484375, "b": 337.8546142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9848360419273376, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 44, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 137.4537811279297, "t": 661.5006713867188, "r": 220.26930236816406, "b": 693.4776611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8302825689315796, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 15, "page_no": 44, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 137.24044799804688, "t": 548.8035888671875, "r": 225.1509246826172, "b": 582.4473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.7854686975479126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 44, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.99427795410156, "t": 70.56324005126953, "r": 531.19666, "b": 92.8935775756836, "coord_origin": "TOPLEFT"}, "confidence": 0.9691283106803894, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.16988, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the ", "bbox": {"l": 147.95998, "t": 71.50903000000005, "r": 531.19666, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row access control and Column access control options are checked.", "bbox": {"l": 151.19974, "t": 83.50885000000017, "r": 455.5731799999999, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The EMPLOYEES table definition is displayed, as shown in Figure 3-12. Note that the Row access control and Column access control options are checked."}, {"label": "caption", "id": 3, "page_no": 44, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06971740722656, "t": 340.4026794433594, "r": 356.7056579589844, "b": 350.1046142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9446441531181335, "cells": [{"id": 5, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table", "bbox": {"l": 136.8, "t": 341.298, "r": 356.32169, "b": 349.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-12 RCAC enabled on the EMPLOYEES table"}, {"label": "section_header", "id": 4, "page_no": 44, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.2018051147461, "t": 368.99359130859375, "r": 339.83972, "b": 382.4454650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.9611930847167969, "cells": [{"id": 6, "text": "3.6.7", "bbox": {"l": 64.800003, "t": 370.13474, "r": 93.997536, "b": 382.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Demonstrating data access with RCAC", "bbox": {"l": 97.647217, "t": 370.13474, "r": 339.83972, "b": 382.12271, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.7 Demonstrating data access with RCAC"}, {"label": "text", "id": 5, "page_no": 44, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.7947235107422, "t": 395.46563720703125, "r": 547.25952, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9570380449295044, "cells": [{"id": 8, "text": "You are now ready to start testing RCAC with the four different users. Complete the following ", "bbox": {"l": 136.8, "t": 396.28873, "r": 547.25952, "b": 405.50171, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "steps:", "bbox": {"l": 136.8, "t": 408.28853999999995, "r": 163.44897, "b": 417.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to start testing RCAC with the four different users. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 44, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.66810607910156, "t": 424.56658935546875, "r": 544.10724, "b": 459.0443115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9760121703147888, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 425.26834, "r": 145.18379, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. ", "bbox": {"l": 147.97836, "t": 425.26834, "r": 544.10724, "b": 434.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "You know that there are 42 rows from the query that was run before RCAC was put in ", "bbox": {"l": 151.20015, "t": 437.26815999999997, "r": 530.11023, "b": 446.48114, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24).", "bbox": {"l": 151.20015, "t": 449.26797, "r": 479.75162, "b": 458.48096, "coord_origin": "TOPLEFT"}}]}, "text": "1. The first SQL statement that is shown in Example 3-11 illustrates the EMPLOYEE count. You know that there are 42 rows from the query that was run before RCAC was put in place (see 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24)."}, {"label": "caption", "id": 7, "page_no": 44, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.4961700439453, "t": 470.568359375, "r": 279.97296142578125, "b": 479.7723693847656, "coord_origin": "TOPLEFT"}, "confidence": 0.7746148705482483, "cells": [{"id": 14, "text": "Example 3-11 EMPLOYEES count", "bbox": {"l": 136.8, "t": 471.31799, "r": 279.08279, "b": 479.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-11 EMPLOYEES count"}, {"label": "text", "id": 8, "page_no": 44, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.306396484375, "t": 487.3329772949219, "r": 406.61636, "b": 498.07952880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6185739040374756, "cells": [{"id": 15, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;", "bbox": {"l": 136.8, "t": 488.41812, "r": 406.61636, "b": 497.1929, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT COUNT(*) as ROW_COUNT FROM HR_SCHEMA.EMPLOYEES;"}, {"label": "list_item", "id": 9, "page_no": 44, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.95774841308594, "t": 511.2691955566406, "r": 511.53809, "b": 533.8543701171875, "coord_origin": "TOPLEFT"}, "confidence": 0.947382390499115, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8, "t": 512.2683400000001, "r": 145.20477, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The result of the query for a user that belongs to the HR group profile is shown in ", "bbox": {"l": 148.00635, "t": 512.2683400000001, "r": 511.53809, "b": 521.48132, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 3-13. This user can see all the 42 rows (employees).", "bbox": {"l": 151.20016, "t": 524.2681600000001, "r": 413.90515, "b": 533.48114, "coord_origin": "TOPLEFT"}}]}, "text": "2. The result of the query for a user that belongs to the HR group profile is shown in Figure 3-13. This user can see all the 42 rows (employees)."}, {"label": "caption", "id": 10, "page_no": 44, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.27264404296875, "t": 585.9351196289062, "r": 309.68194580078125, "b": 595.4780883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9036827683448792, "cells": [{"id": 19, "text": "Figure 3-13 Count of EMPLOYEES by HR", "bbox": {"l": 136.8, "t": 586.758, "r": 308.8494, "b": 595.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-13 Count of EMPLOYEES by HR"}, {"label": "list_item", "id": 11, "page_no": 44, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 136.16087341308594, "t": 611.9103393554688, "r": 540.72186, "b": 646.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9704285860061646, "cells": [{"id": 20, "text": "3.", "bbox": {"l": 136.8, "t": 612.76872, "r": 145.20665, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The result of the same query for a user who is logged on as TQSPENSER (Manager) is ", "bbox": {"l": 148.00883, "t": 612.76872, "r": 540.72186, "b": 621.98172, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "shown in Figure 3-14. TQSPENSER has five employees in his department and he can ", "bbox": {"l": 151.20016, "t": 624.7685200000001, "r": 533.99182, "b": 633.98152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "also see his own row, which is why the count is 6.", "bbox": {"l": 151.20016, "t": 636.76833, "r": 369.41092, "b": 645.98132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the same query for a user who is logged on as TQSPENSER (Manager) is shown in Figure 3-14. TQSPENSER has five employees in his department and he can also see his own row, which is why the count is 6."}, {"label": "caption", "id": 12, "page_no": 44, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.1033172607422, "t": 697.8408813476562, "r": 340.1351318359375, "b": 707.6279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9447281956672668, "cells": [{"id": 24, "text": "Figure 3-14 Count of EMPLOYEES by a manager", "bbox": {"l": 136.8, "t": 698.658005, "r": 338.81226, "b": 706.983002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-14 Count of EMPLOYEES by a manager"}, {"label": "picture", "id": 13, "page_no": 44, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 135.93521118164062, "t": 106.84259796142578, "r": 547.290771484375, "b": 337.8546142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9848360419273376, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 44, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 137.4537811279297, "t": 661.5006713867188, "r": 220.26930236816406, "b": 693.4776611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8302825689315796, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 15, "page_no": 44, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 137.24044799804688, "t": 548.8035888671875, "r": 225.1509246826172, "b": 582.4473266601562, "coord_origin": "TOPLEFT"}, "confidence": 0.7854686975479126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 44, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.54718017578125, "t": 754.7352905273438, "r": 523.60162, "b": 764.0706787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.956475555896759, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 44, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6342163085938, "t": 754.2794799804688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9159544110298157, "cells": [{"id": 1, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}]}}, {"page_no": 45, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.19510650634766, "t": 754.4282836914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9150190949440002, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.36414337158203, "t": 754.7095947265625, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484574198722839, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.79859924316406, "t": 70.64143371582031, "r": 547.21362, "b": 93.16808319091797, "coord_origin": "TOPLEFT"}, "confidence": 0.9721304774284363, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.97097778320312, "t": 144.56964111328125, "r": 347.41455078125, "b": 154.1024932861328, "coord_origin": "TOPLEFT"}, "confidence": 0.8800588846206665, "cells": [{"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.351318359375, "t": 170.72369384765625, "r": 543.98859, "b": 204.88552856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9731000661849976, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.17999267578125, "t": 256.5564880371094, "r": 345.2605285644531, "b": 265.80084228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.845527708530426, "cells": [{"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.62869262695312, "t": 282.65179443359375, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}, "confidence": 0.8937364816665649, "cells": [{"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.16029357910156, "t": 299.3460693359375, "r": 544.28741, "b": 333.59893798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9715136885643005, "cells": [{"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 136.2924041748047, "t": 345.3439636230469, "r": 396.5692138671875, "b": 354.603, "coord_origin": "TOPLEFT"}, "confidence": 0.7857663035392761, "cells": [{"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "code", "bbox": {"l": 134.74452209472656, "t": 356.92291259765625, "r": 548.0267333984375, "b": 461.7205810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.6226056814193726, "cells": [{"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 136.77099609375, "t": 107.66394805908203, "r": 225.8523406982422, "b": 140.4359130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.721601665019989, "cells": []}, {"id": 11, "label": "picture", "bbox": {"l": 136.36477661132812, "t": 219.7147674560547, "r": 228.86305236816406, "b": 252.31942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.6357523798942566, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 45, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19510650634766, "t": 754.4282836914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9150190949440002, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 45, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36414337158203, "t": 754.7095947265625, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484574198722839, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 45, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.79859924316406, "t": 70.64143371582031, "r": 547.21362, "b": 93.16808319091797, "coord_origin": "TOPLEFT"}, "confidence": 0.9721304774284363, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row)."}, {"label": "caption", "id": 3, "page_no": 45, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.97097778320312, "t": 144.56964111328125, "r": 347.41455078125, "b": 154.1024932861328, "coord_origin": "TOPLEFT"}, "confidence": 0.8800588846206665, "cells": [{"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-15 Count of EMPLOYEES by an employee"}, {"label": "list_item", "id": 4, "page_no": 45, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.351318359375, "t": 170.72369384765625, "r": 543.98859, "b": 204.88552856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9731000661849976, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all."}, {"label": "caption", "id": 5, "page_no": 45, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17999267578125, "t": 256.5564880371094, "r": 345.2605285644531, "b": 265.80084228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.845527708530426, "cells": [{"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-16 Count of EMPLOYEES by a consultant"}, {"label": "text", "id": 6, "page_no": 45, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.62869262695312, "t": 282.65179443359375, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}, "confidence": 0.8937364816665649, "cells": [{"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}]}, "text": "Does the result make sense? Yes, it does because RCAC is enabled."}, {"label": "list_item", "id": 7, "page_no": 45, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.16029357910156, "t": 299.3460693359375, "r": 544.28741, "b": 333.59893798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9715136885643005, "cells": [{"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12."}, {"label": "caption", "id": 8, "page_no": 45, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.2924041748047, "t": 345.3439636230469, "r": 396.5692138671875, "b": 354.603, "coord_origin": "TOPLEFT"}, "confidence": 0.7857663035392761, "cells": [{"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-12 SELECT statement to test with the different users"}, {"label": "code", "id": 9, "page_no": 45, "cluster": {"id": 9, "label": "code", "bbox": {"l": 134.74452209472656, "t": 356.92291259765625, "r": 548.0267333984375, "b": 461.7205810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.6226056814193726, "cells": [{"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "picture", "id": 10, "page_no": 45, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.77099609375, "t": 107.66394805908203, "r": 225.8523406982422, "b": 140.4359130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.721601665019989, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 45, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.36477661132812, "t": 219.7147674560547, "r": 228.86305236816406, "b": 252.31942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.6357523798942566, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 45, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.79859924316406, "t": 70.64143371582031, "r": 547.21362, "b": 93.16808319091797, "coord_origin": "TOPLEFT"}, "confidence": 0.9721304774284363, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.04445, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the same query that is run by an employee (DSSMITH) gives the result that is ", "bbox": {"l": 147.79259, "t": 71.50867000000005, "r": 547.21362, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "shown in Figure 3-15. Each employee can see only his or her own data (row).", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 493.08124, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The result of the same query that is run by an employee (DSSMITH) gives the result that is shown in Figure 3-15. Each employee can see only his or her own data (row)."}, {"label": "caption", "id": 3, "page_no": 45, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.97097778320312, "t": 144.56964111328125, "r": 347.41455078125, "b": 154.1024932861328, "coord_origin": "TOPLEFT"}, "confidence": 0.8800588846206665, "cells": [{"id": 5, "text": "Figure 3-15 Count of EMPLOYEES by an employee", "bbox": {"l": 136.8, "t": 145.39801, "r": 346.82037, "b": 153.72295999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-15 Count of EMPLOYEES by an employee"}, {"label": "list_item", "id": 4, "page_no": 45, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.351318359375, "t": 170.72369384765625, "r": 543.98859, "b": 204.88552856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9731000661849976, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 171.34869000000003, "r": 145.20747, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the same query that is run by the Consultant/DBE gives the result that is ", "bbox": {"l": 148.00995, "t": 171.34869000000003, "r": 531.26587, "b": 180.56170999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they ", "bbox": {"l": 151.20016, "t": 183.34851000000003, "r": 543.98859, "b": 192.56151999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not see any rows at all.", "bbox": {"l": 151.20016, "t": 195.34833000000003, "r": 267.03894, "b": 204.56133999999997, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the same query that is run by the Consultant/DBE gives the result that is shown in Figure 3-16. The consultants/DBE can manage and implement RCAC, but they do not see any rows at all."}, {"label": "caption", "id": 5, "page_no": 45, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17999267578125, "t": 256.5564880371094, "r": 345.2605285644531, "b": 265.80084228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.845527708530426, "cells": [{"id": 10, "text": "Figure 3-16 Count of EMPLOYEES by a consultant", "bbox": {"l": 136.8, "t": 257.29791, "r": 344.35086, "b": 265.62285999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-16 Count of EMPLOYEES by a consultant"}, {"label": "text", "id": 6, "page_no": 45, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.62869262695312, "t": 282.65179443359375, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}, "confidence": 0.8937364816665649, "cells": [{"id": 11, "text": "Does the result make sense? Yes, it does because RCAC is enabled.", "bbox": {"l": 151.2, "t": 283.24872, "r": 456.21011, "b": 292.4617, "coord_origin": "TOPLEFT"}}]}, "text": "Does the result make sense? Yes, it does because RCAC is enabled."}, {"label": "list_item", "id": 7, "page_no": 45, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.16029357910156, "t": 299.3460693359375, "r": 544.28741, "b": 333.59893798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9715136885643005, "cells": [{"id": 12, "text": "6.", "bbox": {"l": 136.79984, "t": 300.22852, "r": 145.18713, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Run queries against the EMPLOYEES table. The query that is used in this example runs ", "bbox": {"l": 147.98289, "t": 300.22852, "r": 543.73456, "b": 309.4415, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and tests with the four different user profiles and is the same query that was run in 3.6.3, ", "bbox": {"l": 151.20001, "t": 312.22833, "r": 544.28741, "b": 321.44131, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12.", "bbox": {"l": 151.20001, "t": 324.22814999999997, "r": 527.40405, "b": 333.44113, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run queries against the EMPLOYEES table. The query that is used in this example runs and tests with the four different user profiles and is the same query that was run in 3.6.3, \u201cDemonstrating data access without RCAC\u201d on page 24. It is shown in Example 3-12."}, {"label": "caption", "id": 8, "page_no": 45, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.2924041748047, "t": 345.3439636230469, "r": 396.5692138671875, "b": 354.603, "coord_origin": "TOPLEFT"}, "confidence": 0.7857663035392761, "cells": [{"id": 16, "text": "Example 3-12 SELECT statement to test with the different users", "bbox": {"l": 136.8, "t": 346.27798, "r": 396.18622, "b": 354.603, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-12 SELECT statement to test with the different users"}, {"label": "code", "id": 9, "page_no": 45, "cluster": {"id": 9, "label": "code", "bbox": {"l": 134.74452209472656, "t": 356.92291259765625, "r": 548.0267333984375, "b": 461.7205810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.6226056814193726, "cells": [{"id": 17, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 363.37810999999994, "r": 231.71878000000004, "b": 372.15289, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "LAST_NAME, ", "bbox": {"l": 156.0726, "t": 375.37793000000005, "r": 226.73877000000002, "b": 384.15271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 387.37775, "r": 251.69853, "b": 396.15253000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 399.37756, "r": 241.73852999999997, "b": 408.15234, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 411.37738, "r": 206.75902, "b": 420.1521599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 423.37719999999996, "r": 211.73903, "b": 432.15198000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 435.37701, "r": 266.69827, "b": 444.15179, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FROM", "bbox": {"l": 136.8, "t": 447.37683, "r": 157.58372, "b": 456.15161, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "HR_SCHEMA.EMPLOYEES", "bbox": {"l": 167.97559, "t": 447.37683, "r": 266.69827, "b": 456.15161, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM HR_SCHEMA.EMPLOYEES"}, {"label": "picture", "id": 10, "page_no": 45, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.77099609375, "t": 107.66394805908203, "r": 225.8523406982422, "b": 140.4359130859375, "coord_origin": "TOPLEFT"}, "confidence": 0.721601665019989, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 45, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.36477661132812, "t": 219.7147674560547, "r": 228.86305236816406, "b": 252.31942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.6357523798942566, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 45, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19510650634766, "t": 754.4282836914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9150190949440002, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 45, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36414337158203, "t": 754.7095947265625, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484574198722839, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 46, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.6293640136719, "t": 754.7607421875, "r": 523.60162, "b": 764.101806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9559109210968018, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7171630859375, "t": 754.2883911132812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9095556735992432, "cells": [{"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.29183959960938, "t": 70.52925872802734, "r": 547.15259, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9437284469604492, "cells": [{"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.41815185546875, "t": 486.6556091308594, "r": 338.3864440917969, "b": 495.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8823539018630981, "cells": [{"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.21075439453125, "t": 512.54150390625, "r": 546.0484, "b": 535.139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411396384239197, "cells": [{"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.57685852050781, "t": 617.3950805664062, "r": 279.62469482421875, "b": 626.7601318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9109888672828674, "cells": [{"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.3648223876953, "t": 643.3563842773438, "r": 518.90057, "b": 665.8402709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9563440084457397, "cells": [{"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.505126953125, "t": 705.2019653320312, "r": 295.1390380859375, "b": 714.663002, "coord_origin": "TOPLEFT"}, "confidence": 0.9352152943611145, "cells": [{"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 46, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6293640136719, "t": 754.7607421875, "r": 523.60162, "b": 764.101806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9559109210968018, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 46, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7171630859375, "t": 754.2883911132812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9095556735992432, "cells": [{"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}, {"label": "list_item", "id": 2, "page_no": 46, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.29183959960938, "t": 70.52925872802734, "r": 547.15259, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9437284469604492, "cells": [{"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns."}, {"label": "caption", "id": 3, "page_no": 46, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.41815185546875, "t": 486.6556091308594, "r": 338.3864440917969, "b": 495.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8823539018630981, "cells": [{"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-17 SQL statement result by Human Resources user profile"}, {"label": "list_item", "id": 4, "page_no": 46, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.21075439453125, "t": 512.54150390625, "r": 546.0484, "b": 535.139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411396384239197, "cells": [{"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns."}, {"label": "caption", "id": 5, "page_no": 46, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.57685852050781, "t": 617.3950805664062, "r": 279.62469482421875, "b": 626.7601318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9109888672828674, "cells": [{"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-18 SQL statement result by Manager profile"}, {"label": "list_item", "id": 6, "page_no": 46, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.3648223876953, "t": 643.3563842773438, "r": 518.90057, "b": 665.8402709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9563440084457397, "cells": [{"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}]}, "text": "9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all."}, {"label": "caption", "id": 7, "page_no": 46, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.505126953125, "t": 705.2019653320312, "r": 295.1390380859375, "b": 714.663002, "coord_origin": "TOPLEFT"}, "confidence": 0.9352152943611145, "cells": [{"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-19 SQL statement result by an employee profile"}], "body": [{"label": "list_item", "id": 2, "page_no": 46, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.29183959960938, "t": 70.52925872802734, "r": 547.15259, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9437284469604492, "cells": [{"id": 2, "text": "7.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.15512, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user ", "bbox": {"l": 147.94031, "t": 71.50903000000005, "r": 547.15259, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "profile. The user can see all the rows and all the columns.", "bbox": {"l": 151.19978, "t": 83.50885000000017, "r": 405.80127, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "7. Figure 3-17 shows the results of the query for a Human Resources (VGLUCCHESS) user profile. The user can see all the rows and all the columns."}, {"label": "caption", "id": 3, "page_no": 46, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.41815185546875, "t": 486.6556091308594, "r": 338.3864440917969, "b": 495.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8823539018630981, "cells": [{"id": 5, "text": "Figure 3-17 SQL statement result by Human Resources user profile", "bbox": {"l": 64.800003, "t": 487.2179, "r": 338.2901, "b": 495.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-17 SQL statement result by Human Resources user profile"}, {"label": "list_item", "id": 4, "page_no": 46, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.21075439453125, "t": 512.54150390625, "r": 546.0484, "b": 535.139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411396384239197, "cells": [{"id": 6, "text": "8.", "bbox": {"l": 136.8, "t": 513.22864, "r": 145.20114, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice ", "bbox": {"l": 148.00151, "t": 513.22864, "r": 546.0484, "b": 522.4416200000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking of the DATE_OF_BIRTH and TAX_ID columns.", "bbox": {"l": 151.20015, "t": 525.2284500000001, "r": 414.04752, "b": 534.4414400000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. Figure 3-18 shows the results of the same query for the Manager (TQSPENSER). Notice the masking of the DATE_OF_BIRTH and TAX_ID columns."}, {"label": "caption", "id": 5, "page_no": 46, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.57685852050781, "t": 617.3950805664062, "r": 279.62469482421875, "b": 626.7601318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9109888672828674, "cells": [{"id": 9, "text": "Figure 3-18 SQL statement result by Manager profile", "bbox": {"l": 64.800003, "t": 618.31799, "r": 279.30243, "b": 626.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-18 SQL statement result by Manager profile"}, {"label": "list_item", "id": 6, "page_no": 46, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.3648223876953, "t": 643.3563842773438, "r": 518.90057, "b": 665.8402709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9563440084457397, "cells": [{"id": 10, "text": "9.", "bbox": {"l": 136.8, "t": 644.32863, "r": 145.19516, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 3-19 shows the results of the same query for an employee (DSSMITH). The ", "bbox": {"l": 147.99353, "t": 644.32863, "r": 518.90057, "b": 653.5416299999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "employee can only see only his own data with no masking at all.", "bbox": {"l": 151.20016, "t": 656.32843, "r": 433.90381, "b": 665.54143, "coord_origin": "TOPLEFT"}}]}, "text": "9. Figure 3-19 shows the results of the same query for an employee (DSSMITH). The employee can only see only his own data with no masking at all."}, {"label": "caption", "id": 7, "page_no": 46, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.505126953125, "t": 705.2019653320312, "r": 295.1390380859375, "b": 714.663002, "coord_origin": "TOPLEFT"}, "confidence": 0.9352152943611145, "cells": [{"id": 13, "text": "Figure 3-19 SQL statement result by an employee profile", "bbox": {"l": 64.800003, "t": 706.338005, "r": 294.81302, "b": 714.663002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-19 SQL statement result by an employee profile"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 46, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6293640136719, "t": 754.7607421875, "r": 523.60162, "b": 764.101806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9559109210968018, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 46, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7171630859375, "t": 754.2883911132812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9095556735992432, "cells": [{"id": 1, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}]}}, {"page_no": 47, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.27489471435547, "t": 754.446044921875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9054298996925354, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.40065002441406, "t": 754.7294311523438, "r": 334.42142, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9436663389205933, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.8, "t": 70.6961898803711, "r": 547.27527, "b": 92.95230102539062, "coord_origin": "TOPLEFT"}, "confidence": 0.678650975227356, "cells": [{"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.38975524902344, "t": 165.40078735351562, "r": 308.0195617675781, "b": 174.5470733642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9349976181983948, "cells": [{"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.18441009521484, "t": 193.73703002929688, "r": 408.97745, "b": 207.04144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546941518783569, "cells": [{"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.6727294921875, "t": 220.03721618652344, "r": 515.07678, "b": 230.3160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9435732960700989, "cells": [{"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 237.41502380371094, "r": 547.23077, "b": 271.5574645996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9775716662406921, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 47, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.27489471435547, "t": 754.446044921875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9054298996925354, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 47, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40065002441406, "t": 754.7294311523438, "r": 334.42142, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9436663389205933, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 47, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.8, "t": 70.6961898803711, "r": 547.27527, "b": 92.95230102539062, "coord_origin": "TOPLEFT"}, "confidence": 0.678650975227356, "cells": [{"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company\u2019s employees."}, {"label": "caption", "id": 3, "page_no": 47, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.38975524902344, "t": 165.40078735351562, "r": 308.0195617675781, "b": 174.5470733642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9349976181983948, "cells": [{"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile"}, {"label": "section_header", "id": 4, "page_no": 47, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.18441009521484, "t": 193.73703002929688, "r": 408.97745, "b": 207.04144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546941518783569, "cells": [{"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.8 Demonstrating data access with a view and RCAC"}, {"label": "text", "id": 5, "page_no": 47, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.6727294921875, "t": 220.03721618652344, "r": 515.07678, "b": 230.3160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9435732960700989, "cells": [{"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers data access with a view and RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 47, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 237.41502380371094, "r": 547.23077, "b": 271.5574645996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9775716662406921, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}]}, "text": "1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave."}], "body": [{"label": "list_item", "id": 2, "page_no": 47, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.8, "t": 70.6961898803711, "r": 547.27527, "b": 92.95230102539062, "coord_origin": "TOPLEFT"}, "confidence": 0.678650975227356, "cells": [{"id": 2, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.27527, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "the company\u2019s employees.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 268.18436, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "10.Figure 3-20 shows the results of the same query for the Consultant/DBE, who is not one of the company\u2019s employees."}, {"label": "caption", "id": 3, "page_no": 47, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.38975524902344, "t": 165.40078735351562, "r": 308.0195617675781, "b": 174.5470733642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9349976181983948, "cells": [{"id": 4, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile", "bbox": {"l": 64.800003, "t": 166.03801999999996, "r": 307.77298, "b": 174.36298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-20 SQL statement result by Consultant/DBE profile"}, {"label": "section_header", "id": 4, "page_no": 47, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.18441009521484, "t": 193.73703002929688, "r": 408.97745, "b": 207.04144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546941518783569, "cells": [{"id": 5, "text": "3.6.8", "bbox": {"l": 64.800003, "t": 194.87469, "r": 93.92009, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Demonstrating data access with a view and RCAC", "bbox": {"l": 97.56012, "t": 194.87469, "r": 408.97745, "b": 206.86273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.8 Demonstrating data access with a view and RCAC"}, {"label": "text", "id": 5, "page_no": 47, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.6727294921875, "t": 220.03721618652344, "r": 515.07678, "b": 230.3160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9435732960700989, "cells": [{"id": 7, "text": "This section covers data access with a view and RCAC. Complete the following steps:", "bbox": {"l": 136.8, "t": 221.02868999999998, "r": 515.07678, "b": 230.24170000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers data access with a view and RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 47, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 237.41502380371094, "r": 547.23077, "b": 271.5574645996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9775716662406921, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.79999, "t": 238.00847999999996, "r": 145.17825, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on ", "bbox": {"l": 147.97101, "t": 238.00847999999996, "r": 524.30975, "b": 247.2215, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is ", "bbox": {"l": 151.20016, "t": 250.00829999999996, "r": 547.23077, "b": 259.22131, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "created that lists only the employees that are on leave.", "bbox": {"l": 151.20018, "t": 262.00811999999996, "r": 391.80084, "b": 271.22113, "coord_origin": "TOPLEFT"}}]}, "text": "1. The EMPLOYEES table has a column that is called On_Leave_Flag (Figure 3-21 on page 33) indicating that the employee is on Leave of Absence. For this purpose, a view is created that lists only the employees that are on leave."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 47, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.27489471435547, "t": 754.446044921875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9054298996925354, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 47, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40065002441406, "t": 754.7294311523438, "r": 334.42142, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9436663389205933, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 48, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5408020019531, "t": 754.6817016601562, "r": 523.60162, "b": 764.1367797851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9533696174621582, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.63330078125, "t": 754.3946533203125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169439077377319, "cells": [{"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.41194152832031, "t": 566.6688232421875, "r": 198.96627807617188, "b": 576.1551513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.7591876983642578, "cells": [{"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.17755126953125, "t": 592.6334838867188, "r": 355.694, "b": 602.9717407226562, "coord_origin": "TOPLEFT"}, "confidence": 0.83542799949646, "cells": [{"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.4932098388672, "t": 614.6098022460938, "r": 311.614013671875, "b": 624.4323120117188, "coord_origin": "TOPLEFT"}, "confidence": 0.6750876307487488, "cells": [{"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "code", "bbox": {"l": 136.7435302734375, "t": 630.8392333984375, "r": 426.59613, "b": 726.1493530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7123060822486877, "cells": [{"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 48, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5408020019531, "t": 754.6817016601562, "r": 523.60162, "b": 764.1367797851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9533696174621582, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 48, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.63330078125, "t": 754.3946533203125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169439077377319, "cells": [{"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}, {"label": "caption", "id": 2, "page_no": 48, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.41194152832031, "t": 566.6688232421875, "r": 198.96627807617188, "b": 576.1551513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.7591876983642578, "cells": [{"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-21 Employees on leave"}, {"label": "list_item", "id": 3, "page_no": 48, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.17755126953125, "t": 592.6334838867188, "r": 355.694, "b": 602.9717407226562, "coord_origin": "TOPLEFT"}, "confidence": 0.83542799949646, "cells": [{"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}]}, "text": "2. Example 3-13 shows the definition of the view."}, {"label": "caption", "id": 4, "page_no": 48, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.4932098388672, "t": 614.6098022460938, "r": 311.614013671875, "b": 624.4323120117188, "coord_origin": "TOPLEFT"}, "confidence": 0.6750876307487488, "cells": [{"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-13 VIew of employees on leave"}, {"label": "code", "id": 5, "page_no": 48, "cluster": {"id": 5, "label": "code", "bbox": {"l": 136.7435302734375, "t": 630.8392333984375, "r": 426.59613, "b": 726.1493530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7123060822486877, "cells": [{"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH,"}], "body": [{"label": "caption", "id": 2, "page_no": 48, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.41194152832031, "t": 566.6688232421875, "r": 198.96627807617188, "b": 576.1551513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.7591876983642578, "cells": [{"id": 2, "text": "Figure 3-21 Employees on leave", "bbox": {"l": 64.800003, "t": 567.49789, "r": 198.35095, "b": 575.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-21 Employees on leave"}, {"label": "list_item", "id": 3, "page_no": 48, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.17755126953125, "t": 592.6334838867188, "r": 355.694, "b": 602.9717407226562, "coord_origin": "TOPLEFT"}, "confidence": 0.83542799949646, "cells": [{"id": 3, "text": "2.", "bbox": {"l": 136.8, "t": 593.44862, "r": 145.22173, "b": 602.66162, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 3-13 shows the definition of the view.", "bbox": {"l": 148.02896, "t": 593.44862, "r": 355.694, "b": 602.66162, "coord_origin": "TOPLEFT"}}]}, "text": "2. Example 3-13 shows the definition of the view."}, {"label": "caption", "id": 4, "page_no": 48, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.4932098388672, "t": 614.6098022460938, "r": 311.614013671875, "b": 624.4323120117188, "coord_origin": "TOPLEFT"}, "confidence": 0.6750876307487488, "cells": [{"id": 5, "text": "Example 3-13 VIew of employees on leave", "bbox": {"l": 136.8, "t": 615.49789, "r": 311.19119, "b": 623.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-13 VIew of employees on leave"}, {"label": "code", "id": 5, "page_no": 48, "cluster": {"id": 5, "label": "code", "bbox": {"l": 136.7435302734375, "t": 630.8392333984375, "r": 426.59613, "b": 726.1493530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7123060822486877, "cells": [{"id": 6, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 632.59802, "r": 406.61636, "b": 641.37277, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "FIRST_NAME,", "bbox": {"l": 280.25302, "t": 644.59782, "r": 401.63635, "b": 653.37257, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "MIDDLE_INITIAL,", "bbox": {"l": 269.03604, "t": 656.59763, "r": 421.61609, "b": 665.37238, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "LAST_NAME,", "bbox": {"l": 283.67535, "t": 668.59743, "r": 396.65637, "b": 677.37219, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WORK_DEPARTMENT,", "bbox": {"l": 266.70862, "t": 680.5972399999999, "r": 426.59613, "b": 689.372, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "PHONE_EXTENSION,", "bbox": {"l": 266.70862, "t": 692.5970540000001, "r": 426.59613, "b": 701.371811, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "JOB_DESCRIPTION,", "bbox": {"l": 266.70862, "t": 704.596863, "r": 426.59613, "b": 713.37162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DATE_OF_BIRTH,", "bbox": {"l": 271.53592, "t": 716.596672, "r": 416.63611, "b": 725.371429, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE VIEW HR_SCHEMA.EMPLOYEES_ON_LEAVE (EMPLOYEE_ID, FIRST_NAME, MIDDLE_INITIAL, LAST_NAME, WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH,"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 48, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5408020019531, "t": 754.6817016601562, "r": 523.60162, "b": 764.1367797851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9533696174621582, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 48, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.63330078125, "t": 754.3946533203125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169439077377319, "cells": [{"id": 1, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}]}}, {"page_no": 49, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1474609375, "t": 754.3988037109375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9037860631942749, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.26473999023438, "t": 754.7013549804688, "r": 334.42142, "b": 764.0106811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9487432837486267, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 258.85648, "t": 71.10697937011719, "r": 446.63561999999996, "b": 117.91847229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.6826066970825195, "cells": [{"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8447265625, "t": 118.94123840332031, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.6089476943016052, "cells": [{"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 155.53102, "t": 262.309326171875, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}, "confidence": 0.6180596351623535, "cells": [{"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 274.9990234375, "r": 157.71849060058594, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6689217686653137, "cells": [{"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 167.92577, "t": 274.5404052734375, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6523625254631042, "cells": [{"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.10264587402344, "t": 286.8880615234375, "r": 161.95062255859375, "b": 296.42957, "coord_origin": "TOPLEFT"}, "confidence": 0.6754139065742493, "cells": [{"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 171.0566864013672, "t": 286.53363037109375, "r": 271.67828, "b": 297.5150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.6802994608879089, "cells": [{"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.068359375, "t": 315.41168212890625, "r": 547.36621, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8731935620307922, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.2685546875, "t": 349.93072509765625, "r": 354.4166564941406, "b": 359.5875549316406, "coord_origin": "TOPLEFT"}, "confidence": 0.7664288878440857, "cells": [{"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 367.63812, "r": 266.69827, "b": 460.41162, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 167.63615, "t": 450.5314636230469, "r": 316.67755, "b": 460.8767395019531, "coord_origin": "TOPLEFT"}, "confidence": 0.6310456991195679, "cells": [{"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.88938903808594, "t": 474.4544677734375, "r": 547.25067, "b": 521.350830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467523097991943, "cells": [{"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "caption", "bbox": {"l": 64.29961395263672, "t": 569.6649780273438, "r": 301.89312744140625, "b": 579.7119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.881747305393219, "cells": [{"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 136.30172729492188, "t": 595.9632568359375, "r": 546.50952, "b": 642.4163818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9604976177215576, "cells": [{"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "caption", "bbox": {"l": 64.38579559326172, "t": 683.8665771484375, "r": 313.5398254394531, "b": 693.6953735351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9106412529945374, "cells": [{"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 49, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1474609375, "t": 754.3988037109375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9037860631942749, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 49, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26473999023438, "t": 754.7013549804688, "r": 334.42142, "b": 764.0106811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9487432837486267, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 49, "cluster": {"id": 2, "label": "text", "bbox": {"l": 258.85648, "t": 71.10697937011719, "r": 446.63561999999996, "b": 117.91847229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.6826066970825195, "cells": [{"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}]}, "text": "TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG )"}, {"label": "text", "id": 3, "page_no": 49, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8447265625, "t": 118.94123840332031, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.6089476943016052, "cells": [{"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}]}, "text": "AS"}, {"label": "text", "id": 4, "page_no": 49, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE,"}, {"label": "text", "id": 5, "page_no": 49, "cluster": {"id": 5, "label": "text", "bbox": {"l": 155.53102, "t": 262.309326171875, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}, "confidence": 0.6180596351623535, "cells": [{"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG"}, {"label": "text", "id": 6, "page_no": 49, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 274.9990234375, "r": 157.71849060058594, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6689217686653137, "cells": [{"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 7, "page_no": 49, "cluster": {"id": 7, "label": "text", "bbox": {"l": 167.92577, "t": 274.5404052734375, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6523625254631042, "cells": [{"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 8, "page_no": 49, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.10264587402344, "t": 286.8880615234375, "r": 161.95062255859375, "b": 296.42957, "coord_origin": "TOPLEFT"}, "confidence": 0.6754139065742493, "cells": [{"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE"}, {"label": "text", "id": 9, "page_no": 49, "cluster": {"id": 9, "label": "text", "bbox": {"l": 171.0566864013672, "t": 286.53363037109375, "r": 271.67828, "b": 297.5150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.6802994608879089, "cells": [{"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG = 'Y';"}, {"label": "list_item", "id": 10, "page_no": 49, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.068359375, "t": 315.41168212890625, "r": 547.36621, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8731935620307922, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14:"}, {"label": "caption", "id": 11, "page_no": 49, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.2685546875, "t": 349.93072509765625, "r": 354.4166564941406, "b": 359.5875549316406, "coord_origin": "TOPLEFT"}, "confidence": 0.7664288878440857, "cells": [{"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-14 SQL statement for employees on leave"}, {"label": "text", "id": 12, "page_no": 49, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 367.63812, "r": 266.69827, "b": 460.41162, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM"}, {"label": "text", "id": 13, "page_no": 49, "cluster": {"id": 13, "label": "text", "bbox": {"l": 167.63615, "t": 450.5314636230469, "r": 316.67755, "b": 460.8767395019531, "coord_origin": "TOPLEFT"}, "confidence": 0.6310456991195679, "cells": [{"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;"}, {"label": "list_item", "id": 14, "page_no": 49, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.88938903808594, "t": 474.4544677734375, "r": 547.25067, "b": 521.350830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467523097991943, "cells": [{"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}]}, "text": "4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22."}, {"label": "caption", "id": 15, "page_no": 49, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 64.29961395263672, "t": 569.6649780273438, "r": 301.89312744140625, "b": 579.7119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.881747305393219, "cells": [{"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-22 Employees on leave - Human Resources user"}, {"label": "list_item", "id": 16, "page_no": 49, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.30172729492188, "t": 595.9632568359375, "r": 546.50952, "b": 642.4163818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9604976177215576, "cells": [{"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}]}, "text": "5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well."}, {"label": "caption", "id": 17, "page_no": 49, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 64.38579559326172, "t": 683.8665771484375, "r": 313.5398254394531, "b": 693.6953735351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9106412529945374, "cells": [{"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user"}], "body": [{"label": "text", "id": 2, "page_no": 49, "cluster": {"id": 2, "label": "text", "bbox": {"l": 258.85648, "t": 71.10697937011719, "r": 446.63561999999996, "b": 117.91847229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.6826066970825195, "cells": [{"id": 2, "text": "TAX_ID,", "bbox": {"l": 295.95679, "t": 71.65808000000015, "r": 381.65659, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "USER_ID,", "bbox": {"l": 291.46075, "t": 83.65790000000004, "r": 386.6366, "b": 92.43268, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 258.85648, "t": 95.65770999999995, "r": 446.63561999999996, "b": 104.4325, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON_LEAVE_FLAG )", "bbox": {"l": 269.03604, "t": 107.65752999999995, "r": 421.61609, "b": 116.43230999999992, "coord_origin": "TOPLEFT"}}]}, "text": "TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE, ON_LEAVE_FLAG )"}, {"label": "text", "id": 3, "page_no": 49, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8447265625, "t": 118.94123840332031, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.6089476943016052, "cells": [{"id": 6, "text": "AS ", "bbox": {"l": 136.8, "t": 119.65734999999995, "r": 151.74001, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}]}, "text": "AS"}, {"label": "text", "id": 4, "page_no": 49, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 7, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 131.65716999999995, "r": 231.71878000000004, "b": 140.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FIRST_NAME ,", "bbox": {"l": 155.78375, "t": 143.65697999999998, "r": 231.71878000000004, "b": 152.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "MIDDLE_INITIAL,", "bbox": {"l": 155.11975, "t": 155.65679999999998, "r": 246.71854, "b": 164.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "LAST_NAME ,", "bbox": {"l": 156.0726, "t": 167.65661999999998, "r": 226.73877000000002, "b": 176.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "WORK_DEPARTMENT,", "bbox": {"l": 154.94188, "t": 179.65643, "r": 251.69853, "b": 188.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "PHONE_EXTENSION,", "bbox": {"l": 154.94188, "t": 191.65625, "r": 251.69853, "b": 200.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 203.65607, "r": 251.69853, "b": 212.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 215.65588000000002, "r": 241.73852999999997, "b": 224.43066, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 227.65570000000002, "r": 206.75902, "b": 236.43048, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 239.65552000000002, "r": 211.73903, "b": 248.4303, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "MANAGER_OF_EMPLOYEE,", "bbox": {"l": 154.39282, "t": 251.65533000000005, "r": 271.67828, "b": 260.43011, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, FIRST_NAME , MIDDLE_INITIAL, LAST_NAME , WORK_DEPARTMENT, PHONE_EXTENSION, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE,"}, {"label": "text", "id": 5, "page_no": 49, "cluster": {"id": 5, "label": "text", "bbox": {"l": 155.53102, "t": 262.309326171875, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}, "confidence": 0.6180596351623535, "cells": [{"id": 18, "text": "ON_LEAVE_FLAG", "bbox": {"l": 155.53102, "t": 263.65515000000005, "r": 236.69878, "b": 272.42993, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG"}, {"label": "text", "id": 6, "page_no": 49, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 274.9990234375, "r": 157.71849060058594, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6689217686653137, "cells": [{"id": 19, "text": "FROM", "bbox": {"l": 136.8, "t": 275.65497000000005, "r": 157.55051, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 7, "page_no": 49, "cluster": {"id": 7, "label": "text", "bbox": {"l": 167.92577, "t": 274.5404052734375, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}, "confidence": 0.6523625254631042, "cells": [{"id": 20, "text": "HR_SCHEMA.EMPLOYEES ", "bbox": {"l": 167.92577, "t": 275.65497000000005, "r": 271.67828, "b": 284.42975, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES"}, {"label": "text", "id": 8, "page_no": 49, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.10264587402344, "t": 286.8880615234375, "r": 161.95062255859375, "b": 296.42957, "coord_origin": "TOPLEFT"}, "confidence": 0.6754139065742493, "cells": [{"id": 21, "text": "WHERE", "bbox": {"l": 136.8, "t": 287.65479, "r": 161.77747, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE"}, {"label": "text", "id": 9, "page_no": 49, "cluster": {"id": 9, "label": "text", "bbox": {"l": 171.0566864013672, "t": 286.53363037109375, "r": 271.67828, "b": 297.5150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.6802994608879089, "cells": [{"id": 22, "text": "ON_LEAVE_FLAG = 'Y';", "bbox": {"l": 171.76845, "t": 287.65479, "r": 271.67828, "b": 296.42957, "coord_origin": "TOPLEFT"}}]}, "text": "ON_LEAVE_FLAG = 'Y';"}, {"label": "list_item", "id": 10, "page_no": 49, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.068359375, "t": 315.41168212890625, "r": 547.36621, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.8731935620307922, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 316.48502, "r": 145.04652, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Use the view to query the data and see who is on leave. The SQL statement that is used is ", "bbox": {"l": 147.79535, "t": 316.48502, "r": 547.36621, "b": 325.698, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "shown in Example 3-14:", "bbox": {"l": 151.20016, "t": 328.48483, "r": 257.75723, "b": 337.69780999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. Use the view to query the data and see who is on leave. The SQL statement that is used is shown in Example 3-14:"}, {"label": "caption", "id": 11, "page_no": 49, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.2685546875, "t": 349.93072509765625, "r": 354.4166564941406, "b": 359.5875549316406, "coord_origin": "TOPLEFT"}, "confidence": 0.7664288878440857, "cells": [{"id": 26, "text": "Example 3-14 SQL statement for employees on leave", "bbox": {"l": 136.8, "t": 350.5379899999999, "r": 353.97809, "b": 358.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-14 SQL statement for employees on leave"}, {"label": "text", "id": 12, "page_no": 49, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.8, "t": 367.63812, "r": 266.69827, "b": 460.41162, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 27, "text": "SELECT EMPLOYEE_ID,", "bbox": {"l": 136.8, "t": 367.63812, "r": 231.71878000000004, "b": 376.4129, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "LAST_NAME,", "bbox": {"l": 156.39209, "t": 379.63794, "r": 221.69901999999996, "b": 388.41272, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "JOB_DESCRIPTION,", "bbox": {"l": 154.94188, "t": 391.63776, "r": 251.69853, "b": 400.41254, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DATE_OF_BIRTH,", "bbox": {"l": 155.31857, "t": 403.63757, "r": 241.73852999999997, "b": 412.41235, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "TAX_ID,", "bbox": {"l": 157.7877, "t": 415.63739, "r": 206.75902, "b": 424.41217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "USER_ID,", "bbox": {"l": 157.23792, "t": 427.63721, "r": 211.73903, "b": 436.41199, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "MANAGER_OF_EMPLOYEE", "bbox": {"l": 154.5134, "t": 439.63702, "r": 266.69827, "b": 448.4118000000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "FROM", "bbox": {"l": 136.8, "t": 451.63684, "r": 157.35744, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT EMPLOYEE_ID, LAST_NAME, JOB_DESCRIPTION, DATE_OF_BIRTH, TAX_ID, USER_ID, MANAGER_OF_EMPLOYEE FROM"}, {"label": "text", "id": 13, "page_no": 49, "cluster": {"id": 13, "label": "text", "bbox": {"l": 167.63615, "t": 450.5314636230469, "r": 316.67755, "b": 460.8767395019531, "coord_origin": "TOPLEFT"}, "confidence": 0.6310456991195679, "cells": [{"id": 35, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;", "bbox": {"l": 167.63615, "t": 451.63684, "r": 316.67755, "b": 460.41162, "coord_origin": "TOPLEFT"}}]}, "text": "HR_SCHEMA.EMPLOYEES_ON_LEAVE;"}, {"label": "list_item", "id": 14, "page_no": 49, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.88938903808594, "t": 474.4544677734375, "r": 547.25067, "b": 521.350830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467523097991943, "cells": [{"id": 36, "text": "4.", "bbox": {"l": 136.8, "t": 475.48706, "r": 145.07851, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Start with the Human Resources person (VGLUCCHESS) and see what is the result of the ", "bbox": {"l": 147.83798, "t": 475.48706, "r": 547.25067, "b": 484.70004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "previous query. He sees the two employees that are on leave and no masking is done over ", "bbox": {"l": 151.2002, "t": 487.54663, "r": 547.23877, "b": 496.75961, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in ", "bbox": {"l": 151.2002, "t": 499.54645, "r": 516.39642, "b": 508.75943, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Figure 3-22.", "bbox": {"l": 151.2002, "t": 511.54626, "r": 205.13356, "b": 520.7592500000001, "coord_origin": "TOPLEFT"}}]}, "text": "4. Start with the Human Resources person (VGLUCCHESS) and see what is the result of the previous query. He sees the two employees that are on leave and no masking is done over the DATE_OF_BIRTH and TAX_ID columns. The results of the query are shown in Figure 3-22."}, {"label": "caption", "id": 15, "page_no": 49, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 64.29961395263672, "t": 569.6649780273438, "r": 301.89312744140625, "b": 579.7119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.881747305393219, "cells": [{"id": 41, "text": "Figure 3-22 Employees on leave - Human Resources user", "bbox": {"l": 64.800003, "t": 571.09799, "r": 300.797, "b": 579.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-22 Employees on leave - Human Resources user"}, {"label": "list_item", "id": 16, "page_no": 49, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.30172729492188, "t": 595.9632568359375, "r": 546.50952, "b": 642.4163818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9604976177215576, "cells": [{"id": 42, "text": "5.", "bbox": {"l": 136.8, "t": 597.04872, "r": 145.2104, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query ", "bbox": {"l": 148.01385, "t": 597.04872, "r": 546.50952, "b": 606.26172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "over the view. He sees only the employees that are on leave that are managed by him. In ", "bbox": {"l": 151.20016, "t": 609.04852, "r": 546.16187, "b": 618.26152, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "this example, it is one employee. The columns are masked, which confirms that RCAC is ", "bbox": {"l": 151.20016, "t": 621.04832, "r": 544.84515, "b": 630.2613200000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "applied to the view as well.", "bbox": {"l": 151.20016, "t": 633.04813, "r": 269.8038, "b": 642.26112, "coord_origin": "TOPLEFT"}}]}, "text": "5. Figure 3-23 shows what the Manager (TQSPENSER) gets when he runs the same query over the view. He sees only the employees that are on leave that are managed by him. In this example, it is one employee. The columns are masked, which confirms that RCAC is applied to the view as well."}, {"label": "caption", "id": 17, "page_no": 49, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 64.38579559326172, "t": 683.8665771484375, "r": 313.5398254394531, "b": 693.6953735351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9106412529945374, "cells": [{"id": 47, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user", "bbox": {"l": 64.800003, "t": 684.6179999999999, "r": 312.7247, "b": 692.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-23 Employee on leave - Manager of Field Reps user"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 49, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1474609375, "t": 754.3988037109375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9037860631942749, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 49, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26473999023438, "t": 754.7013549804688, "r": 334.42142, "b": 764.0106811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9487432837486267, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 50, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.6600646972656, "t": 754.7468872070312, "r": 523.60162, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9453045725822449, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7924194335938, "t": 754.3042602539062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.898695707321167, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.05897521972656, "t": 70.66057586669922, "r": 536.18866, "b": 92.95333862304688, "coord_origin": "TOPLEFT"}, "confidence": 0.8970366716384888, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 64.34432983398438, "t": 155.6955108642578, "r": 265.8516540527344, "b": 164.99256896972656, "coord_origin": "TOPLEFT"}, "confidence": 0.8921710252761841, "cells": [{"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 50, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6600646972656, "t": 754.7468872070312, "r": 523.60162, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9453045725822449, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 50, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7924194335938, "t": 754.3042602539062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.898695707321167, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}, {"label": "list_item", "id": 2, "page_no": 50, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05897521972656, "t": 70.66057586669922, "r": 536.18866, "b": 92.95333862304688, "coord_origin": "TOPLEFT"}, "confidence": 0.8970366716384888, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave."}, {"label": "text", "id": 3, "page_no": 50, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "."}, {"label": "caption", "id": 4, "page_no": 50, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.34432983398438, "t": 155.6955108642578, "r": 265.8516540527344, "b": 164.99256896972656, "coord_origin": "TOPLEFT"}, "confidence": 0.8921710252761841, "cells": [{"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-24 Employees on leave - employee user"}], "body": [{"label": "list_item", "id": 2, "page_no": 50, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05897521972656, "t": 70.66057586669922, "r": 536.18866, "b": 92.95333862304688, "coord_origin": "TOPLEFT"}, "confidence": 0.8970366716384888, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query ", "bbox": {"l": 148.00006, "t": 71.50903000000005, "r": 533.13684, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "over the view. The employee gets an empty set or he gets only himself if he is on leave.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 536.18866, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Figure 3-24 shows what the employee (DSSMITH) gets when he runs the same query over the view. The employee gets an empty set or he gets only himself if he is on leave."}, {"label": "text", "id": 3, "page_no": 50, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 5, "text": ".", "bbox": {"l": 64.799744, "t": 98.50860999999998, "r": 67.568626, "b": 107.72162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "."}, {"label": "caption", "id": 4, "page_no": 50, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.34432983398438, "t": 155.6955108642578, "r": 265.8516540527344, "b": 164.99256896972656, "coord_origin": "TOPLEFT"}, "confidence": 0.8921710252761841, "cells": [{"id": 6, "text": "Figure 3-24 Employees on leave - employee user", "bbox": {"l": 64.800003, "t": 156.37805000000003, "r": 264.79526, "b": 164.70299999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-24 Employees on leave - employee user"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 50, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.6600646972656, "t": 754.7468872070312, "r": 523.60162, "b": 764.0894775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9453045725822449, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 50, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7924194335938, "t": 754.3042602539062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.898695707321167, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}]}}, {"page_no": 51, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.35157775878906, "t": 754.292236328125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9079517722129822, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.37352752685547, "t": 754.510986328125, "r": 334.5318603515625, "b": 764.0523681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9429895877838135, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 51, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35157775878906, "t": 754.292236328125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9079517722129822, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 51, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37352752685547, "t": 754.510986328125, "r": 334.5318603515625, "b": 764.0523681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9429895877838135, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 51, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35157775878906, "t": 754.292236328125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9079517722129822, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 51, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37352752685547, "t": 754.510986328125, "r": 334.5318603515625, "b": 764.0523681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9429895877838135, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 52, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.681270599365234, "t": 754.6544799804688, "r": 257.24335, "b": 764.1611938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9473534226417542, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5507202148438, "t": 754.1658325195312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108303189277649, "cells": [{"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 135.96546936035156, "t": 253.45413208007812, "r": 532.03375, "b": 340.89832, "coord_origin": "TOPLEFT"}, "confidence": 0.8815584778785706, "cells": [{"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8340301513672, "t": 378.66455078125, "r": 546.15009, "b": 424.94116, "coord_origin": "TOPLEFT"}, "confidence": 0.9846907258033752, "cells": [{"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.71417236328125, "t": 436.7104187011719, "r": 347.41214, "b": 447.06390380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.922663152217865, "cells": [{"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7564697265625, "t": 453.9541320800781, "r": 392.97119, "b": 464.2275695800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9471576809883118, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.56719970703125, "t": 465.5244445800781, "r": 368.54633, "b": 476.0690612792969, "coord_origin": "TOPLEFT"}, "confidence": 0.9392989873886108, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7265167236328, "t": 478.0903625488281, "r": 261.45441, "b": 488.0649719238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9472163915634155, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 92.38893127441406, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7300243973731995, "cells": [{"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 32.17905807495117, "t": 70.60472106933594, "r": 238.82225036621094, "b": 238.14642333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7240587472915649, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 52, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.681270599365234, "t": 754.6544799804688, "r": 257.24335, "b": 764.1611938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9473534226417542, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 52, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5507202148438, "t": 754.1658325195312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108303189277649, "cells": [{"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "37"}, {"label": "text", "id": 2, "page_no": 52, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4."}, {"label": "section_header", "id": 3, "page_no": 52, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 135.96546936035156, "t": 253.45413208007812, "r": 532.03375, "b": 340.89832, "coord_origin": "TOPLEFT"}, "confidence": 0.8815584778785706, "cells": [{"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}]}, "text": "Implementing Row and Column Access Control: Banking example"}, {"label": "text", "id": 4, "page_no": 52, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8340301513672, "t": 378.66455078125, "r": 546.15009, "b": 424.94116, "coord_origin": "TOPLEFT"}, "confidence": 0.9846907258033752, "cells": [{"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "text", "id": 5, "page_no": 52, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.71417236328125, "t": 436.7104187011719, "r": 347.41214, "b": 447.06390380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.922663152217865, "cells": [{"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 52, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7564697265625, "t": 453.9541320800781, "r": 392.97119, "b": 464.2275695800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9471576809883118, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Business requirements for the RCAC banking scenario"}, {"label": "list_item", "id": 7, "page_no": 52, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56719970703125, "t": 465.5244445800781, "r": 368.54633, "b": 476.0690612792969, "coord_origin": "TOPLEFT"}, "confidence": 0.9392989873886108, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Description of the users roles and responsibilities"}, {"label": "list_item", "id": 8, "page_no": 52, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7265167236328, "t": 478.0903625488281, "r": 261.45441, "b": 488.0649719238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9472163915634155, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementation of RCAC"}, {"label": "text", "id": 9, "page_no": 52, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 92.38893127441406, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7300243973731995, "cells": [{"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "picture", "id": 10, "page_no": 52, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17905807495117, "t": 70.60472106933594, "r": 238.82225036621094, "b": 238.14642333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7240587472915649, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 52, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 4.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4."}, {"label": "section_header", "id": 3, "page_no": 52, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 135.96546936035156, "t": 253.45413208007812, "r": 532.03375, "b": 340.89832, "coord_origin": "TOPLEFT"}, "confidence": 0.8815584778785706, "cells": [{"id": 3, "text": "Implementing Row and Column ", "bbox": {"l": 136.8, "t": 254.88635, "r": 532.03375, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Access Control: Banking ", "bbox": {"l": 136.8, "t": 285.84671, "r": 452.48553, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "example", "bbox": {"l": 136.8, "t": 316.8668200000001, "r": 240.41341999999997, "b": 340.89832, "coord_origin": "TOPLEFT"}}]}, "text": "Implementing Row and Column Access Control: Banking example"}, {"label": "text", "id": 4, "page_no": 52, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8340301513672, "t": 378.66455078125, "r": 546.15009, "b": 424.94116, "coord_origin": "TOPLEFT"}, "confidence": 0.9846907258033752, "cells": [{"id": 6, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a ", "bbox": {"l": 136.8, "t": 379.72873, "r": 520.66241, "b": 388.94171000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on ", "bbox": {"l": 136.80002, "t": 391.72855, "r": 527.6723, "b": 400.94153, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "page 121 provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 136.80002, "t": 403.72836, "r": 546.15009, "b": 412.94135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "re-create this RCAC example.", "bbox": {"l": 136.80002, "t": 415.72818, "r": 268.71228, "b": 424.94116, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter illustrates the Row and Column Access Control (RCAC) concepts using a banking example. Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "text", "id": 5, "page_no": 52, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.71417236328125, "t": 436.7104187011719, "r": 347.41214, "b": 447.06390380859375, "coord_origin": "TOPLEFT"}, "confidence": 0.922663152217865, "cells": [{"id": 10, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.80002, "t": 437.68799, "r": 347.41214, "b": 446.90097, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 52, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7564697265625, "t": 453.9541320800781, "r": 392.97119, "b": 464.2275695800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9471576809883118, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 454.87695, "r": 141.78001, "b": 463.65173, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 151.20018, "t": 454.72757, "r": 392.97119, "b": 463.94055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Business requirements for the RCAC banking scenario"}, {"label": "list_item", "id": 7, "page_no": 52, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56719970703125, "t": 465.5244445800781, "r": 368.54633, "b": 476.0690612792969, "coord_origin": "TOPLEFT"}, "confidence": 0.9392989873886108, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 466.87677, "r": 141.78001, "b": 475.65155, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Description of the users roles and responsibilities", "bbox": {"l": 151.20018, "t": 466.72739, "r": 368.54633, "b": 475.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Description of the users roles and responsibilities"}, {"label": "list_item", "id": 8, "page_no": 52, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7265167236328, "t": 478.0903625488281, "r": 261.45441, "b": 488.0649719238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9472163915634155, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 478.87659, "r": 141.78001, "b": 487.65137, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Implementation of RCAC", "bbox": {"l": 151.20018, "t": 478.7272, "r": 261.45441, "b": 487.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementation of RCAC"}, {"label": "text", "id": 9, "page_no": 52, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 92.38893127441406, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7300243973731995, "cells": [{"id": 17, "text": "4", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "picture", "id": 10, "page_no": 52, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.17905807495117, "t": 70.60472106933594, "r": 238.82225036621094, "b": 238.14642333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7240587472915649, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 52, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.681270599365234, "t": 754.6544799804688, "r": 257.24335, "b": 764.1611938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9473534226417542, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 52, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5507202148438, "t": 754.1658325195312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9108303189277649, "cells": [{"id": 1, "text": "37", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "37"}]}}, {"page_no": 53, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.15193939208984, "t": 754.482421875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917007327079773, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28313446044922, "t": 754.71630859375, "r": 334.42142, "b": 763.9201049804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948601484298706, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.15269470214844, "t": 73.28873443603516, "r": 512.55139, "b": 89.75958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9640912413597107, "cells": [{"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.70774841308594, "t": 105.93765258789062, "r": 543.90033, "b": 128.36497497558594, "coord_origin": "TOPLEFT"}, "confidence": 0.9784327745437622, "cells": [{"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.7441864013672, "t": 134.77182006835938, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9225907325744629, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.63128662109375, "t": 146.7830810546875, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.921238124370575, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5100555419922, "t": 158.49131774902344, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9183958172798157, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.0419464111328, "t": 180.70614624023438, "r": 547.2746, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9874840378761292, "cells": [{"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.87716674804688, "t": 262.61517333984375, "r": 546.85059, "b": 333.1118469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9887834191322327, "cells": [{"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.72178649902344, "t": 344.7479553222656, "r": 547.27075, "b": 427.0599670410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884931445121765, "cells": [{"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.73001098632812, "t": 438.89556884765625, "r": 547.21399, "b": 496.8158, "coord_origin": "TOPLEFT"}, "confidence": 0.9869483709335327, "cells": [{"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.76414489746094, "t": 508.6873474121094, "r": 547.24298, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9792865514755249, "cells": [{"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 53, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15193939208984, "t": 754.482421875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917007327079773, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "38"}, {"label": "page_footer", "id": 1, "page_no": 53, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28313446044922, "t": 754.71630859375, "r": 334.42142, "b": 763.9201049804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948601484298706, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 53, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.15269470214844, "t": 73.28873443603516, "r": 512.55139, "b": 89.75958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9640912413597107, "cells": [{"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "4.1 Business requirements for the RCAC banking scenario"}, {"label": "text", "id": 3, "page_no": 53, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.70774841308594, "t": 105.93765258789062, "r": 543.90033, "b": 128.36497497558594, "coord_origin": "TOPLEFT"}, "confidence": 0.9784327745437622, "cells": [{"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application:"}, {"label": "list_item", "id": 4, "page_no": 53, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.7441864013672, "t": 134.77182006835938, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9225907325744629, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMERS"}, {"label": "list_item", "id": 5, "page_no": 53, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.63128662109375, "t": 146.7830810546875, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.921238124370575, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ACCOUNTS"}, {"label": "list_item", "id": 6, "page_no": 53, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5100555419922, "t": 158.49131774902344, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9183958172798157, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TRANSACTIONS"}, {"label": "text", "id": 7, "page_no": 53, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.0419464111328, "t": 180.70614624023438, "r": 547.2746, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9874840378761292, "cells": [{"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values."}, {"label": "text", "id": 8, "page_no": 53, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87716674804688, "t": 262.61517333984375, "r": 546.85059, "b": 333.1118469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9887834191322327, "cells": [{"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee\u2019s personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet."}, {"label": "text", "id": 9, "page_no": 53, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.72178649902344, "t": 344.7479553222656, "r": 547.27075, "b": 427.0599670410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884931445121765, "cells": [{"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile."}, {"label": "text", "id": 10, "page_no": 53, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.73001098632812, "t": 438.89556884765625, "r": 547.21399, "b": 496.8158, "coord_origin": "TOPLEFT"}, "confidence": 0.9869483709335327, "cells": [{"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}]}, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table."}, {"label": "text", "id": 11, "page_no": 53, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.76414489746094, "t": 508.6873474121094, "r": 547.24298, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9792865514755249, "cells": [{"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}]}, "text": "Applications that do not use the web interface do not have to be changed because the global variable is NULL by default."}], "body": [{"label": "section_header", "id": 2, "page_no": 53, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.15269470214844, "t": 73.28873443603516, "r": 512.55139, "b": 89.75958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9640912413597107, "cells": [{"id": 2, "text": "4.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.199661, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Business requirements for the RCAC banking scenario", "bbox": {"l": 91.679573, "t": 74.34069999999997, "r": 512.55139, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "4.1 Business requirements for the RCAC banking scenario"}, {"label": "text", "id": 3, "page_no": 53, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.70774841308594, "t": 105.93765258789062, "r": 543.90033, "b": 128.36497497558594, "coord_origin": "TOPLEFT"}, "confidence": 0.9784327745437622, "cells": [{"id": 4, "text": "As part of a new internet banking project, the ", "bbox": {"l": 136.8, "t": 106.6087, "r": 338.47913, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Bank", "bbox": {"l": 338.34, "t": 106.08496000000002, "r": 360.88632, "b": 116.14269999999988, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " decides to raise the level of data access ", "bbox": {"l": 360.95999, "t": 106.6087, "r": 543.10248, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "control on the following three tables that are involved in the new customer-facing application:", "bbox": {"l": 136.80023, "t": 118.60852, "r": 543.90033, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As part of a new internet banking project, the Bank decides to raise the level of data access control on the following three tables that are involved in the new customer-facing application:"}, {"label": "list_item", "id": 4, "page_no": 53, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.7441864013672, "t": 134.77182006835938, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9225907325744629, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 135.79749000000004, "r": 141.78023, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 151.20039, "t": 135.64806999999996, "r": 214.60674, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMERS"}, {"label": "list_item", "id": 5, "page_no": 53, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.63128662109375, "t": 146.7830810546875, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.921238124370575, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 147.79729999999995, "r": 141.78023, "b": 156.57208000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ACCOUNTS", "bbox": {"l": 151.20039, "t": 147.64788999999996, "r": 206.64072, "b": 156.86090000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ACCOUNTS"}, {"label": "list_item", "id": 6, "page_no": 53, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5100555419922, "t": 158.49131774902344, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9183958172798157, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80023, "t": 159.79711999999995, "r": 141.78023, "b": 168.57190000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTIONS", "bbox": {"l": 151.20039, "t": 159.64770999999996, "r": 229.18224, "b": 168.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TRANSACTIONS"}, {"label": "text", "id": 7, "page_no": 53, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.0419464111328, "t": 180.70614624023438, "r": 547.2746, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9874840378761292, "cells": [{"id": 14, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, ", "bbox": {"l": 136.80023, "t": 181.60748, "r": 543.45526, "b": 190.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and to restrict column values by using masks. The default position is that no user can access ", "bbox": {"l": 136.80023, "t": 193.6073, "r": 547.2746, "b": 202.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the rows in the tables. From there, specific bank employees are allowed access only to the ", "bbox": {"l": 136.80023, "t": 205.60712, "r": 537.76495, "b": 214.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "rows for their job responsibilities. In addition, columns containing personal or sensitive data ", "bbox": {"l": 136.80023, "t": 217.60693000000003, "r": 540.32367, "b": 226.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are masked appropriately. Bank customers are allowed access to only their rows and column ", "bbox": {"l": 136.80023, "t": 229.60675000000003, "r": 547.24182, "b": 238.81975999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "values.", "bbox": {"l": 136.80023, "t": 241.60657000000003, "r": 167.82861, "b": 250.81957999999997, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC will be used to restrict access to the rows in these three tables by using permissions, and to restrict column values by using masks. The default position is that no user can access the rows in the tables. From there, specific bank employees are allowed access only to the rows for their job responsibilities. In addition, columns containing personal or sensitive data are masked appropriately. Bank customers are allowed access to only their rows and column values."}, {"label": "text", "id": 8, "page_no": 53, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.87716674804688, "t": 262.61517333984375, "r": 546.85059, "b": 333.1118469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9887834191322327, "cells": [{"id": 20, "text": "In this example, it is assumed that the Bank employees have access to the tables when ", "bbox": {"l": 136.80023, "t": 263.62616, "r": 523.98511, "b": 272.83916999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "working on the premises only. Employee access to data is provided by programs and tools ", "bbox": {"l": 136.80023, "t": 275.62598, "r": 536.96021, "b": 284.83899, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The ", "bbox": {"l": 136.80025, "t": 287.62582000000003, "r": 514.68756, "b": 296.83881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "database connection authentication for these interfaces uses the employee\u2019s personal and ", "bbox": {"l": 136.80025, "t": 299.62564, "r": 537.64044, "b": 308.83862, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "unique IBM i user profile. Operating in their professional role, employees do not have access ", "bbox": {"l": 136.80026, "t": 311.62546, "r": 546.85059, "b": 320.83844, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "to bank data through the Internet.", "bbox": {"l": 136.80026, "t": 323.62527, "r": 284.8855, "b": 332.83826, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, it is assumed that the Bank employees have access to the tables when working on the premises only. Employee access to data is provided by programs and tools using standard DB2 interfaces, such as embedded SQL, ODBC, JDBC, and CLI. The database connection authentication for these interfaces uses the employee\u2019s personal and unique IBM i user profile. Operating in their professional role, employees do not have access to bank data through the Internet."}, {"label": "text", "id": 9, "page_no": 53, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.72178649902344, "t": 344.7479553222656, "r": 547.27075, "b": 427.0599670410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9884931445121765, "cells": [{"id": 26, "text": "Bank customers have access to their accounts and transactions by using a new web ", "bbox": {"l": 136.80026, "t": 345.64483999999993, "r": 511.27428999999995, "b": 354.85782, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "application. Each customer has unique credentials for logging in to the application. The ", "bbox": {"l": 136.80026, "t": 357.64465, "r": 523.22845, "b": 366.85764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "authentication of the customer is handled by the web server. After the customer is ", "bbox": {"l": 136.80026, "t": 369.64447, "r": 500.01061999999996, "b": 378.85745, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "authenticated, the web server establishes a connection to DB2 for data access. This ", "bbox": {"l": 136.80026, "t": 381.64429, "r": 510.52930000000003, "b": 390.8572700000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "connection uses a common IBM i user profile that is known as WEBUSER. This user profile is ", "bbox": {"l": 136.80026, "t": 393.6441, "r": 547.27075, "b": 402.85709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "secured and is used only by the web application. No Bank employee has access to the ", "bbox": {"l": 136.80026, "t": 405.64392, "r": 521.72943, "b": 414.85689999999994, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WEBUSER profile, and no customer has an IBM i user profile.", "bbox": {"l": 136.80026, "t": 417.64374, "r": 410.31177, "b": 426.85672000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Bank customers have access to their accounts and transactions by using a new web application. Each customer has unique credentials for logging in to the application. The authentication of the customer is handled by the web server. After the customer is authenticated, the web server establishes a connection to DB2 for data access. This connection uses a common IBM i user profile that is known as WEBUSER. This user profile is secured and is used only by the web application. No Bank employee has access to the WEBUSER profile, and no customer has an IBM i user profile."}, {"label": "text", "id": 10, "page_no": 53, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.73001098632812, "t": 438.89556884765625, "r": 547.21399, "b": 496.8158, "coord_origin": "TOPLEFT"}, "confidence": 0.9869483709335327, "cells": [{"id": 33, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is ", "bbox": {"l": 136.80026, "t": 439.60355, "r": 534.81372, "b": 448.81653, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "secured and can be accessed only by the WEBUSER. The web application sets the ", "bbox": {"l": 136.80026, "t": 451.60336, "r": 508.47058, "b": 460.81635, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the ", "bbox": {"l": 136.80026, "t": 463.60318, "r": 547.21399, "b": 472.81616, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the ", "bbox": {"l": 136.80025, "t": 475.603, "r": 496.51453, "b": 484.81598, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CUSTOMERS table.", "bbox": {"l": 136.80025, "t": 487.60281, "r": 227.16434, "b": 496.8158, "coord_origin": "TOPLEFT"}}]}, "text": "The customer\u2019s identity is passed to DB2 by using a global variable. The global variable is secured and can be accessed only by the WEBUSER. The web application sets the CUSTOMER_LOGIN_ID variable to the customer\u2019s login value. This value is compared to the customer\u2019s login value that is found in the CUSTOMER_LOGIN_ID column of the CUSTOMERS table."}, {"label": "text", "id": 11, "page_no": 53, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.76414489746094, "t": 508.6873474121094, "r": 547.24298, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9792865514755249, "cells": [{"id": 38, "text": "Applications that do not use the web interface do not have to be changed because the global ", "bbox": {"l": 136.80025, "t": 509.62238, "r": 547.24298, "b": 518.83536, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "variable is NULL by default.", "bbox": {"l": 136.80025, "t": 521.62219, "r": 258.24353, "b": 530.8351700000001, "coord_origin": "TOPLEFT"}}]}, "text": "Applications that do not use the web interface do not have to be changed because the global variable is NULL by default."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 53, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15193939208984, "t": 754.482421875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917007327079773, "cells": [{"id": 0, "text": "38 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "38"}, {"label": "page_footer", "id": 1, "page_no": 53, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28313446044922, "t": 754.71630859375, "r": 334.42142, "b": 763.9201049804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948601484298706, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 54, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.27481079101562, "t": 754.7271118164062, "r": 523.59357, "b": 763.9805908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535647034645081, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5966186523438, "t": 754.2191772460938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146284461021423, "cells": [{"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.5806884765625, "t": 70.6917953491211, "r": 442.27869, "b": 81.22028350830078, "coord_origin": "TOPLEFT"}, "confidence": 0.883094310760498, "cells": [{"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.6310577392578, "t": 87.42381286621094, "r": 547.35461, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9767823815345764, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.43284606933594, "t": 128.3446044921875, "r": 546.73322, "b": 162.75404357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9813671708106995, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.4942169189453, "t": 169.17440795898438, "r": 546.22345, "b": 215.9951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9838805794715881, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.07473754882812, "t": 489.646728515625, "r": 286.37646484375, "b": 498.6321105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9487526416778564, "cells": [{"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.41133880615234, "t": 525.37890625, "r": 475.69338999999997, "b": 541.5180053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9669509530067444, "cells": [{"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.86761474609375, "t": 557.9774169921875, "r": 533.13452, "b": 580.22142, "coord_origin": "TOPLEFT"}, "confidence": 0.9649704694747925, "cells": [{"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.75192260742188, "t": 587.4430541992188, "r": 395.10461, "b": 597.5853881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9487041234970093, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.67442321777344, "t": 599.6355590820312, "r": 266.76602, "b": 609.8877563476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9388520121574402, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.70191955566406, "t": 611.2393188476562, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}, "confidence": 0.9382083415985107, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.53024291992188, "t": 623.206787109375, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}, "confidence": 0.9220486879348755, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.38711547851562, "t": 635.4190673828125, "r": 365.1325378417969, "b": 645.393798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496619701385498, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.63414001464844, "t": 647.4161987304688, "r": 325.77802, "b": 657.5957641601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9528717994689941, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 136.02655029296875, "t": 229.7416229248047, "r": 494.36669921875, "b": 487.56256103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9840942025184631, "cells": [{"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 54, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27481079101562, "t": 754.7271118164062, "r": 523.59357, "b": 763.9805908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535647034645081, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 54, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5966186523438, "t": 754.2191772460938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146284461021423, "cells": [{"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "39"}, {"label": "text", "id": 2, "page_no": 54, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.5806884765625, "t": 70.6917953491211, "r": 442.27869, "b": 81.22028350830078, "coord_origin": "TOPLEFT"}, "confidence": 0.883094310760498, "cells": [{"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:"}, {"label": "list_item", "id": 3, "page_no": 54, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6310577392578, "t": 87.42381286621094, "r": 547.35461, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9767823815345764, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested."}, {"label": "list_item", "id": 4, "page_no": 54, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.43284606933594, "t": 128.3446044921875, "r": 546.73322, "b": 162.75404357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9813671708106995, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent)."}, {"label": "list_item", "id": 5, "page_no": 54, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.4942169189453, "t": 169.17440795898438, "r": 546.22345, "b": 215.9951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9838805794715881, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent)."}, {"label": "caption", "id": 6, "page_no": 54, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.07473754882812, "t": 489.646728515625, "r": 286.37646484375, "b": 498.6321105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9487526416778564, "cells": [{"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-1 Internet banking example"}, {"label": "section_header", "id": 7, "page_no": 54, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.41133880615234, "t": 525.37890625, "r": 475.69338999999997, "b": 541.5180053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9669509530067444, "cells": [{"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.2 Description of the users roles and responsibilities"}, {"label": "text", "id": 8, "page_no": 54, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.86761474609375, "t": 557.9774169921875, "r": 533.13452, "b": 580.22142, "coord_origin": "TOPLEFT"}, "confidence": 0.9649704694747925, "cells": [{"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}]}, "text": "During the requirements gathering phase, the following groups of users are identified and codified:"}, {"label": "list_item", "id": 9, "page_no": 54, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75192260742188, "t": 587.4430541992188, "r": 395.10461, "b": 597.5853881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9487041234970093, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SECURITY: Security officer and security administrators"}, {"label": "list_item", "id": 10, "page_no": 54, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.67442321777344, "t": 599.6355590820312, "r": 266.76602, "b": 609.8877563476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9388520121574402, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DBE: Database engineers"}, {"label": "list_item", "id": 11, "page_no": 54, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.70191955566406, "t": 611.2393188476562, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}, "confidence": 0.9382083415985107, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ADMIN: Bank business administrators"}, {"label": "list_item", "id": 12, "page_no": 54, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.53024291992188, "t": 623.206787109375, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}, "confidence": 0.9220486879348755, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TELLER: Bank tellers"}, {"label": "list_item", "id": 13, "page_no": 54, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.38711547851562, "t": 635.4190673828125, "r": 365.1325378417969, "b": 645.393798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496619701385498, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMER: Bank customers using the internet"}, {"label": "list_item", "id": 14, "page_no": 54, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.63414001464844, "t": 647.4161987304688, "r": 325.77802, "b": 657.5957641601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9528717994689941, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PUBLIC: Anyone not already in a group"}, {"label": "picture", "id": 15, "page_no": 54, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.02655029296875, "t": 229.7416229248047, "r": 494.36669921875, "b": 487.56256103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9840942025184631, "cells": [{"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 54, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.5806884765625, "t": 70.6917953491211, "r": 442.27869, "b": 81.22028350830078, "coord_origin": "TOPLEFT"}, "confidence": 0.883094310760498, "cells": [{"id": 2, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 442.27869, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "A diagram of the internet banking architecture is shown in Figure 4-1:"}, {"label": "list_item", "id": 3, "page_no": 54, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6310577392578, "t": 87.42381286621094, "r": 547.35461, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9767823815345764, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 88.63823999999988, "r": 141.77959, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The row permission and column masks for the CUSTOMERS table are based on the ", "bbox": {"l": 151.19975, "t": 88.48883000000001, "r": 526.37085, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "group of which the user profile is part. If the user is a customer, their specific login ID also ", "bbox": {"l": 151.19975, "t": 100.48865, "r": 547.35461, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "is tested.", "bbox": {"l": 151.19975, "t": 112.48845999999992, "r": 191.15727, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column masks for the CUSTOMERS table are based on the group of which the user profile is part. If the user is a customer, their specific login ID also is tested."}, {"label": "list_item", "id": 4, "page_no": 54, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.43284606933594, "t": 128.3446044921875, "r": 546.73322, "b": 162.75404357910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9813671708106995, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 129.67742999999996, "r": 141.77959, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The row permission and column mask for the ACCOUNTS table are based on the ", "bbox": {"l": 151.19975, "t": 129.52801999999997, "r": 513.82544, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) ", "bbox": {"l": 151.19975, "t": 141.52783, "r": 546.73322, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "with the customer (parent).", "bbox": {"l": 151.19975, "t": 153.52765, "r": 270.1192, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission and column mask for the ACCOUNTS table are based on the CUSTOMERS table permission rules. A subquery is used to connect the accounts (child) with the customer (parent)."}, {"label": "list_item", "id": 5, "page_no": 54, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.4942169189453, "t": 169.17440795898438, "r": 546.22345, "b": 215.9951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9838805794715881, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79959, "t": 170.65686000000005, "r": 141.77959, "b": 179.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The row permission for the TRANSACTIONS table is based on the ACCOUNTS table ", "bbox": {"l": 151.19975, "t": 170.50744999999995, "r": 530.51343, "b": 179.72046, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "permission rules and the CUSTOMERS table permission rules. A subquery is used to ", "bbox": {"l": 151.19975, "t": 182.50725999999997, "r": 531.53522, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "connect the transactions (child) with the account (parent) and the account (child) with the ", "bbox": {"l": 151.19975, "t": 194.50707999999997, "r": 546.22345, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "customer (parent).", "bbox": {"l": 151.19975, "t": 206.50689999999997, "r": 232.83888, "b": 215.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The row permission for the TRANSACTIONS table is based on the ACCOUNTS table permission rules and the CUSTOMERS table permission rules. A subquery is used to connect the transactions (child) with the account (parent) and the account (child) with the customer (parent)."}, {"label": "caption", "id": 6, "page_no": 54, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.07473754882812, "t": 489.646728515625, "r": 286.37646484375, "b": 498.6321105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9487526416778564, "cells": [{"id": 16, "text": "Figure 4-1 Internet banking example", "bbox": {"l": 136.8, "t": 490.0379, "r": 286.07849, "b": 498.36292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-1 Internet banking example"}, {"label": "section_header", "id": 7, "page_no": 54, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.41133880615234, "t": 525.37890625, "r": 475.69338999999997, "b": 541.5180053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9669509530067444, "cells": [{"id": 17, "text": "4.2", "bbox": {"l": 64.800003, "t": 526.74072, "r": 87.239075, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Description of the users roles and responsibilities", "bbox": {"l": 91.726906, "t": 526.74072, "r": 475.69338999999997, "b": 541.5037199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.2 Description of the users roles and responsibilities"}, {"label": "text", "id": 8, "page_no": 54, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.86761474609375, "t": 557.9774169921875, "r": 533.13452, "b": 580.22142, "coord_origin": "TOPLEFT"}, "confidence": 0.9649704694747925, "cells": [{"id": 19, "text": "During the requirements gathering phase, the following groups of users are identified and ", "bbox": {"l": 136.8, "t": 559.0086200000001, "r": 533.13452, "b": 568.22162, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "codified:", "bbox": {"l": 136.8, "t": 571.00842, "r": 173.99463, "b": 580.22142, "coord_origin": "TOPLEFT"}}]}, "text": "During the requirements gathering phase, the following groups of users are identified and codified:"}, {"label": "list_item", "id": 9, "page_no": 54, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75192260742188, "t": 587.4430541992188, "r": 395.10461, "b": 597.5853881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9487041234970093, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 588.19739, "r": 141.78, "b": 596.97214, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "SECURITY: Security officer and security administrators", "bbox": {"l": 151.20016, "t": 588.04799, "r": 395.10461, "b": 597.26099, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SECURITY: Security officer and security administrators"}, {"label": "list_item", "id": 10, "page_no": 54, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.67442321777344, "t": 599.6355590820312, "r": 266.76602, "b": 609.8877563476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9388520121574402, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 600.19719, "r": 141.78, "b": 608.97194, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "DBE: Database engineers", "bbox": {"l": 151.20016, "t": 600.04779, "r": 266.76602, "b": 609.26079, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DBE: Database engineers"}, {"label": "list_item", "id": 11, "page_no": 54, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.70191955566406, "t": 611.2393188476562, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}, "confidence": 0.9382083415985107, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 612.19699, "r": 141.78, "b": 620.97174, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ADMIN: Bank business administrators", "bbox": {"l": 151.20016, "t": 612.04759, "r": 319.24329, "b": 621.26059, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ADMIN: Bank business administrators"}, {"label": "list_item", "id": 12, "page_no": 54, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.53024291992188, "t": 623.206787109375, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}, "confidence": 0.9220486879348755, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 624.19679, "r": 141.78, "b": 632.97154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TELLER: Bank tellers", "bbox": {"l": 151.20016, "t": 624.04739, "r": 246.76636000000002, "b": 633.26039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TELLER: Bank tellers"}, {"label": "list_item", "id": 13, "page_no": 54, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.38711547851562, "t": 635.4190673828125, "r": 365.1325378417969, "b": 645.393798828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496619701385498, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 636.19659, "r": 141.78, "b": 644.97134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER: Bank customers using the internet", "bbox": {"l": 151.20016, "t": 636.0472, "r": 364.8681, "b": 645.26019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CUSTOMER: Bank customers using the internet"}, {"label": "list_item", "id": 14, "page_no": 54, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.63414001464844, "t": 647.4161987304688, "r": 325.77802, "b": 657.5957641601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9528717994689941, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 648.1964, "r": 141.78, "b": 656.97115, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "PUBLIC: Anyone not already in a group", "bbox": {"l": 151.20016, "t": 648.047, "r": 325.77802, "b": 657.25999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PUBLIC: Anyone not already in a group"}, {"label": "picture", "id": 15, "page_no": 54, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.02655029296875, "t": 229.7416229248047, "r": 494.36669921875, "b": 487.56256103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9840942025184631, "cells": [{"id": 33, "text": "Internet Banking Architecture", "bbox": {"l": 226.85941, "t": 237.95349, "r": 404.97986, "b": 250.65490999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Web app sets global variable to user\u0092s login ID value", "bbox": {"l": 269.82669, "t": 277.10919, "r": 467.91561999999993, "b": 285.00751, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Web", "bbox": {"l": 283.75961, "t": 342.39901999999995, "r": 310.64789, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Server", "bbox": {"l": 278.34604, "t": 359.62216, "r": 316.58282, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "DB2", "bbox": {"l": 429.82370000000003, "t": 342.39901999999995, "r": 454.2041300000001, "b": 354.69406000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Server", "bbox": {"l": 422.90341, "t": 359.62216, "r": 461.1402, "b": 371.91720999999995, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "LOGIN_ID", "bbox": {"l": 213.3264, "t": 346.5273700000001, "r": 250.46141, "b": 354.42569, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Authentication", "bbox": {"l": 204.0994, "t": 357.59979, "r": 259.81662, "b": 365.48889, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0093", "bbox": {"l": 345.9191, "t": 347.57309, "r": 349.77597, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WEBUSER", "bbox": {"l": 349.7944, "t": 347.57309, "r": 387.90744, "b": 355.47141, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0094", "bbox": {"l": 387.9021, "t": 347.57309, "r": 391.75897, "b": 355.46218999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DB Connection", "bbox": {"l": 340.99799, "t": 358.64557, "r": 396.67065, "b": 366.53467, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Customer", "bbox": {"l": 141.8476, "t": 387.90149, "r": 191.04857, "b": 398.43259, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "All online banking", "bbox": {"l": 402.66541, "t": 412.43927, "r": 471.38903999999997, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Only web server", "bbox": {"l": 261.18411, "t": 412.43927, "r": 323.3584, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "All online banking ", "bbox": {"l": 402.66541, "t": 412.43927, "r": 473.3999, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "customers run ", "bbox": {"l": 402.66571, "t": 423.51166, "r": 459.16913, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "database transactions ", "bbox": {"l": 402.66571, "t": 434.58405, "r": 488.49249, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "with WEBUSER profile", "bbox": {"l": 402.66571, "t": 445.65643, "r": 487.45444000000003, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Only web server ", "bbox": {"l": 261.18411, "t": 412.43927, "r": 325.42889, "b": 420.33759, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "understands true ", "bbox": {"l": 261.18405, "t": 423.51166, "r": 328.80505, "b": 431.40996999999993, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "identity of online ", "bbox": {"l": 261.18405, "t": 434.58405, "r": 328.98499, "b": 442.48236, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "banking customer ", "bbox": {"l": 261.18405, "t": 445.65643, "r": 331.50668, "b": 453.55475, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_LOGIN_ID variable used to validate RCAC", "bbox": {"l": 267.12009, "t": 470.87717, "r": 470.52832, "b": 478.77548, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 54, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27481079101562, "t": 754.7271118164062, "r": 523.59357, "b": 763.9805908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535647034645081, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 54, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5966186523438, "t": 754.2191772460938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146284461021423, "cells": [{"id": 1, "text": "39", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "39"}]}}, {"page_no": 55, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.19805908203125, "t": 754.2051391601562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140270948410034, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.33177947998047, "t": 754.7326049804688, "r": 334.42142, "b": 763.9369506835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9506687521934509, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.27764892578125, "t": 70.70075225830078, "r": 547.21271, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9673320651054382, "cells": [{"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.13352966308594, "t": 408.7555236816406, "r": 317.8505554199219, "b": 418.05963134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9396594762802124, "cells": [{"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 136.22354125976562, "t": 119.91455841064453, "r": 529.123291015625, "b": 404.9533386230469, "coord_origin": "TOPLEFT"}, "confidence": 0.8848159909248352, "cells": [{"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 55, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19805908203125, "t": 754.2051391601562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140270948410034, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "40"}, {"label": "page_footer", "id": 1, "page_no": 55, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33177947998047, "t": 754.7326049804688, "r": 334.42142, "b": 763.9369506835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9506687521934509, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 55, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.27764892578125, "t": 70.70075225830078, "r": 547.21271, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9673320651054382, "cells": [{"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example."}, {"label": "caption", "id": 3, "page_no": 55, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13352966308594, "t": 408.7555236816406, "r": 317.8505554199219, "b": 418.05963134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9396594762802124, "cells": [{"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-2 Rules for row and column access"}, {"label": "picture", "id": 4, "page_no": 55, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.22354125976562, "t": 119.91455841064453, "r": 529.123291015625, "b": 404.9533386230469, "coord_origin": "TOPLEFT"}, "confidence": 0.8848159909248352, "cells": [{"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 55, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.27764892578125, "t": 70.70075225830078, "r": 547.21271, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9673320651054382, "cells": [{"id": 2, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.18292, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.21271, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for row and column access in this example.", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 326.89856, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Based on their respective roles and responsibilities, the users (that is, a group) are controlled by row permissions and column masks. The chart that is shown in Figure 4-2 shows the rules for row and column access in this example."}, {"label": "caption", "id": 3, "page_no": 55, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13352966308594, "t": 408.7555236816406, "r": 317.8505554199219, "b": 418.05963134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9396594762802124, "cells": [{"id": 5, "text": "Figure 4-2 Rules for row and column access", "bbox": {"l": 136.8, "t": 409.45801, "r": 317.22745, "b": 417.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-2 Rules for row and column access"}, {"label": "picture", "id": 4, "page_no": 55, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.22354125976562, "t": 119.91455841064453, "r": 529.123291015625, "b": 404.9533386230469, "coord_origin": "TOPLEFT"}, "confidence": 0.8848159909248352, "cells": [{"id": 6, "text": "CUSTOMERS", "bbox": {"l": 224.10969999999998, "t": 126.65734999999995, "r": 293.81296, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCOUNTS", "bbox": {"l": 334.76221, "t": 126.65734999999995, "r": 396.79272, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "TRANSACTIONS", "bbox": {"l": 426.62415, "t": 126.65734999999995, "r": 513.33075, "b": 138.39282000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "R", "bbox": {"l": 226.44310000000002, "t": 145.98406999999997, "r": 230.7845, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ow", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 240.53235999999998, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Column", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 298.51202, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row", "bbox": {"l": 331.44345, "t": 145.98406999999997, "r": 345.53418, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Column", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 403.54813, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row", "bbox": {"l": 436.47955, "t": 145.98406999999997, "r": 450.57037, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Column", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 508.58422999999993, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "o", "bbox": {"l": 230.62950000000004, "t": 145.98406999999997, "r": 234.84297, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Permissions", "bbox": {"l": 214.22719999999998, "t": 155.59209999999996, "r": 252.80963, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Co u", "bbox": {"l": 273.4537, "t": 145.98406999999997, "r": 287.93063, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Masking", "bbox": {"l": 272.39001, "t": 155.59209999999996, "r": 299.58008, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "o", "bbox": {"l": 335.63129, "t": 145.98406999999997, "r": 339.84476, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Permissions", "bbox": {"l": 319.229, "t": 155.59209999999996, "r": 357.81146, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Co u", "bbox": {"l": 378.4899, "t": 145.98406999999997, "r": 392.96683, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Masking", "bbox": {"l": 377.42609, "t": 155.59209999999996, "r": 404.61615, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 440.66738999999995, "t": 145.98406999999997, "r": 444.88086, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permissions", "bbox": {"l": 424.2652, "t": 155.59209999999996, "r": 462.84766, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Co u", "bbox": {"l": 483.526, "t": 145.98406999999997, "r": 498.00293, "b": 152.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Masking", "bbox": {"l": 482.46231000000006, "t": 155.59209999999996, "r": 509.6523700000001, "b": 162.42798000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "SECURITY", "bbox": {"l": 150.4369, "t": 184.42291, "r": 194.79079, "b": 194.19275000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Rows", "bbox": {"l": 213.2664, "t": 184.74456999999995, "r": 250.56985, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Yes", "bbox": {"l": 277.68503, "t": 184.74456999999995, "r": 291.3363, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "No Rows", "bbox": {"l": 318.52045, "t": 184.74456999999995, "r": 355.82394, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Yes", "bbox": {"l": 382.93912, "t": 184.74456999999995, "r": 396.59039, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "No Rows", "bbox": {"l": 423.74057, "t": 184.74456999999995, "r": 461.0440699999999, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "No", "bbox": {"l": 488.94882, "t": 184.74456999999995, "r": 501.1167, "b": 193.55651999999998, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "DBE", "bbox": {"l": 175.9668, "t": 222.82056, "r": 194.78658, "b": 232.59038999999996, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "All Rows", "bbox": {"l": 213.7811, "t": 223.07367, "r": 250.2054, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Yes", "bbox": {"l": 277.69119, "t": 223.07367, "r": 291.52158, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "All Rows", "bbox": {"l": 319.04132, "t": 223.07367, "r": 355.46152, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Yes", "bbox": {"l": 382.9473, "t": 223.07367, "r": 396.77768, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All Rows", "bbox": {"l": 424.26346, "t": 223.07367, "r": 460.68365000000006, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "No", "bbox": {"l": 488.95798, "t": 223.07367, "r": 501.30292000000003, "b": 231.88562000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ADMIN", "bbox": {"l": 161.1087, "t": 261.25256, "r": 194.82318, "b": 271.02239999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "All Rows", "bbox": {"l": 213.7811, "t": 261.40265, "r": 250.2054, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "No", "bbox": {"l": 278.44574, "t": 261.40265, "r": 290.79065, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "All Rows", "bbox": {"l": 319.04437, "t": 261.40265, "r": 355.46869, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "No", "bbox": {"l": 383.70905, "t": 261.40265, "r": 396.05396, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "All Rows", "bbox": {"l": 424.27371, "t": 261.40265, "r": 460.69803, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "No", "bbox": {"l": 488.97235, "t": 261.40265, "r": 501.31726, "b": 270.2146, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "TELLER", "bbox": {"l": 162.241, "t": 299.6503000000001, "r": 194.78195, "b": 309.42014, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "All Rows", "bbox": {"l": 213.7811, "t": 299.69748, "r": 250.2054, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Yes", "bbox": {"l": 277.69119, "t": 299.69748, "r": 291.52158, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "All Rows", "bbox": {"l": 319.04132, "t": 299.69748, "r": 355.46152, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "No", "bbox": {"l": 383.70187, "t": 299.69748, "r": 396.04681, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "All Rows", "bbox": {"l": 424.26657, "t": 299.69748, "r": 460.69089, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "No", "bbox": {"l": 488.96520999999996, "t": 299.69748, "r": 501.31012, "b": 308.50939999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER", "bbox": {"l": 141.7897, "t": 338.04796999999996, "r": 194.80273, "b": 347.81781, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Own ", "bbox": {"l": 221.9136, "t": 331.84998, "r": 244.41694999999999, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Rows", "bbox": {"l": 220.57534999999996, "t": 344.20312, "r": 243.25369, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "No", "bbox": {"l": 278.42932, "t": 338.02655, "r": 290.77835, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Own ", "bbox": {"l": 327.15533, "t": 331.84998, "r": 349.65869, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Rows", "bbox": {"l": 325.81708, "t": 344.20312, "r": 348.49545, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "No", "bbox": {"l": 383.67105, "t": 338.02655, "r": 396.02008, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Own ", "bbox": {"l": 432.3630999999999, "t": 331.84998, "r": 454.86645999999996, "b": 340.66190000000006, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "Rows", "bbox": {"l": 431.02484000000004, "t": 344.20312, "r": 453.70322, "b": 353.01505, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "No", "bbox": {"l": 488.91278, "t": 338.02655, "r": 501.26181, "b": 346.83847, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "No Rows", "bbox": {"l": 213.2664, "t": 376.35559, "r": 250.56985, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Yes", "bbox": {"l": 277.68503, "t": 376.35559, "r": 291.3363, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "No Rows", "bbox": {"l": 318.52045, "t": 376.35559, "r": 355.82394, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "Yes", "bbox": {"l": 382.93912, "t": 376.35559, "r": 396.59039, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "No Rows", "bbox": {"l": 423.74057, "t": 376.35559, "r": 461.0440699999999, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "No", "bbox": {"l": 488.94882, "t": 376.35559, "r": 501.1167, "b": 385.16751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "PUBLIC", "bbox": {"l": 161.55479, "t": 376.4456799999999, "r": 194.79735, "b": 386.21552, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 55, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19805908203125, "t": 754.2051391601562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140270948410034, "cells": [{"id": 0, "text": "40 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "40"}, {"label": "page_footer", "id": 1, "page_no": 55, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33177947998047, "t": 754.7326049804688, "r": 334.42142, "b": 763.9369506835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9506687521934509, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 56, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.2675018310547, "t": 754.7578125, "r": 523.59357, "b": 763.9957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9552486538887024, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.689697265625, "t": 754.2295532226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9034480452537537, "cells": [{"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74815368652344, "t": 70.60477447509766, "r": 545.29602, "b": 92.98249816894531, "coord_origin": "TOPLEFT"}, "confidence": 0.8913360834121704, "cells": [{"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.09585571289062, "t": 401.38555908203125, "r": 245.08297729492188, "b": 410.9154052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9149027466773987, "cells": [{"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.05606079101562, "t": 427.2995300292969, "r": 543.45782, "b": 473.7316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834994673728943, "cells": [{"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7457733154297, "t": 479.84906005859375, "r": 547.29358, "b": 502.5825500488281, "coord_origin": "TOPLEFT"}, "confidence": 0.9738782048225403, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.60708618164062, "t": 509.2861328125, "r": 538.92694, "b": 531.83251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9742493033409119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.6043701171875, "t": 537.8555908203125, "r": 492.53729, "b": 560.4962768554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9739224314689636, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5557403564453, "t": 567.1375732421875, "r": 534.65118, "b": 589.821044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9734449982643127, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.36813354492188, "t": 595.9415893554688, "r": 529.1214, "b": 606.3484497070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9539303779602051, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.52735900878906, "t": 613.2100219726562, "r": 547.33234, "b": 647.35835, "coord_origin": "TOPLEFT"}, "confidence": 0.9781912565231323, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.407958984375, "t": 653.871337890625, "r": 530.79578, "b": 664.398681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545347690582275, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 56, "cluster": {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl"], "num_rows": 7, "num_cols": 4, "table_cells": [{"bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 382.36545, "b": 202.30615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 382.36545, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 279.81146, "r": 382.36545, "b": 317.44946, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353, "t": 343.04031, "r": 382.36545, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 56, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2675018310547, "t": 754.7578125, "r": 523.59357, "b": 763.9957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9552486538887024, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 56, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.689697265625, "t": 754.2295532226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9034480452537537, "cells": [{"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "41"}, {"label": "text", "id": 2, "page_no": 56, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74815368652344, "t": 70.60477447509766, "r": 545.29602, "b": 92.98249816894531, "coord_origin": "TOPLEFT"}, "confidence": 0.8913360834121704, "cells": [{"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table."}, {"label": "caption", "id": 3, "page_no": 56, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.09585571289062, "t": 401.38555908203125, "r": 245.08297729492188, "b": 410.9154052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9149027466773987, "cells": [{"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-3 Column masks"}, {"label": "text", "id": 4, "page_no": 56, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.05606079101562, "t": 427.2995300292969, "r": 543.45782, "b": 473.7316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834994673728943, "cells": [{"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}]}, "text": "For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur."}, {"label": "list_item", "id": 5, "page_no": 56, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7457733154297, "t": 479.84906005859375, "r": 547.29358, "b": 502.5825500488281, "coord_origin": "TOPLEFT"}, "confidence": 0.9738782048225403, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group."}, {"label": "list_item", "id": 6, "page_no": 56, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.60708618164062, "t": 509.2861328125, "r": 538.92694, "b": 531.83251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9742493033409119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group."}, {"label": "list_item", "id": 7, "page_no": 56, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6043701171875, "t": 537.8555908203125, "r": 492.53729, "b": 560.4962768554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9739224314689636, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group."}, {"label": "list_item", "id": 8, "page_no": 56, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5557403564453, "t": 567.1375732421875, "r": 534.65118, "b": 589.821044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9734449982643127, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group."}, {"label": "list_item", "id": 9, "page_no": 56, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.36813354492188, "t": 595.9415893554688, "r": 529.1214, "b": 606.3484497070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9539303779602051, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group."}, {"label": "list_item", "id": 10, "page_no": 56, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.52735900878906, "t": 613.2100219726562, "r": 547.33234, "b": 647.35835, "coord_origin": "TOPLEFT"}, "confidence": 0.9781912565231323, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed."}, {"label": "list_item", "id": 11, "page_no": 56, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.407958984375, "t": 653.871337890625, "r": 530.79578, "b": 664.398681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545347690582275, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG."}, {"label": "table", "id": 12, "page_no": 56, "cluster": {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl"], "num_rows": 7, "num_cols": 4, "table_cells": [{"bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 382.36545, "b": 202.30615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 382.36545, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 279.81146, "r": 382.36545, "b": 317.44946, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353, "t": 343.04031, "r": 382.36545, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 56, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74815368652344, "t": 70.60477447509766, "r": 545.29602, "b": 92.98249816894531, "coord_origin": "TOPLEFT"}, "confidence": 0.8913360834121704, "cells": [{"id": 2, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 545.29602, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "lists the column masks by table.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 277.30936, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The chart that is shown in Figure 4-3 shows the column access that is allowed by group and lists the column masks by table."}, {"label": "caption", "id": 3, "page_no": 56, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.09585571289062, "t": 401.38555908203125, "r": 245.08297729492188, "b": 410.9154052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9149027466773987, "cells": [{"id": 4, "text": "Figure 4-3 Column masks", "bbox": {"l": 136.8, "t": 402.138, "r": 244.67220999999998, "b": 410.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-3 Column masks"}, {"label": "text", "id": 4, "page_no": 56, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.05606079101562, "t": 427.2995300292969, "r": 543.45782, "b": 473.7316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834994673728943, "cells": [{"id": 5, "text": "For the demonstration and testing of RCAC in this example, the following users interact with ", "bbox": {"l": 136.8, "t": 428.14871, "r": 543.45782, "b": 437.36169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "the database. Furthermore, the column masking rules are developed independently of the ", "bbox": {"l": 136.8, "t": 440.14853, "r": 535.67096, "b": 449.36151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permissions. If a person does not have permission to access the row, the column mask ", "bbox": {"l": 136.8, "t": 452.14834999999994, "r": 541.92706, "b": 461.36133, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "processing does not occur.", "bbox": {"l": 136.8, "t": 464.14816, "r": 255.69651999999996, "b": 473.36115, "coord_origin": "TOPLEFT"}}]}, "text": "For the demonstration and testing of RCAC in this example, the following users interact with the database. Furthermore, the column masking rules are developed independently of the row permissions. If a person does not have permission to access the row, the column mask processing does not occur."}, {"label": "list_item", "id": 5, "page_no": 56, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7457733154297, "t": 479.84906005859375, "r": 547.29358, "b": 502.5825500488281, "coord_origin": "TOPLEFT"}, "confidence": 0.9738782048225403, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.27734, "r": 141.78, "b": 490.05212, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He ", "bbox": {"l": 151.20016, "t": 481.12796, "r": 547.29358, "b": 490.34094, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "is part of the DBE group.", "bbox": {"l": 151.20016, "t": 493.12778, "r": 260.65955, "b": 502.34076, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Hernando Bedoya is a DB2 for i database engineer with the user profile of HBEDOYA. He is part of the DBE group."}, {"label": "list_item", "id": 6, "page_no": 56, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.60708618164062, "t": 509.2861328125, "r": 538.92694, "b": 531.83251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9742493033409119, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 510.25696, "r": 141.78, "b": 519.03174, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of ", "bbox": {"l": 151.20016, "t": 510.10757, "r": 538.92694, "b": 519.32056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the DBE group.", "bbox": {"l": 151.20016, "t": 522.10739, "r": 219.05766, "b": 531.32037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mike Cain is a DB2 for i database engineer with the user profile of MCAIN. He is part of the DBE group."}, {"label": "list_item", "id": 7, "page_no": 56, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6043701171875, "t": 537.8555908203125, "r": 492.53729, "b": 560.4962768554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9739224314689636, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 539.29636, "r": 141.78, "b": 548.07111, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Veronica G. Lucchess is a bank account administrator with the user profile of ", "bbox": {"l": 151.20016, "t": 539.14696, "r": 492.53729, "b": 548.35995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "VGLUCCHESS. She is part of the ADMIN group.", "bbox": {"l": 151.20016, "t": 551.14676, "r": 366.6041, "b": 560.35976, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Veronica G. Lucchess is a bank account administrator with the user profile of VGLUCCHESS. She is part of the ADMIN group."}, {"label": "list_item", "id": 8, "page_no": 56, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5557403564453, "t": 567.1375732421875, "r": 534.65118, "b": 589.821044921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9734449982643127, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.27597, "r": 141.78, "b": 577.05072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the ", "bbox": {"l": 151.20016, "t": 568.12657, "r": 534.65118, "b": 577.33957, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TELLER group.", "bbox": {"l": 151.20018, "t": 580.12637, "r": 219.6682, "b": 589.33937, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Tom Q. Spenser is a bank teller with the user profile of TQSPENSER. He is part of the TELLER group."}, {"label": "list_item", "id": 9, "page_no": 56, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.36813354492188, "t": 595.9415893554688, "r": 529.1214, "b": 606.3484497070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9539303779602051, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 597.25558, "r": 141.78001, "b": 606.03033, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The IT security officer has the user profile of SECURITY. She is not part of any group.", "bbox": {"l": 151.20018, "t": 597.10619, "r": 529.1214, "b": 606.31918, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The IT security officer has the user profile of SECURITY. She is not part of any group."}, {"label": "list_item", "id": 10, "page_no": 56, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.52735900878906, "t": 613.2100219726562, "r": 547.33234, "b": 647.35835, "coord_origin": "TOPLEFT"}, "confidence": 0.9781912565231323, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 614.29515, "r": 141.78099, "b": 623.0699, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The online banking web application uses the user profile WEBUSER. This profile is part of ", "bbox": {"l": 151.20116, "t": 614.14575, "r": 547.33234, "b": 623.35875, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "the CUSTOMER group. Any future customer-facing applications can also use this group if ", "bbox": {"l": 151.20116, "t": 626.14555, "r": 547.30249, "b": 635.35855, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "needed.", "bbox": {"l": 151.20116, "t": 638.14536, "r": 187.36992, "b": 647.35835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The online banking web application uses the user profile WEBUSER. This profile is part of the CUSTOMER group. Any future customer-facing applications can also use this group if needed."}, {"label": "list_item", "id": 11, "page_no": 56, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.407958984375, "t": 653.871337890625, "r": 530.79578, "b": 664.398681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545347690582275, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 655.27457, "r": 141.78099, "b": 664.04932, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG.", "bbox": {"l": 151.20116, "t": 655.12517, "r": 530.79578, "b": 664.33817, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Adam O. Olsen is a bank customer with a web application login ID of KLD72CQR8JG."}, {"label": "table", "id": 12, "page_no": 56, "cluster": {"id": 12, "label": "table", "bbox": {"l": 135.74551391601562, "t": 107.74129486083984, "r": 529.2235107421875, "b": 398.3458557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.8612171411514282, "cells": [{"id": 29, "text": "CUSTOMERS", "bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Row", "bbox": {"l": 223.74899, "t": 130.54552999999999, "r": 237.25998, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Permissions", "bbox": {"l": 211.90196, "t": 139.86339999999996, "r": 249.31949, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Column", "bbox": {"l": 310.23877, "t": 130.54552999999999, "r": 334.52832, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Maskin", "bbox": {"l": 309.20752, "t": 139.86339999999996, "r": 331.92926, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "g", "bbox": {"l": 331.9368, "t": 139.86346000000003, "r": 335.58884, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ACCOUNTS", "bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Column", "bbox": {"l": 446.91339, "t": 130.54552999999999, "r": 471.20294, "b": 137.17511000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Masking", "bbox": {"l": 445.88214, "t": 139.86339999999996, "r": 472.26285, "b": 146.49298, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SECURITY", "bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "No Rows", "bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 373.63184, "b": 162.37212999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 164.66832999999997, "r": 314.60641, "b": 170.35895000000005, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 172.65515000000005, "r": 323.65616, "b": 178.34576000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 180.64197000000001, "r": 355.06308, "b": 186.33258, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "g", "bbox": {"l": 468.61081, "t": 139.86346000000003, "r": 472.26285, "b": 146.49303999999995, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DBE", "bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 188.62872000000004, "r": 382.36545, "b": 194.31934, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 196.61554, "r": 316.47134, "b": 202.30615, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "All Rows", "bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 373.63184, "b": 214.28632000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 216.58252000000005, "r": 314.60641, "b": 222.27313000000004, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 224.56934, "r": 323.65616, "b": 230.25995, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACCOUNT NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.91415, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ADMIN", "bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 232.55615, "r": 355.06308, "b": 238.24676999999997, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 240.54296999999997, "r": 382.36545, "b": 246.23357999999996, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 248.52979000000005, "r": 316.47134, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "All Rows", "bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "None", "bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "None", "bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "TELLER", "bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "All Rows", "bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18381, "t": 279.81146, "r": 314.60641, "b": 285.50208, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 287.79828, "r": 323.65616, "b": 293.48892000000006, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 295.7851299999999, "r": 355.06308, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 303.77197, "r": 382.36545, "b": 309.46262, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CUSTOMER TAX ID", "bbox": {"l": 263.18381, "t": 311.75882, "r": 316.46936, "b": 317.44946, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "None", "bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CUSTOMER", "bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "_", "bbox": {"l": 294.03271, "t": 311.75864, "r": 297.34726, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "_", "bbox": {"l": 307.37738, "t": 311.75864, "r": 310.69193, "b": 317.44928, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "Own Rows", "bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "None", "bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "None", "bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER", "bbox": {"l": 263.18353, "t": 343.04031, "r": 373.63156, "b": 348.73096, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "CUSTOMER_EMAIL", "bbox": {"l": 263.18353, "t": 351.0271599999999, "r": 314.60614, "b": 356.7178, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CUSTOMER LOGIN ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.6488, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "No Rows", "bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 263.18381, "t": 359.0139199999999, "r": 323.63718, "b": 364.70456, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CUSTOMER_SECURITY_QUESTION", "bbox": {"l": 263.18381, "t": 367.00064, "r": 355.06308, "b": 372.69128, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER", "bbox": {"l": 263.18381, "t": 374.98749, "r": 382.36545, "b": 380.67813, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "CUSTOMER_TAX_ID", "bbox": {"l": 263.18381, "t": 382.97433, "r": 316.47134, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "ACCOUNT_NUMBER", "bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "PUBLIC", "bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "fcel", "nl"], "num_rows": 7, "num_cols": 4, "table_cells": [{"bbox": {"l": 287.80969, "t": 111.80242999999996, "r": 355.42447, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMERS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 428.2442, "t": 111.80242999999996, "r": 488.26617000000005, "b": 123.18358999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNTS", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 150.03751, "t": 173.64770999999996, "r": 193.05225, "b": 183.12256000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SECURITY", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 175.52368, "r": 248.92102000000003, "b": 184.06952, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 156.68151999999998, "r": 382.36545, "b": 202.30615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 176.64855999999997, "r": 482.86053, "b": 182.33916999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 174.7966, "t": 226.89313000000004, "r": 193.04816, "b": 236.36798, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DBE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 227.43799, "r": 248.37787, "b": 235.98383, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 208.59569999999997, "r": 382.36545, "b": 254.22040000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81161, "t": 228.56273999999996, "r": 482.9232799999999, "b": 234.25336000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT NUMBER ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.3871, "t": 261.00342, "r": 193.08365, "b": 270.47826999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ADMIN", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 263.04578000000004, "r": 248.45371999999998, "b": 271.59160999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 264.17065, "r": 330.12256, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 264.17065, "r": 462.67548, "b": 269.86127, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 161.4852, "t": 293.44980000000004, "r": 193.04367, "b": 302.92464999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "TELLER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 213.1331, "t": 294.66019, "r": 248.45371999999998, "b": 303.20605, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "All Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18381, "t": 279.81146, "r": 382.36545, "b": 317.44946, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_EMAIL CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER TAX ID _ _", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.07916000000006, "t": 295.7851299999999, "r": 462.67110999999994, "b": 301.47577, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 141.6514, "t": 324.798, "r": 193.06383, "b": 334.27286, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CUSTOMER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 208.8403, "t": 326.27468999999996, "r": 252.72676, "b": 334.82055999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Own Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 315.53061, "t": 327.39941, "r": 330.12256, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 448.08353, "t": 327.39941, "r": 462.67548, "b": 333.09006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "None", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 263.18353, "t": 343.04031, "r": 382.36545, "b": 388.66497999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER CUSTOMER_EMAIL CUSTOMER LOGIN ID CUSTOMER_LOGIN_ID CUSTOMER_SECURITY_QUESTION CUSTOMER_SECURITY_QUESTION_ANSWER CUSTOMER_TAX_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 212.634, "t": 361.88251, "r": 248.92102000000003, "b": 370.42838, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "No Rows", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 427.81256, "t": 363.00723000000005, "r": 482.86053, "b": 368.69788, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "ACCOUNT_NUMBER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 160.8197, "t": 360.00649999999996, "r": 193.05859, "b": 369.48135, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PUBLIC", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 56, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2675018310547, "t": 754.7578125, "r": 523.59357, "b": 763.9957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9552486538887024, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 56, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.689697265625, "t": 754.2295532226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9034480452537537, "cells": [{"id": 1, "text": "41", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "41"}]}}, {"page_no": 57, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.21815490722656, "t": 754.3350219726562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143346548080444, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31220245361328, "t": 754.725341796875, "r": 334.42142, "b": 763.9521484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546207785606384, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.2745590209961, "t": 70.01868438720703, "r": 283.63077, "b": 86.2046127319336, "coord_origin": "TOPLEFT"}, "confidence": 0.9637309312820435, "cells": [{"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.4054412841797, "t": 102.70518493652344, "r": 514.24524, "b": 112.8113784790039, "coord_origin": "TOPLEFT"}, "confidence": 0.9328395128250122, "cells": [{"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.15525817871094, "t": 304.1411437988281, "r": 327.0066223144531, "b": 313.5270690917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9527500867843628, "cells": [{"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9271240234375, "t": 330.0567321777344, "r": 309.19659, "b": 340.14447021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9125084280967712, "cells": [{"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.67567443847656, "t": 346.7349853515625, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9496878385543823, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.61679077148438, "t": 358.9612731933594, "r": 490.73876953125, "b": 369.148193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950393795967102, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.76889038085938, "t": 370.83758544921875, "r": 376.5744934082031, "b": 381.0343933105469, "coord_origin": "TOPLEFT"}, "confidence": 0.941796600818634, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6211395263672, "t": 382.32257080078125, "r": 384.36783, "b": 393.1546630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414183497428894, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.83248901367188, "t": 394.7557373046875, "r": 320.7999572753906, "b": 405.1979675292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9373244643211365, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.7002716064453, "t": 406.6421813964844, "r": 312.3022155761719, "b": 417.1481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.933269202709198, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 418.73663330078125, "r": 387.66956, "b": 429.0638732910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9468620419502258, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.75306701660156, "t": 430.962890625, "r": 334.12161, "b": 440.8876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9373239874839783, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.65428161621094, "t": 442.6007995605469, "r": 271.91437, "b": 453.1351013183594, "coord_origin": "TOPLEFT"}, "confidence": 0.9312872290611267, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.8694305419922, "t": 454.0513000488281, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}, "confidence": 0.9388870000839233, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.73135375976562, "t": 466.73114013671875, "r": 343.2095031738281, "b": 476.8760070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9516265392303467, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "section_header", "bbox": {"l": 64.17279052734375, "t": 496.611083984375, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}, "confidence": 0.9660991430282593, "cells": [{"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 135.51849365234375, "t": 522.7078857421875, "r": 541.10931, "b": 556.88121, "coord_origin": "TOPLEFT"}, "confidence": 0.9787154197692871, "cells": [{"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "caption", "bbox": {"l": 136.22021484375, "t": 631.5818481445312, "r": 361.25982666015625, "b": 640.684326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.950111448764801, "cells": [{"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 142.3465576171875, "t": 667.8150024414062, "r": 525.7511, "b": 702.261337, "coord_origin": "TOPLEFT"}, "confidence": 0.9773550629615784, "cells": [{"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "picture", "bbox": {"l": 136.12950134277344, "t": 127.06898498535156, "r": 451.212158203125, "b": 301.4627380371094, "coord_origin": "TOPLEFT"}, "confidence": 0.986349880695343, "cells": []}, {"id": 22, "label": "picture", "bbox": {"l": 135.7327880859375, "t": 570.8567504882812, "r": 415.3825988769531, "b": 628.9186401367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9538632035255432, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 57, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.21815490722656, "t": 754.3350219726562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143346548080444, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "42"}, {"label": "page_footer", "id": 1, "page_no": 57, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31220245361328, "t": 754.725341796875, "r": 334.42142, "b": 763.9521484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546207785606384, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 57, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.2745590209961, "t": 70.01868438720703, "r": 283.63077, "b": 86.2046127319336, "coord_origin": "TOPLEFT"}, "confidence": 0.9637309312820435, "cells": [{"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "4.3 Implementation of RCAC"}, {"label": "text", "id": 3, "page_no": 57, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.4054412841797, "t": 102.70518493652344, "r": 514.24524, "b": 112.8113784790039, "coord_origin": "TOPLEFT"}, "confidence": 0.9328395128250122, "cells": [{"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example."}, {"label": "caption", "id": 4, "page_no": 57, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.15525817871094, "t": 304.1411437988281, "r": 327.0066223144531, "b": 313.5270690917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9527500867843628, "cells": [{"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 Data model of the banking scenario"}, {"label": "text", "id": 5, "page_no": 57, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9271240234375, "t": 330.0567321777344, "r": 309.19659, "b": 340.14447021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9125084280967712, "cells": [{"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the following steps:"}, {"label": "list_item", "id": 6, "page_no": 57, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.67567443847656, "t": 346.7349853515625, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9496878385543823, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing the tables that are used in this example"}, {"label": "list_item", "id": 7, "page_no": 57, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.61679077148438, "t": 358.9612731933594, "r": 490.73876953125, "b": 369.148193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950393795967102, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "list_item", "id": 8, "page_no": 57, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.76889038085938, "t": 370.83758544921875, "r": 376.5744934082031, "b": 381.0343933105469, "coord_origin": "TOPLEFT"}, "confidence": 0.941796600818634, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating group profiles for the users and their roles"}, {"label": "list_item", "id": 9, "page_no": 57, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6211395263672, "t": 382.32257080078125, "r": 384.36783, "b": 393.1546630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414183497428894, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 10, "page_no": 57, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.83248901367188, "t": 394.7557373046875, "r": 320.7999572753906, "b": 405.1979675292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9373244643211365, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating row permissions"}, {"label": "list_item", "id": 11, "page_no": 57, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.7002716064453, "t": 406.6421813964844, "r": 312.3022155761719, "b": 417.1481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.933269202709198, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating column masks"}, {"label": "list_item", "id": 12, "page_no": 57, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 418.73663330078125, "r": 387.66956, "b": 429.0638732910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9468620419502258, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Restricting the inserting and updating of masked data"}, {"label": "list_item", "id": 13, "page_no": 57, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.75306701660156, "t": 430.962890625, "r": 334.12161, "b": 440.8876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9373239874839783, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Activating row and column access control"}, {"label": "list_item", "id": 14, "page_no": 57, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.65428161621094, "t": 442.6007995605469, "r": 271.91437, "b": 453.1351013183594, "coord_origin": "TOPLEFT"}, "confidence": 0.9312872290611267, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing row permissions"}, {"label": "list_item", "id": 15, "page_no": 57, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8694305419922, "t": 454.0513000488281, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}, "confidence": 0.9388870000839233, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Demonstrating data access with RCAC"}, {"label": "list_item", "id": 16, "page_no": 57, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.73135375976562, "t": 466.73114013671875, "r": 343.2095031738281, "b": 476.8760070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9516265392303467, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query implementation with RCAC activated"}, {"label": "section_header", "id": 17, "page_no": 57, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.17279052734375, "t": 496.611083984375, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}, "confidence": 0.9660991430282593, "cells": [{"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.1 Reviewing the tables that are used in this example"}, {"label": "text", "id": 18, "page_no": 57, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.51849365234375, "t": 522.7078857421875, "r": 541.10931, "b": 556.88121, "coord_origin": "TOPLEFT"}, "confidence": 0.9787154197692871, "cells": [{"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}]}, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers."}, {"label": "caption", "id": 19, "page_no": 57, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.22021484375, "t": 631.5818481445312, "r": 361.25982666015625, "b": 640.684326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.950111448764801, "cells": [{"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-5 Tables that are used in the banking example"}, {"label": "text", "id": 20, "page_no": 57, "cluster": {"id": 20, "label": "text", "bbox": {"l": 142.3465576171875, "t": 667.8150024414062, "r": 525.7511, "b": 702.261337, "coord_origin": "TOPLEFT"}, "confidence": 0.9773550629615784, "cells": [{"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "picture", "id": 21, "page_no": 57, "cluster": {"id": 21, "label": "picture", "bbox": {"l": 136.12950134277344, "t": 127.06898498535156, "r": 451.212158203125, "b": 301.4627380371094, "coord_origin": "TOPLEFT"}, "confidence": 0.986349880695343, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 22, "page_no": 57, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 135.7327880859375, "t": 570.8567504882812, "r": 415.3825988769531, "b": 628.9186401367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9538632035255432, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 57, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.2745590209961, "t": 70.01868438720703, "r": 283.63077, "b": 86.2046127319336, "coord_origin": "TOPLEFT"}, "confidence": 0.9637309312820435, "cells": [{"id": 2, "text": "4.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.421951, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementation of RCAC", "bbox": {"l": 91.946342, "t": 71.22069999999997, "r": 283.63077, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "4.3 Implementation of RCAC"}, {"label": "text", "id": 3, "page_no": 57, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.4054412841797, "t": 102.70518493652344, "r": 514.24524, "b": 112.8113784790039, "coord_origin": "TOPLEFT"}, "confidence": 0.9328395128250122, "cells": [{"id": 4, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example.", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 514.24524, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 shows the data model of the banking scenario that is used in this example."}, {"label": "caption", "id": 4, "page_no": 57, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.15525817871094, "t": 304.1411437988281, "r": 327.0066223144531, "b": 313.5270690917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9527500867843628, "cells": [{"id": 5, "text": "Figure 4-4 Data model of the banking scenario", "bbox": {"l": 136.8, "t": 304.698, "r": 326.74951, "b": 313.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-4 Data model of the banking scenario"}, {"label": "text", "id": 5, "page_no": 57, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9271240234375, "t": 330.0567321777344, "r": 309.19659, "b": 340.14447021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9125084280967712, "cells": [{"id": 6, "text": "This section covers the following steps:", "bbox": {"l": 136.8, "t": 330.64871, "r": 309.19659, "b": 339.86169, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the following steps:"}, {"label": "list_item", "id": 6, "page_no": 57, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.67567443847656, "t": 346.7349853515625, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9496878385543823, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 347.77789, "r": 141.78, "b": 356.55267, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 151.20016, "t": 347.62851, "r": 372.99231, "b": 356.84148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing the tables that are used in this example"}, {"label": "list_item", "id": 7, "page_no": 57, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.61679077148438, "t": 358.9612731933594, "r": 490.73876953125, "b": 369.148193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950393795967102, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 359.77771, "r": 141.78, "b": 368.5524899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers group", "bbox": {"l": 151.20016, "t": 359.62833, "r": 490.64977999999996, "b": 368.8413100000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "list_item", "id": 8, "page_no": 57, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.76889038085938, "t": 370.83758544921875, "r": 376.5744934082031, "b": 381.0343933105469, "coord_origin": "TOPLEFT"}, "confidence": 0.941796600818634, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 371.77753000000007, "r": 141.78, "b": 380.55231000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 151.20016, "t": 371.62814, "r": 376.40479, "b": 380.84113, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating group profiles for the users and their roles"}, {"label": "list_item", "id": 9, "page_no": 57, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6211395263672, "t": 382.32257080078125, "r": 384.36783, "b": 393.1546630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414183497428894, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 383.77734, "r": 141.78, "b": 392.55212, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Creating the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 151.20016, "t": 383.62796, "r": 384.36783, "b": 392.84093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 10, "page_no": 57, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.83248901367188, "t": 394.7557373046875, "r": 320.7999572753906, "b": 405.1979675292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9373244643211365, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 395.7771599999999, "r": 141.78, "b": 404.55194, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Defining and creating row permissions", "bbox": {"l": 151.20016, "t": 395.62778, "r": 320.76019, "b": 404.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating row permissions"}, {"label": "list_item", "id": 11, "page_no": 57, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.7002716064453, "t": 406.6421813964844, "r": 312.3022155761719, "b": 417.1481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.933269202709198, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 407.77698000000004, "r": 141.78, "b": 416.55176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Defining and creating column masks", "bbox": {"l": 151.20016, "t": 407.62759, "r": 312.2962, "b": 416.84058, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Defining and creating column masks"}, {"label": "list_item", "id": 12, "page_no": 57, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64413452148438, "t": 418.73663330078125, "r": 387.66956, "b": 429.0638732910156, "coord_origin": "TOPLEFT"}, "confidence": 0.9468620419502258, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 419.77679, "r": 141.78, "b": 428.55157, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 151.20016, "t": 419.62741, "r": 387.66956, "b": 428.84039, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Restricting the inserting and updating of masked data"}, {"label": "list_item", "id": 13, "page_no": 57, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.75306701660156, "t": 430.962890625, "r": 334.12161, "b": 440.8876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9373239874839783, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 431.77661, "r": 141.78, "b": 440.55139, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Activating row and column access control", "bbox": {"l": 151.20016, "t": 431.62723, "r": 334.12161, "b": 440.84021, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Activating row and column access control"}, {"label": "list_item", "id": 14, "page_no": 57, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.65428161621094, "t": 442.6007995605469, "r": 271.91437, "b": 453.1351013183594, "coord_origin": "TOPLEFT"}, "confidence": 0.9312872290611267, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 443.77643, "r": 141.78, "b": 452.55121, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Reviewing row permissions", "bbox": {"l": 151.20016, "t": 443.6270400000001, "r": 271.91437, "b": 452.84003000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reviewing row permissions"}, {"label": "list_item", "id": 15, "page_no": 57, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8694305419922, "t": 454.0513000488281, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}, "confidence": 0.9388870000839233, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 455.77624999999995, "r": 141.78, "b": 464.55103, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Demonstrating data access with RCAC", "bbox": {"l": 151.20016, "t": 455.62686, "r": 323.46332, "b": 464.83984, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Demonstrating data access with RCAC"}, {"label": "list_item", "id": 16, "page_no": 57, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.73135375976562, "t": 466.73114013671875, "r": 343.2095031738281, "b": 476.8760070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.9516265392303467, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 467.77606, "r": 141.78, "b": 476.55084, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Query implementation with RCAC activated", "bbox": {"l": 151.20016, "t": 467.62668, "r": 343.13235, "b": 476.83966, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query implementation with RCAC activated"}, {"label": "section_header", "id": 17, "page_no": 57, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.17279052734375, "t": 496.611083984375, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}, "confidence": 0.9660991430282593, "cells": [{"id": 29, "text": "4.3.1", "bbox": {"l": 64.800003, "t": 497.51462, "r": 93.916855, "b": 509.50259, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Reviewing the tables that are used in this example", "bbox": {"l": 97.556473, "t": 497.51462, "r": 410.41861, "b": 509.50259, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.1 Reviewing the tables that are used in this example"}, {"label": "text", "id": 18, "page_no": 57, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.51849365234375, "t": 522.7078857421875, "r": 541.10931, "b": 556.88121, "coord_origin": "TOPLEFT"}, "confidence": 0.9787154197692871, "cells": [{"id": 31, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there ", "bbox": {"l": 136.8, "t": 523.66861, "r": 541.10931, "b": 532.88159, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and ", "bbox": {"l": 136.8, "t": 535.6684, "r": 540.25769, "b": 544.88141, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TRANSACTIONS. There are 90 customers.", "bbox": {"l": 136.80002, "t": 547.66821, "r": 328.83478, "b": 556.88121, "coord_origin": "TOPLEFT"}}]}, "text": "This section reviews the tables that are used in this example. As shown in Figure 4-5, there are three main tables that are involved in the data model: CUSTOMERS, ACCOUNTS, and TRANSACTIONS. There are 90 customers."}, {"label": "caption", "id": 19, "page_no": 57, "cluster": {"id": 19, "label": "caption", "bbox": {"l": 136.22021484375, "t": 631.5818481445312, "r": 361.25982666015625, "b": 640.684326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.950111448764801, "cells": [{"id": 34, "text": "Figure 4-5 Tables that are used in the banking example", "bbox": {"l": 136.8, "t": 632.058, "r": 360.5787, "b": 640.38301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-5 Tables that are used in the banking example"}, {"label": "text", "id": 20, "page_no": 57, "cluster": {"id": 20, "label": "text", "bbox": {"l": 142.3465576171875, "t": 667.8150024414062, "r": 525.7511, "b": 702.261337, "coord_origin": "TOPLEFT"}, "confidence": 0.9773550629615784, "cells": [{"id": 35, "text": "Note:", "bbox": {"l": 142.8, "t": 669.04871, "r": 168.33246, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": " Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 ", "bbox": {"l": 168.36035, "t": 669.04871, "r": 525.7511, "b": 678.26172, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "provides a script that you can use to create all the database definitions or DDLs to ", "bbox": {"l": 142.8, "t": 681.04852, "r": 507.59195, "b": 690.26153, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "re-create this RCAC example.", "bbox": {"l": 142.8, "t": 693.048332, "r": 274.7132, "b": 702.261337, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Appendix A, \u201cDatabase definitions for the RCAC banking example\u201d on page 121 provides a script that you can use to create all the database definitions or DDLs to re-create this RCAC example."}, {"label": "picture", "id": 21, "page_no": 57, "cluster": {"id": 21, "label": "picture", "bbox": {"l": 136.12950134277344, "t": 127.06898498535156, "r": 451.212158203125, "b": 301.4627380371094, "coord_origin": "TOPLEFT"}, "confidence": 0.986349880695343, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 22, "page_no": 57, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 135.7327880859375, "t": 570.8567504882812, "r": 415.3825988769531, "b": 628.9186401367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9538632035255432, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 57, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.21815490722656, "t": 754.3350219726562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143346548080444, "cells": [{"id": 0, "text": "42 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "42"}, {"label": "page_footer", "id": 1, "page_no": 57, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31220245361328, "t": 754.725341796875, "r": 334.42142, "b": 763.9521484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9546207785606384, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 58, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.2801971435547, "t": 754.7266845703125, "r": 523.59357, "b": 764.0281372070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9543154239654541, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.720947265625, "t": 754.1746215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9061288833618164, "cells": [{"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.93377685546875, "t": 70.66082763671875, "r": 525.07031, "b": 93.04185485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9635977745056152, "cells": [{"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.77842712402344, "t": 97.63013000000001, "r": 543.23035, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9705125689506531, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.044677734375, "t": 128.51512145996094, "r": 546.83588, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9810754060745239, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.25962829589844, "t": 364.7186584472656, "r": 303.7537536621094, "b": 373.983, "coord_origin": "TOPLEFT"}, "confidence": 0.9458591341972351, "cells": [{"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.99163818359375, "t": 390.5973205566406, "r": 517.36163, "b": 413.2025146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9586500525474548, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.40914916992188, "t": 612.3688354492188, "r": 293.8601989746094, "b": 622.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436265826225281, "cells": [{"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.87620544433594, "t": 177.42987060546875, "r": 417.8246765136719, "b": 361.81787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9830227494239807, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 58, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2801971435547, "t": 754.7266845703125, "r": 523.59357, "b": 764.0281372070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9543154239654541, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 58, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.720947265625, "t": 754.1746215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9061288833618164, "cells": [{"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "43"}, {"label": "text", "id": 2, "page_no": 58, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.93377685546875, "t": 70.66082763671875, "r": 525.07031, "b": 93.04185485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9635977745056152, "cells": [{"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To review the attributes of each table that is used in this banking example, complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 58, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.77842712402344, "t": 97.63013000000001, "r": 543.23035, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9705125689506531, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Review the columns of each the tables through System i Navigator. Expand Database \uf0ae named Database \uf0ae Schemas \uf0ae BANK_SCHEMA \uf0ae Tables ."}, {"label": "list_item", "id": 4, "page_no": 58, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.044677734375, "t": 128.51512145996094, "r": 546.83588, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9810754060745239, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented."}, {"label": "caption", "id": 5, "page_no": 58, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.25962829589844, "t": 364.7186584472656, "r": 303.7537536621094, "b": 373.983, "coord_origin": "TOPLEFT"}, "confidence": 0.9458591341972351, "cells": [{"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-6 CUSTOMERS table attributes"}, {"label": "list_item", "id": 6, "page_no": 58, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.99163818359375, "t": 390.5973205566406, "r": 517.36163, "b": 413.2025146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9586500525474548, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7."}, {"label": "caption", "id": 7, "page_no": 58, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.40914916992188, "t": 612.3688354492188, "r": 293.8601989746094, "b": 622.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436265826225281, "cells": [{"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-7 Column definitions of the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 58, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87620544433594, "t": 177.42987060546875, "r": 417.8246765136719, "b": 361.81787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9830227494239807, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 58, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.93377685546875, "t": 70.66082763671875, "r": 525.07031, "b": 93.04185485839844, "coord_origin": "TOPLEFT"}, "confidence": 0.9635977745056152, "cells": [{"id": 2, "text": "To review the attributes of each table that is used in this banking example, complete the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 525.07031, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "following steps:", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 204.65807, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To review the attributes of each table that is used in this banking example, complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 58, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.77842712402344, "t": 97.63013000000001, "r": 543.23035, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9705125689506531, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.79959, "t": 100.48865, "r": 145.18024, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Review the columns of each the tables through System i Navigator. Expand ", "bbox": {"l": 147.97379, "t": 100.48865, "r": 486.43526999999995, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 486.41952999999995, "t": 100.48865, "r": 530.89691, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "\uf0ae", "bbox": {"l": 533.39984, "t": 97.63013000000001, "r": 543.23035, "b": 109.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "named Database", "bbox": {"l": 151.19977, "t": 112.48845999999992, "r": 230.63674999999998, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\uf0ae", "bbox": {"l": 233.09984999999998, "t": 109.62994000000003, "r": 242.93037, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " Schemas", "bbox": {"l": 243.00008999999997, "t": 112.48845999999992, "r": 289.5123, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "\uf0ae", "bbox": {"l": 292.07999, "t": 109.62994000000003, "r": 301.91049, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " BANK_SCHEMA", "bbox": {"l": 301.92047, "t": 112.48845999999992, "r": 382.03775, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 384.60043, "t": 109.62994000000003, "r": 394.43094, "b": 121.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " Tables", "bbox": {"l": 394.50067, "t": 112.48845999999992, "r": 427.25119, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 427.86069, "t": 112.48845999999992, "r": 430.62958, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Review the columns of each the tables through System i Navigator. Expand Database \uf0ae named Database \uf0ae Schemas \uf0ae BANK_SCHEMA \uf0ae Tables ."}, {"label": "list_item", "id": 4, "page_no": 58, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.044677734375, "t": 128.51512145996094, "r": 546.83588, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9810754060745239, "cells": [{"id": 16, "text": "2.", "bbox": {"l": 136.8006, "t": 129.52801999999997, "r": 145.23108, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Right-click the CUSTOMERS table and select ", "bbox": {"l": 148.04124, "t": 129.52801999999997, "r": 355.32602, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Definition", "bbox": {"l": 355.32101, "t": 129.52801999999997, "r": 401.47073, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". Figure 4-6 shows the attributes ", "bbox": {"l": 401.46072, "t": 129.52801999999997, "r": 546.83588, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "for the CUSTOMERS table. The Row access control and Column access control options ", "bbox": {"l": 151.20079, "t": 141.52783, "r": 542.72644, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "are not selected, which indicates that the table does not have RCAC implemented.", "bbox": {"l": 151.20081, "t": 153.52765, "r": 514.64014, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "2. Right-click the CUSTOMERS table and select Definition . Figure 4-6 shows the attributes for the CUSTOMERS table. The Row access control and Column access control options are not selected, which indicates that the table does not have RCAC implemented."}, {"label": "caption", "id": 5, "page_no": 58, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.25962829589844, "t": 364.7186584472656, "r": 303.7537536621094, "b": 373.983, "coord_origin": "TOPLEFT"}, "confidence": 0.9458591341972351, "cells": [{"id": 22, "text": "Figure 4-6 CUSTOMERS table attributes", "bbox": {"l": 136.8, "t": 365.65799, "r": 303.49619, "b": 373.983, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-6 CUSTOMERS table attributes"}, {"label": "list_item", "id": 6, "page_no": 58, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.99163818359375, "t": 390.5973205566406, "r": 517.36163, "b": 413.2025146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9586500525474548, "cells": [{"id": 23, "text": "3.", "bbox": {"l": 136.8, "t": 391.60873, "r": 145.62772, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Click the ", "bbox": {"l": 148.57028, "t": 391.60873, "r": 192.09492, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Columns", "bbox": {"l": 192.11984, "t": 391.60873, "r": 234.88211000000004, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " tab to see the columns of the CUSTOMERS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 391.60873, "r": 517.36163, "b": 400.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Figure 4-7.", "bbox": {"l": 151.20016, "t": 403.60855, "r": 199.55498, "b": 412.82153, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click the Columns tab to see the columns of the CUSTOMERS table, as shown in Figure 4-7."}, {"label": "caption", "id": 7, "page_no": 58, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.40914916992188, "t": 612.3688354492188, "r": 293.8601989746094, "b": 622.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9436265826225281, "cells": [{"id": 28, "text": "Figure 4-7 Column definitions of the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 613.63789, "r": 293.4675, "b": 621.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-7 Column definitions of the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 58, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87620544433594, "t": 177.42987060546875, "r": 417.8246765136719, "b": 361.81787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9830227494239807, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 58, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2801971435547, "t": 754.7266845703125, "r": 523.59357, "b": 764.0281372070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9543154239654541, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 58, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.720947265625, "t": 754.1746215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9061288833618164, "cells": [{"id": 1, "text": "43", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "43"}]}}, {"page_no": 59, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.17613220214844, "t": 754.111572265625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975403904914856, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.36976623535156, "t": 754.63330078125, "r": 334.42142, "b": 764.0048217773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9470958709716797, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.88308715820312, "t": 70.43685150146484, "r": 538.20105, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9693993330001831, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.06980895996094, "t": 308.5224304199219, "r": 396.0132141113281, "b": 317.984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484499096870422, "cells": [{"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2538299560547, "t": 334.63983154296875, "r": 542.19183, "b": 357.26708984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9527929425239563, "cells": [{"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.27098083496094, "t": 563.2742919921875, "r": 297.00921630859375, "b": 572.619384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486443996429443, "cells": [{"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 134.96737670898438, "t": 370.881591796875, "r": 457.1007080078125, "b": 560.7245483398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9808177947998047, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 135.36148071289062, "t": 131.26109313964844, "r": 533.2239379882812, "b": 305.0644836425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9682222604751587, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 59, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17613220214844, "t": 754.111572265625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975403904914856, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "44"}, {"label": "page_footer", "id": 1, "page_no": 59, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36976623535156, "t": 754.63330078125, "r": 334.42142, "b": 764.0048217773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9470958709716797, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 59, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.88308715820312, "t": 70.43685150146484, "r": 538.20105, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9693993330001831, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 59, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06980895996094, "t": 308.5224304199219, "r": 396.0132141113281, "b": 317.984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484499096870422, "cells": [{"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 59, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2538299560547, "t": 334.63983154296875, "r": 542.19183, "b": 357.26708984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9527929425239563, "cells": [{"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}]}, "text": "5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet."}, {"label": "caption", "id": 5, "page_no": 59, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.27098083496094, "t": 563.2742919921875, "r": 297.00921630859375, "b": 572.619384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486443996429443, "cells": [{"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-9 ACCOUNTS table attributes"}, {"label": "picture", "id": 6, "page_no": 59, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 134.96737670898438, "t": 370.881591796875, "r": 457.1007080078125, "b": 560.7245483398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9808177947998047, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 59, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.36148071289062, "t": 131.26109313964844, "r": 533.2239379882812, "b": 305.0644836425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9682222604751587, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 59, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.88308715820312, "t": 70.43685150146484, "r": 538.20105, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9693993330001831, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.62772, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.57028, "t": 71.50867000000005, "r": 192.09492, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 71.50867000000005, "r": 268.44635, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 268.26007, "t": 71.50867000000005, "r": 273.89941, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 71.50867000000005, "r": 389.64954, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ", and ", "bbox": {"l": 389.45932, "t": 71.50867000000005, "r": 414.47784, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 71.50867000000005, "r": 505.37079, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 71.50867000000005, "r": 538.20105, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "review the key, foreign, and check constraints on the CUSTOMERS table, as shown in ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 532.73871, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 497.69751, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CUSTOMERS table.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 241.55133, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the CUSTOMERS table, as shown in Figure 4-8. There are no Foreign Key Constraints or Check Constraints on the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 59, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06980895996094, "t": 308.5224304199219, "r": 396.0132141113281, "b": 317.984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484499096870422, "cells": [{"id": 13, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 309.49799, "r": 395.883, "b": 317.823, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-8 Reviewing the constraints on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 59, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2538299560547, "t": 334.63983154296875, "r": 542.19183, "b": 357.26708984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9527929425239563, "cells": [{"id": 14, "text": "5.", "bbox": {"l": 136.8, "t": 335.44873, "r": 145.16769, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is ", "bbox": {"l": 147.95692, "t": 335.44873, "r": 542.19183, "b": 344.66171, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "shown in Figure 4-9. RCAC has not been defined for this table yet.", "bbox": {"l": 151.20016, "t": 347.44855, "r": 443.98938000000004, "b": 356.66153, "coord_origin": "TOPLEFT"}}]}, "text": "5. Review the definition of the ACCOUNTS table. The definition of the ACCOUNTS table is shown in Figure 4-9. RCAC has not been defined for this table yet."}, {"label": "caption", "id": 5, "page_no": 59, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.27098083496094, "t": 563.2742919921875, "r": 297.00921630859375, "b": 572.619384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9486443996429443, "cells": [{"id": 17, "text": "Figure 4-9 ACCOUNTS table attributes", "bbox": {"l": 136.8, "t": 563.8979899999999, "r": 296.60315, "b": 572.2230099999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-9 ACCOUNTS table attributes"}, {"label": "picture", "id": 6, "page_no": 59, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 134.96737670898438, "t": 370.881591796875, "r": 457.1007080078125, "b": 560.7245483398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9808177947998047, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 59, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 135.36148071289062, "t": 131.26109313964844, "r": 533.2239379882812, "b": 305.0644836425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9682222604751587, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 59, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17613220214844, "t": 754.111572265625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975403904914856, "cells": [{"id": 0, "text": "44 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "44"}, {"label": "page_footer", "id": 1, "page_no": 59, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.36976623535156, "t": 754.63330078125, "r": 334.42142, "b": 764.0048217773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9470958709716797, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 60, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.28741455078125, "t": 754.7380981445312, "r": 523.59357, "b": 764.0592041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521146416664124, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7454833984375, "t": 754.0681762695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975669741630554, "cells": [{"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.9091033935547, "t": 70.44548034667969, "r": 509.63537999999994, "b": 93.29779815673828, "coord_origin": "TOPLEFT"}, "confidence": 0.9061452746391296, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17601013183594, "t": 237.03350830078125, "r": 291.64111328125, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9145481586456299, "cells": [{"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2264404296875, "t": 263.83184814453125, "r": 538.20105, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9501693248748779, "cells": [{"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.48716735839844, "t": 487.4658203125, "r": 322.23956298828125, "b": 496.8700866699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9331468939781189, "cells": [{"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.629615783691406, "t": 323.9850769042969, "r": 546.4091796875, "b": 483.8927001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9249711632728577, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 60, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.28741455078125, "t": 754.7380981445312, "r": 523.59357, "b": 764.0592041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521146416664124, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 60, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7454833984375, "t": 754.0681762695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975669741630554, "cells": [{"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "45"}, {"label": "list_item", "id": 2, "page_no": 60, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9091033935547, "t": 70.44548034667969, "r": 509.63537999999994, "b": 93.29779815673828, "coord_origin": "TOPLEFT"}, "confidence": 0.9061452746391296, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10."}, {"label": "caption", "id": 3, "page_no": 60, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17601013183594, "t": 237.03350830078125, "r": 291.64111328125, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9145481586456299, "cells": [{"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-10 Column definitions of the ACCOUNTS table"}, {"label": "list_item", "id": 4, "page_no": 60, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2264404296875, "t": 263.83184814453125, "r": 538.20105, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9501693248748779, "cells": [{"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}]}, "text": "7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table."}, {"label": "caption", "id": 5, "page_no": 60, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.48716735839844, "t": 487.4658203125, "r": 322.23956298828125, "b": 496.8700866699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9331468939781189, "cells": [{"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table"}, {"label": "picture", "id": 6, "page_no": 60, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.629615783691406, "t": 323.9850769042969, "r": 546.4091796875, "b": 483.8927001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9249711632728577, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 60, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9091033935547, "t": 70.44548034667969, "r": 509.63537999999994, "b": 93.29779815673828, "coord_origin": "TOPLEFT"}, "confidence": 0.9061452746391296, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.6273, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Click the ", "bbox": {"l": 148.56987, "t": 71.50903000000005, "r": 192.0945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Columns", "bbox": {"l": 192.11943, "t": 71.50903000000005, "r": 234.88168, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " tab to see the columns of the ACCOUNTS table, as shown in ", "bbox": {"l": 234.83986, "t": 71.50903000000005, "r": 509.63537999999994, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-10.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 205.13313, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Click the Columns tab to see the columns of the ACCOUNTS table, as shown in Figure 4-10."}, {"label": "caption", "id": 3, "page_no": 60, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17601013183594, "t": 237.03350830078125, "r": 291.64111328125, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9145481586456299, "cells": [{"id": 7, "text": "Figure 4-10 Column definitions of the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 238.51801, "r": 291.57025, "b": 246.84295999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-10 Column definitions of the ACCOUNTS table"}, {"label": "list_item", "id": 4, "page_no": 60, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2264404296875, "t": 263.83184814453125, "r": 538.20105, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9501693248748779, "cells": [{"id": 8, "text": "7.", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 145.62772, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Click the ", "bbox": {"l": 148.57028, "t": 264.52855999999997, "r": 192.09492, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 264.52855999999997, "r": 268.44635, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", ", "bbox": {"l": 268.26007, "t": 264.52855999999997, "r": 273.89941, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 264.52855999999997, "r": 389.64954, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and ", "bbox": {"l": 389.45932, "t": 264.52855999999997, "r": 414.47784, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 264.52855999999997, "r": 505.37079, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 264.52855999999997, "r": 538.20105, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "review the key, foreign, and check constraints on the ACCOUNTS table, as shown in ", "bbox": {"l": 151.20016, "t": 276.52837999999997, "r": 525.10461, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ", "bbox": {"l": 151.20016, "t": 288.52823, "r": 518.26709, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNTS table.", "bbox": {"l": 151.20016, "t": 300.52805, "r": 233.81839, "b": 309.7410300000001, "coord_origin": "TOPLEFT"}}]}, "text": "7. Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the ACCOUNTS table, as shown in Figure 4-11. There is one Foreign Key Constraint and no Check Constraints on the ACCOUNTS table."}, {"label": "caption", "id": 5, "page_no": 60, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.48716735839844, "t": 487.4658203125, "r": 322.23956298828125, "b": 496.8700866699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9331468939781189, "cells": [{"id": 19, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 488.17801, "r": 322.01459, "b": 496.50302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-11 Reviewing the constraints on the ACCOUNTS table"}, {"label": "picture", "id": 6, "page_no": 60, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.629615783691406, "t": 323.9850769042969, "r": 546.4091796875, "b": 483.8927001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9249711632728577, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 60, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.28741455078125, "t": 754.7380981445312, "r": 523.59357, "b": 764.0592041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521146416664124, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 60, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7454833984375, "t": 754.0681762695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8975669741630554, "cells": [{"id": 1, "text": "45", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "45"}]}}, {"page_no": 61, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.11357116699219, "t": 754.0479125976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8953660130500793, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.1781997680664, "t": 754.6085205078125, "r": 334.42142, "b": 764.017578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9389416575431824, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.05352783203125, "t": 70.39522552490234, "r": 547.25958, "b": 93.26668548583984, "coord_origin": "TOPLEFT"}, "confidence": 0.9381867051124573, "cells": [{"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.08340454101562, "t": 299.330322265625, "r": 321.95263671875, "b": 308.88140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9399792551994324, "cells": [{"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.10157775878906, "t": 325.2121887207031, "r": 531.82043, "b": 348.0757141113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9077776670455933, "cells": [{"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.23361206054688, "t": 482.2267150878906, "r": 383.62402, "b": 492.1814270019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9186105132102966, "cells": [{"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 508.458251953125, "r": 547.3941, "b": 554.54103, "coord_origin": "TOPLEFT"}, "confidence": 0.7894290685653687, "cells": [{"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.34345245361328, "t": 724.33056640625, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}, "confidence": 0.927774965763092, "cells": [{"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.87826538085938, "t": 107.37496948242188, "r": 451.5091857910156, "b": 296.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9791154861450195, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 63.676544189453125, "t": 568.8480224609375, "r": 546.6666870117188, "b": 722.6273803710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9123829007148743, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 61, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11357116699219, "t": 754.0479125976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8953660130500793, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "46"}, {"label": "page_footer", "id": 1, "page_no": 61, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1781997680664, "t": 754.6085205078125, "r": 334.42142, "b": 764.017578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9389416575431824, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 61, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05352783203125, "t": 70.39522552490234, "r": 547.25958, "b": 93.26668548583984, "coord_origin": "TOPLEFT"}, "confidence": 0.9381867051124573, "cells": [{"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet."}, {"label": "caption", "id": 3, "page_no": 61, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.08340454101562, "t": 299.330322265625, "r": 321.95263671875, "b": 308.88140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9399792551994324, "cells": [{"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-12 TRANSACTIONS table attributes"}, {"label": "list_item", "id": 4, "page_no": 61, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.10157775878906, "t": 325.2121887207031, "r": 531.82043, "b": 348.0757141113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9077776670455933, "cells": [{"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13."}, {"label": "caption", "id": 5, "page_no": 61, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.23361206054688, "t": 482.2267150878906, "r": 383.62402, "b": 492.1814270019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9186105132102966, "cells": [{"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table"}, {"label": "list_item", "id": 6, "page_no": 61, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 508.458251953125, "r": 547.3941, "b": 554.54103, "coord_origin": "TOPLEFT"}, "confidence": 0.7894290685653687, "cells": [{"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}]}, "text": "10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table."}, {"label": "caption", "id": 7, "page_no": 61, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.34345245361328, "t": 724.33056640625, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}, "confidence": 0.927774965763092, "cells": [{"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table"}, {"label": "picture", "id": 8, "page_no": 61, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87826538085938, "t": 107.37496948242188, "r": 451.5091857910156, "b": 296.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9791154861450195, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 61, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.676544189453125, "t": 568.8480224609375, "r": 546.6666870117188, "b": 722.6273803710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9123829007148743, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 61, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.05352783203125, "t": 70.39522552490234, "r": 547.25958, "b": 93.26668548583984, "coord_origin": "TOPLEFT"}, "confidence": 0.9381867051124573, "cells": [{"id": 2, "text": "8.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.06769, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS ", "bbox": {"l": 147.82356, "t": 71.50867000000005, "r": 547.25958, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "table is shown in Figure 4-12. RCAC is not defined for this table yet.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 449.76917, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "8. Review the definition of the TRANSACTIONS table. The definition of the TRANSACTIONS table is shown in Figure 4-12. RCAC is not defined for this table yet."}, {"label": "caption", "id": 3, "page_no": 61, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.08340454101562, "t": 299.330322265625, "r": 321.95263671875, "b": 308.88140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9399792551994324, "cells": [{"id": 5, "text": "Figure 4-12 TRANSACTIONS table attributes", "bbox": {"l": 136.8, "t": 299.95801, "r": 321.56638, "b": 308.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-12 TRANSACTIONS table attributes"}, {"label": "list_item", "id": 4, "page_no": 61, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.10157775878906, "t": 325.2121887207031, "r": 531.82043, "b": 348.0757141113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9077776670455933, "cells": [{"id": 6, "text": "9.", "bbox": {"l": 136.8, "t": 325.90872, "r": 145.62772, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Click the ", "bbox": {"l": 148.57028, "t": 325.90872, "r": 192.09492, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Columns", "bbox": {"l": 192.11984, "t": 325.90872, "r": 234.88211000000004, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " tab to see the columns of the TRANSACTIONS table, as shown in ", "bbox": {"l": 234.84026999999998, "t": 325.90872, "r": 531.82043, "b": 335.1217, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-13.", "bbox": {"l": 151.20016, "t": 337.90854, "r": 205.13353, "b": 347.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "9. Click the Columns tab to see the columns of the TRANSACTIONS table, as shown in Figure 4-13."}, {"label": "caption", "id": 5, "page_no": 61, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.23361206054688, "t": 482.2267150878906, "r": 383.62402, "b": 492.1814270019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9186105132102966, "cells": [{"id": 11, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table", "bbox": {"l": 136.8, "t": 483.31799, "r": 383.62402, "b": 491.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-13 Column definitions of the TRANSACTIONS table"}, {"label": "list_item", "id": 6, "page_no": 61, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 508.458251953125, "r": 547.3941, "b": 554.54103, "coord_origin": "TOPLEFT"}, "confidence": 0.7894290685653687, "cells": [{"id": 12, "text": "10.Click the ", "bbox": {"l": 136.8, "t": 509.32861, "r": 192.09694, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Key Constraints", "bbox": {"l": 192.11984, "t": 509.32861, "r": 268.44635, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", ", "bbox": {"l": 268.26007, "t": 509.32861, "r": 273.89941, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Foreign Key Constraints", "bbox": {"l": 273.83966, "t": 509.32861, "r": 389.64954, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", and ", "bbox": {"l": 389.45932, "t": 509.32861, "r": 414.47784, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Check Constraints ", "bbox": {"l": 414.47983, "t": 509.32861, "r": 505.37079, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "tabs to ", "bbox": {"l": 505.37976, "t": 509.32861, "r": 538.20105, "b": 518.5416, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in ", "bbox": {"l": 151.20016, "t": 521.32843, "r": 547.3941, "b": 530.54141, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the ", "bbox": {"l": 151.20016, "t": 533.32822, "r": 518.87848, "b": 542.54123, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTIONS table.", "bbox": {"l": 151.20016, "t": 545.32803, "r": 256.03613, "b": 554.54103, "coord_origin": "TOPLEFT"}}]}, "text": "10.Click the Key Constraints , Foreign Key Constraints , and Check Constraints tabs to review the key, foreign, and check constraints on the TRANSACTIONS table, as shown in Figure 4-14. There is one Foreign Key Constraint and one Check Constraint on the TRANSACTIONS table."}, {"label": "caption", "id": 7, "page_no": 61, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.34345245361328, "t": 724.33056640625, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}, "confidence": 0.927774965763092, "cells": [{"id": 22, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 725.837997, "r": 342.01257, "b": 734.162998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-14 Reviewing the constraints on the TRANSACTIONS table"}, {"label": "picture", "id": 8, "page_no": 61, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87826538085938, "t": 107.37496948242188, "r": 451.5091857910156, "b": 296.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9791154861450195, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 61, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.676544189453125, "t": 568.8480224609375, "r": 546.6666870117188, "b": 722.6273803710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9123829007148743, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 61, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11357116699219, "t": 754.0479125976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8953660130500793, "cells": [{"id": 0, "text": "46 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "46"}, {"label": "page_footer", "id": 1, "page_no": 61, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1781997680664, "t": 754.6085205078125, "r": 334.42142, "b": 764.017578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9389416575431824, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 62, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.25257873535156, "t": 754.7490234375, "r": 523.59357, "b": 764.0389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526394605636597, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6387939453125, "t": 754.2075805664062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9067078232765198, "cells": [{"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.23085021972656, "t": 70.71146392822266, "r": 527.00562, "b": 92.8815689086914, "coord_origin": "TOPLEFT"}, "confidence": 0.9731295108795166, "cells": [{"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.15889739990234, "t": 112.25782775878906, "r": 532.11951, "b": 141.6817169189453, "coord_origin": "TOPLEFT"}, "confidence": 0.9485021233558655, "cells": [{"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.7303466796875, "t": 154.53631591796875, "r": 531.98792, "b": 188.7343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9785159826278687, "cells": [{"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 136.1609649658203, "t": 200.50624084472656, "r": 266.86069, "b": 211.13751220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.8128474354743958, "cells": [{"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.48870849609375, "t": 217.26614379882812, "r": 544.54364, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9693723320960999, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.063720703125, "t": 493.6786193847656, "r": 292.96966552734375, "b": 502.8232727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.948575496673584, "cells": [{"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.87820434570312, "t": 254.07247924804688, "r": 343.8211669921875, "b": 492.20819091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855658411979675, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 62, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.25257873535156, "t": 754.7490234375, "r": 523.59357, "b": 764.0389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526394605636597, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 62, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6387939453125, "t": 754.2075805664062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9067078232765198, "cells": [{"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "47"}, {"label": "text", "id": 2, "page_no": 62, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.23085021972656, "t": 70.71146392822266, "r": 527.00562, "b": 92.8815689086914, "coord_origin": "TOPLEFT"}, "confidence": 0.9731295108795166, "cells": [{"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario."}, {"label": "section_header", "id": 3, "page_no": 62, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.15889739990234, "t": 112.25782775878906, "r": 532.11951, "b": 141.6817169189453, "coord_origin": "TOPLEFT"}, "confidence": 0.9485021233558655, "cells": [{"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "text", "id": 4, "page_no": 62, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7303466796875, "t": 154.53631591796875, "r": 531.98792, "b": 188.7343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9785159826278687, "cells": [{"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, \u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA."}, {"label": "section_header", "id": 5, "page_no": 62, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.1609649658203, "t": 200.50624084472656, "r": 266.86069, "b": 211.13751220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.8128474354743958, "cells": [{"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 62, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.48870849609375, "t": 217.26614379882812, "r": 544.54364, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9693723320960999, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "1. Right-click the database connection and select Application Administration , as shown in Figure 4-15."}, {"label": "caption", "id": 7, "page_no": 62, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.063720703125, "t": 493.6786193847656, "r": 292.96966552734375, "b": 502.8232727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.948575496673584, "cells": [{"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-15 Application administration"}, {"label": "picture", "id": 8, "page_no": 62, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87820434570312, "t": 254.07247924804688, "r": 343.8211669921875, "b": 492.20819091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855658411979675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 62, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.23085021972656, "t": 70.71146392822266, "r": 527.00562, "b": 92.8815689086914, "coord_origin": "TOPLEFT"}, "confidence": 0.9731295108795166, "cells": [{"id": 2, "text": "Now that you have reviewed the database model for this example, the following sections ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 527.00562, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "describe the steps that are required to implement RCAC in this banking scenario.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 494.7092, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have reviewed the database model for this example, the following sections describe the steps that are required to implement RCAC in this banking scenario."}, {"label": "section_header", "id": 3, "page_no": 62, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.15889739990234, "t": 112.25782775878906, "r": 532.11951, "b": 141.6817169189453, "coord_origin": "TOPLEFT"}, "confidence": 0.9485021233558655, "cells": [{"id": 4, "text": "4.3.2", "bbox": {"l": 64.800003, "t": 113.33471999999995, "r": 93.888939, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Assigning function ID QIBM_DB_SECADM to the Database Engineers ", "bbox": {"l": 97.52504, "t": 113.33471999999995, "r": 532.11951, "b": 125.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "group", "bbox": {"l": 64.799988, "t": 129.35455000000002, "r": 101.27979, "b": 141.34258999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.2 Assigning function ID QIBM_DB_SECADM to the Database Engineers group"}, {"label": "text", "id": 4, "page_no": 62, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7303466796875, "t": 154.53631591796875, "r": 531.98792, "b": 188.7343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9785159826278687, "cells": [{"id": 7, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers ", "bbox": {"l": 136.8, "t": 155.50867000000005, "r": 522.06989, "b": 164.72168, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "(DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, ", "bbox": {"l": 136.8, "t": 167.50847999999996, "r": 531.98792, "b": 176.7215, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "\u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA.", "bbox": {"l": 136.80002, "t": 179.50829999999996, "r": 487.71283000000005, "b": 188.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The first step is to assign the appropriate function usage ID to the Database Engineers (DBEs) that will be implementing RCAC. For a description of function usage IDs, see 2.1, \u201cRoles\u201d on page 8. In this example, the DBEs are users MCAIN and HBEDOYA."}, {"label": "section_header", "id": 5, "page_no": 62, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.1609649658203, "t": 200.50624084472656, "r": 266.86069, "b": 211.13751220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.8128474354743958, "cells": [{"id": 10, "text": "Complete the following steps:", "bbox": {"l": 136.80002, "t": 201.52788999999996, "r": 266.86069, "b": 210.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 62, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.48870849609375, "t": 217.26614379882812, "r": 544.54364, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9693723320960999, "cells": [{"id": 11, "text": "1.", "bbox": {"l": 136.80002, "t": 218.50769000000003, "r": 145.22206, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Right-click the database connection and select ", "bbox": {"l": 148.0294, "t": 218.50769000000003, "r": 359.07529, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Application Administration", "bbox": {"l": 359.16, "t": 218.50769000000003, "r": 486.7905, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ", as shown in", "bbox": {"l": 486.71973, "t": 218.50769000000003, "r": 544.54364, "b": 227.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-15.", "bbox": {"l": 151.19922, "t": 230.50751000000002, "r": 205.13258, "b": 239.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "1. Right-click the database connection and select Application Administration , as shown in Figure 4-15."}, {"label": "caption", "id": 7, "page_no": 62, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.063720703125, "t": 493.6786193847656, "r": 292.96966552734375, "b": 502.8232727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.948575496673584, "cells": [{"id": 16, "text": "Figure 4-15 Application administration", "bbox": {"l": 136.8, "t": 494.41791, "r": 292.51532, "b": 502.74292, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-15 Application administration"}, {"label": "picture", "id": 8, "page_no": 62, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.87820434570312, "t": 254.07247924804688, "r": 343.8211669921875, "b": 492.20819091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855658411979675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 62, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.25257873535156, "t": 754.7490234375, "r": 523.59357, "b": 764.0389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9526394605636597, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 62, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6387939453125, "t": 754.2075805664062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9067078232765198, "cells": [{"id": 1, "text": "47", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "47"}]}}, {"page_no": 63, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1659164428711, "t": 754.1441040039062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9094043970108032, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31367492675781, "t": 754.6023559570312, "r": 334.42142, "b": 764.0177001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9526337385177612, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.7973175048828, "t": 68.65014999999994, "r": 530.211, "b": 93.15596771240234, "coord_origin": "TOPLEFT"}, "confidence": 0.9675157070159912, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.85130310058594, "t": 391.84564208984375, "r": 329.4411315917969, "b": 401.4302673339844, "coord_origin": "TOPLEFT"}, "confidence": 0.9492601156234741, "cells": [{"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.79788208007812, "t": 417.66436767578125, "r": 544.57233, "b": 440.6051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9629845023155212, "cells": [{"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.05140686035156, "t": 612.469482421875, "r": 459.4308776855469, "b": 622.1511840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9522164463996887, "cells": [{"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.17874145507812, "t": 107.1623306274414, "r": 527.1444702148438, "b": 388.9134826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9870592355728149, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 136.42279052734375, "t": 454.41522216796875, "r": 528.0494384765625, "b": 610.991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.986380398273468, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 63, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1659164428711, "t": 754.1441040039062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9094043970108032, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "48"}, {"label": "page_footer", "id": 1, "page_no": 63, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31367492675781, "t": 754.6023559570312, "r": 334.42142, "b": 764.0177001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9526337385177612, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 63, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.7973175048828, "t": 68.65014999999994, "r": 530.211, "b": 93.15596771240234, "coord_origin": "TOPLEFT"}, "confidence": 0.9675157070159912, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i \uf0ae Database and select the function usage ID of Database Security Administrator ."}, {"label": "caption", "id": 3, "page_no": 63, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.85130310058594, "t": 391.84564208984375, "r": 329.4411315917969, "b": 401.4302673339844, "coord_origin": "TOPLEFT"}, "confidence": 0.9492601156234741, "cells": [{"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-16 Application administration for IBM i"}, {"label": "list_item", "id": 4, "page_no": 63, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.79788208007812, "t": 417.66436767578125, "r": 544.57233, "b": 440.6051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9629845023155212, "cells": [{"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17."}, {"label": "caption", "id": 5, "page_no": 63, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.05140686035156, "t": 612.469482421875, "r": 459.4308776855469, "b": 622.1511840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9522164463996887, "cells": [{"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID"}, {"label": "picture", "id": 6, "page_no": 63, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.17874145507812, "t": 107.1623306274414, "r": 527.1444702148438, "b": 388.9134826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9870592355728149, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 63, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.42279052734375, "t": 454.41522216796875, "r": 528.0494384765625, "b": 610.991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.986380398273468, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 63, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.7973175048828, "t": 68.65014999999994, "r": 530.211, "b": 93.15596771240234, "coord_origin": "TOPLEFT"}, "confidence": 0.9675157070159912, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19351, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Application Administration window opens, as shown in Figure 4-16. Click ", "bbox": {"l": 147.99136, "t": 71.50867000000005, "r": 493.65488, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM i", "bbox": {"l": 493.7405099999999, "t": 71.50867000000005, "r": 517.56885, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "\uf0ae", "bbox": {"l": 520.38049, "t": 68.65014999999994, "r": 530.211, "b": 80.84118999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Database", "bbox": {"l": 151.20117, "t": 83.50847999999996, "r": 195.65863, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " and select the function usage ID of ", "bbox": {"l": 195.66162, "t": 83.50847999999996, "r": 355.12521, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Database Security Administrator", "bbox": {"l": 355.08139, "t": 83.50847999999996, "r": 510.06299, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 509.5809300000001, "t": 83.50847999999996, "r": 512.34979, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The Application Administration window opens, as shown in Figure 4-16. Click IBM i \uf0ae Database and select the function usage ID of Database Security Administrator ."}, {"label": "caption", "id": 3, "page_no": 63, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.85130310058594, "t": 391.84564208984375, "r": 329.4411315917969, "b": 401.4302673339844, "coord_origin": "TOPLEFT"}, "confidence": 0.9492601156234741, "cells": [{"id": 10, "text": "Figure 4-16 Application administration for IBM i", "bbox": {"l": 136.8, "t": 392.95801, "r": 328.13547, "b": 401.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-16 Application administration for IBM i"}, {"label": "list_item", "id": 4, "page_no": 63, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.79788208007812, "t": 417.66436767578125, "r": 544.57233, "b": 440.6051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9629845023155212, "cells": [{"id": 11, "text": "3.", "bbox": {"l": 136.8, "t": 418.90872, "r": 145.84831, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Click ", "bbox": {"l": 148.86441, "t": 418.90872, "r": 175.38007, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Customize", "bbox": {"l": 175.43982, "t": 418.90872, "r": 226.02864, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " for the function usage ID of Database Security Administrator, as shown ", "bbox": {"l": 226.07945, "t": 418.90872, "r": 544.57233, "b": 428.1217, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "in Figure 4-17.", "bbox": {"l": 151.19919, "t": 430.90854, "r": 215.63544000000002, "b": 440.1215199999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Click Customize for the function usage ID of Database Security Administrator, as shown in Figure 4-17."}, {"label": "caption", "id": 5, "page_no": 63, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.05140686035156, "t": 612.469482421875, "r": 459.4308776855469, "b": 622.1511840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9522164463996887, "cells": [{"id": 16, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID", "bbox": {"l": 136.8, "t": 613.758, "r": 458.56000000000006, "b": 622.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-17 Customizing the Database Security Administrator function usage ID"}, {"label": "picture", "id": 6, "page_no": 63, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.17874145507812, "t": 107.1623306274414, "r": 527.1444702148438, "b": 388.9134826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9870592355728149, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 63, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.42279052734375, "t": 454.41522216796875, "r": 528.0494384765625, "b": 610.991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.986380398273468, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 63, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1659164428711, "t": 754.1441040039062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9094043970108032, "cells": [{"id": 0, "text": "48 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "48"}, {"label": "page_footer", "id": 1, "page_no": 63, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31367492675781, "t": 754.6023559570312, "r": 334.42142, "b": 764.0177001953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9526337385177612, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 64, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.2803955078125, "t": 754.738525390625, "r": 523.59357, "b": 764.0549926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.956462025642395, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.666015625, "t": 754.0488891601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9085332155227661, "cells": [{"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.78591918945312, "t": 70.48530578613281, "r": 547.19739, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9741643071174622, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.0041961669922, "t": 404.69866943359375, "r": 297.5841369628906, "b": 413.9527282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9453438520431519, "cells": [{"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.253173828125, "t": 430.48211669921875, "r": 537.65015, "b": 465.2202453613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9763842225074768, "cells": [{"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.03775024414062, "t": 470.50812, "r": 484.38336181640625, "b": 583.2213134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9760020971298218, "cells": [{"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.1788787841797, "t": 586.18408203125, "r": 443.8726501464844, "b": 595.6748046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9425281286239624, "cells": [{"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.3659210205078, "t": 118.70867919921875, "r": 485.6257629394531, "b": 401.78082275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9869308471679688, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 64, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2803955078125, "t": 754.738525390625, "r": 523.59357, "b": 764.0549926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.956462025642395, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 64, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.666015625, "t": 754.0488891601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9085332155227661, "cells": [{"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "49"}, {"label": "list_item", "id": 2, "page_no": 64, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78591918945312, "t": 70.48530578613281, "r": 547.19739, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9741643071174622, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK ."}, {"label": "caption", "id": 3, "page_no": 64, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.0041961669922, "t": 404.69866943359375, "r": 297.5841369628906, "b": 413.9527282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9453438520431519, "cells": [{"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-18 Customize Access window"}, {"label": "list_item", "id": 4, "page_no": 64, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.253173828125, "t": 430.48211669921875, "r": 537.65015, "b": 465.2202453613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9763842225074768, "cells": [{"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}]}, "text": "5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19."}, {"label": "picture", "id": 5, "page_no": 64, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.03775024414062, "t": 470.50812, "r": 484.38336181640625, "b": 583.2213134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9760020971298218, "cells": [{"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 6, "page_no": 64, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1788787841797, "t": 586.18408203125, "r": 443.8726501464844, "b": 595.6748046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9425281286239624, "cells": [{"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-19 Function usage ID Database Security Administrator customized"}, {"label": "picture", "id": 7, "page_no": 64, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.3659210205078, "t": 118.70867919921875, "r": 485.6257629394531, "b": 401.78082275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9869308471679688, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 64, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78591918945312, "t": 70.48530578613281, "r": 547.19739, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9741643071174622, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The Customize Access window opens, as shown in Figure 4-18. Click the users that need ", "bbox": {"l": 147.9252, "t": 71.50903000000005, "r": 547.17651, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click ", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 506.5556, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Add", "bbox": {"l": 506.51874, "t": 83.50885000000017, "r": 525.81329, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " and ", "bbox": {"l": 525.83917, "t": 83.50885000000017, "r": 547.19739, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "then click ", "bbox": {"l": 151.19876, "t": 95.50867000000005, "r": 195.40625, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "OK", "bbox": {"l": 195.41916, "t": 95.50867000000005, "r": 210.46075, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ".", "bbox": {"l": 210.41891, "t": 95.50867000000005, "r": 213.18779, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Customize Access window opens, as shown in Figure 4-18. Click the users that need to implement RCAC. For this example, HBEDOYA and MCAIN are selected. Click Add and then click OK ."}, {"label": "caption", "id": 3, "page_no": 64, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.0041961669922, "t": 404.69866943359375, "r": 297.5841369628906, "b": 413.9527282714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9453438520431519, "cells": [{"id": 10, "text": "Figure 4-18 Customize Access window", "bbox": {"l": 136.8, "t": 405.55798, "r": 296.37628, "b": 413.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-18 Customize Access window"}, {"label": "list_item", "id": 4, "page_no": 64, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.253173828125, "t": 430.48211669921875, "r": 537.65015, "b": 465.2202453613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9763842225074768, "cells": [{"id": 11, "text": "5.", "bbox": {"l": 136.8, "t": 431.50872999999996, "r": 145.20036, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The Application Administrator window opens again. The function usage ID of Database ", "bbox": {"l": 148.00046, "t": 431.50872999999996, "r": 537.65015, "b": 440.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Security Administrator now has an X in the Customized Access column, as shown in ", "bbox": {"l": 151.20016, "t": 443.50854, "r": 525.76385, "b": 452.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-19.", "bbox": {"l": 151.20016, "t": 455.50836, "r": 205.13353, "b": 464.72134, "coord_origin": "TOPLEFT"}}]}, "text": "5. The Application Administrator window opens again. The function usage ID of Database Security Administrator now has an X in the Customized Access column, as shown in Figure 4-19."}, {"label": "picture", "id": 5, "page_no": 64, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.03775024414062, "t": 470.50812, "r": 484.38336181640625, "b": 583.2213134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9760020971298218, "cells": [{"id": 15, "text": ".", "bbox": {"l": 136.8, "t": 470.50812, "r": 139.56888, "b": 479.7211, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 6, "page_no": 64, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1788787841797, "t": 586.18408203125, "r": 443.8726501464844, "b": 595.6748046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9425281286239624, "cells": [{"id": 16, "text": "Figure 4-19 Function usage ID Database Security Administrator customized", "bbox": {"l": 136.8, "t": 586.9379, "r": 442.35632, "b": 595.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-19 Function usage ID Database Security Administrator customized"}, {"label": "picture", "id": 7, "page_no": 64, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.3659210205078, "t": 118.70867919921875, "r": 485.6257629394531, "b": 401.78082275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9869308471679688, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 64, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.2803955078125, "t": 754.738525390625, "r": 523.59357, "b": 764.0549926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.956462025642395, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 64, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.666015625, "t": 754.0488891601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9085332155227661, "cells": [{"id": 1, "text": "49", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "49"}]}}, {"page_no": 65, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.19255828857422, "t": 754.3742065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9205988645553589, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27255249023438, "t": 754.7175903320312, "r": 334.42142, "b": 763.9406127929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9552856683731079, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.97772216796875, "t": 70.58170318603516, "r": 545.57037, "b": 93.28826904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537994265556335, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3402557373047, "t": 274.47186279296875, "r": 438.3047790527344, "b": 284.2582702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9432975053787231, "cells": [{"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.06755065917969, "t": 303.6237487792969, "r": 418.56525, "b": 317.0628662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9638302326202393, "cells": [{"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.84303283691406, "t": 329.9059143066406, "r": 547.27246, "b": 376.3108825683594, "coord_origin": "TOPLEFT"}, "confidence": 0.986221194267273, "cells": [{"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.06056213378906, "t": 387.9443054199219, "r": 266.86069, "b": 398.36285400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7973853349685669, "cells": [{"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.78126525878906, "t": 404.716552734375, "r": 535.9978, "b": 427.2034606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.966343879699707, "cells": [{"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 136.255126953125, "t": 590.8622436523438, "r": 281.4906005859375, "b": 600.1361083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9437876343727112, "cells": [{"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 135.67332458496094, "t": 441.32366943359375, "r": 358.52606201171875, "b": 587.8834228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837242364883423, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 134.8684539794922, "t": 107.64208984375, "r": 447.195556640625, "b": 272.4745788574219, "coord_origin": "TOPLEFT"}, "confidence": 0.7622372508049011, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 65, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19255828857422, "t": 754.3742065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9205988645553589, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "50"}, {"label": "page_footer", "id": 1, "page_no": 65, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27255249023438, "t": 754.7175903320312, "r": 334.42142, "b": 763.9406127929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9552856683731079, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 65, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97772216796875, "t": 70.58170318603516, "r": 545.57037, "b": 93.28826904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537994265556335, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20."}, {"label": "caption", "id": 3, "page_no": 65, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3402557373047, "t": 274.47186279296875, "r": 438.3047790527344, "b": 284.2582702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9432975053787231, "cells": [{"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC"}, {"label": "section_header", "id": 4, "page_no": 65, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.06755065917969, "t": 303.6237487792969, "r": 418.56525, "b": 317.0628662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9638302326202393, "cells": [{"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.3 Creating group profiles for the users and their roles"}, {"label": "text", "id": 5, "page_no": 65, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84303283691406, "t": 329.9059143066406, "r": 547.27246, "b": 376.3108825683594, "coord_origin": "TOPLEFT"}, "confidence": 0.986221194267273, "cells": [{"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}]}, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, \u201cDescription of the users roles and responsibilities\u201d on page 39."}, {"label": "section_header", "id": 6, "page_no": 65, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.06056213378906, "t": 387.9443054199219, "r": 266.86069, "b": 398.36285400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7973853349685669, "cells": [{"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 65, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.78126525878906, "t": 404.716552734375, "r": 535.9978, "b": 427.2034606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.966343879699707, "cells": [{"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}]}, "text": "1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21."}, {"label": "caption", "id": 8, "page_no": 65, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.255126953125, "t": 590.8622436523438, "r": 281.4906005859375, "b": 600.1361083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9437876343727112, "cells": [{"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-21 Creating group profiles"}, {"label": "picture", "id": 9, "page_no": 65, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.67332458496094, "t": 441.32366943359375, "r": 358.52606201171875, "b": 587.8834228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837242364883423, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 65, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 134.8684539794922, "t": 107.64208984375, "r": 447.195556640625, "b": 272.4745788574219, "coord_origin": "TOPLEFT"}, "confidence": 0.7622372508049011, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 65, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97772216796875, "t": 70.58170318603516, "r": 545.57037, "b": 93.28826904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537994265556335, "cells": [{"id": 2, "text": "6.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.1907, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL ", "bbox": {"l": 147.98759, "t": 71.50867000000005, "r": 545.57037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "query is shown in Figure 4-20.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 285.23688, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "6. Run an SQL query that shows which user profiles are enabled to define RCAC. The SQL query is shown in Figure 4-20."}, {"label": "caption", "id": 3, "page_no": 65, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3402557373047, "t": 274.47186279296875, "r": 438.3047790527344, "b": 284.2582702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9432975053787231, "cells": [{"id": 5, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC", "bbox": {"l": 136.8, "t": 275.77801999999997, "r": 437.8742700000001, "b": 284.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-20 Query to display user profiles with function usage ID for RCAC"}, {"label": "section_header", "id": 4, "page_no": 65, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.06755065917969, "t": 303.6237487792969, "r": 418.56525, "b": 317.0628662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9638302326202393, "cells": [{"id": 6, "text": "4.3.3", "bbox": {"l": 64.800003, "t": 304.61474999999996, "r": 93.871941, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Creating group profiles for the users and their roles", "bbox": {"l": 97.50592, "t": 304.61474999999996, "r": 418.56525, "b": 316.6027199999999, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.3 Creating group profiles for the users and their roles"}, {"label": "text", "id": 5, "page_no": 65, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84303283691406, "t": 329.9059143066406, "r": 547.27246, "b": 376.3108825683594, "coord_origin": "TOPLEFT"}, "confidence": 0.986221194267273, "cells": [{"id": 8, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and ", "bbox": {"l": 136.8, "t": 330.76874, "r": 536.23578, "b": 339.98172000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "DBE) and assign the different user profiles to the different group profiles. For a description of ", "bbox": {"l": 136.8, "t": 342.76855, "r": 547.27246, "b": 351.98154, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the different groups and users for this example, see 4.2, \u201cDescription of the users roles and ", "bbox": {"l": 136.8, "t": 354.76837, "r": 540.82733, "b": 363.98135, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "responsibilities\u201d on page 39.", "bbox": {"l": 136.8, "t": 366.76819, "r": 261.1217, "b": 375.98117, "coord_origin": "TOPLEFT"}}]}, "text": "The next step is to create the different group profiles (ADMIN, CUSTOMER, TELLER, and DBE) and assign the different user profiles to the different group profiles. For a description of the different groups and users for this example, see 4.2, \u201cDescription of the users roles and responsibilities\u201d on page 39."}, {"label": "section_header", "id": 6, "page_no": 65, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.06056213378906, "t": 387.9443054199219, "r": 266.86069, "b": 398.36285400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7973853349685669, "cells": [{"id": 12, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 388.78774999999996, "r": 266.86069, "b": 398.00073, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 65, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.78126525878906, "t": 404.716552734375, "r": 535.9978, "b": 427.2034606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.966343879699707, "cells": [{"id": 13, "text": "1.", "bbox": {"l": 136.8, "t": 405.76755, "r": 145.20288, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On the main navigation pane of System i Navigator, right-click ", "bbox": {"l": 148.00386, "t": 405.76755, "r": 426.30643, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Groups ", "bbox": {"l": 426.30035, "t": 405.76755, "r": 464.4541300000001, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "and select ", "bbox": {"l": 464.46011, "t": 405.76755, "r": 512.76715, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "New ", "bbox": {"l": 512.76013, "t": 405.76755, "r": 535.9978, "b": 414.98053, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Group", "bbox": {"l": 151.20016, "t": 417.76736, "r": 180.91782, "b": 426.98035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", as shown in Figure 4-21.", "bbox": {"l": 180.6001, "t": 417.76736, "r": 295.52158, "b": 426.98035, "coord_origin": "TOPLEFT"}}]}, "text": "1. On the main navigation pane of System i Navigator, right-click Groups and select New Group , as shown in Figure 4-21."}, {"label": "caption", "id": 8, "page_no": 65, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 136.255126953125, "t": 590.8622436523438, "r": 281.4906005859375, "b": 600.1361083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9437876343727112, "cells": [{"id": 20, "text": "Figure 4-21 Creating group profiles", "bbox": {"l": 136.8, "t": 591.6179999999999, "r": 281.0097, "b": 599.94301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-21 Creating group profiles"}, {"label": "picture", "id": 9, "page_no": 65, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.67332458496094, "t": 441.32366943359375, "r": 358.52606201171875, "b": 587.8834228515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9837242364883423, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 65, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 134.8684539794922, "t": 107.64208984375, "r": 447.195556640625, "b": 272.4745788574219, "coord_origin": "TOPLEFT"}, "confidence": 0.7622372508049011, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 65, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.19255828857422, "t": 754.3742065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9205988645553589, "cells": [{"id": 0, "text": "50 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "50"}, {"label": "page_footer", "id": 1, "page_no": 65, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27255249023438, "t": 754.7175903320312, "r": 334.42142, "b": 763.9406127929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9552856683731079, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 66, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30003356933594, "t": 754.7357177734375, "r": 523.59357, "b": 764.0491333007812, "coord_origin": "TOPLEFT"}, "confidence": 0.956891655921936, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7405395507812, "t": 754.3246459960938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9111406803131104, "cells": [{"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.031005859375, "t": 70.50956726074219, "r": 547.20844, "b": 104.95550537109375, "coord_origin": "TOPLEFT"}, "confidence": 0.976949155330658, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 150.73487854003906, "t": 111.0660400390625, "r": 482.46234000000004, "b": 121.75677490234375, "coord_origin": "TOPLEFT"}, "confidence": 0.7767043113708496, "cells": [{"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.369873046875, "t": 363.4606018066406, "r": 352.9217834472656, "b": 372.808837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455896019935608, "cells": [{"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.0438232421875, "t": 389.4517822265625, "r": 537.61829, "b": 411.7866516113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9663872122764587, "cells": [{"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.12078857421875, "t": 553.0734252929688, "r": 303.932373046875, "b": 562.2108764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9498841166496277, "cells": [{"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.2171630859375, "t": 135.30877685546875, "r": 474.1829528808594, "b": 361.1051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9854894280433655, "cells": []}, {"id": 8, "label": "picture", "bbox": {"l": 136.2489471435547, "t": 425.68438720703125, "r": 269.5424499511719, "b": 550.3474731445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9837116599082947, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 66, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30003356933594, "t": 754.7357177734375, "r": 523.59357, "b": 764.0491333007812, "coord_origin": "TOPLEFT"}, "confidence": 0.956891655921936, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 66, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7405395507812, "t": 754.3246459960938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9111406803131104, "cells": [{"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "51"}, {"label": "list_item", "id": 2, "page_no": 66, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.031005859375, "t": 70.50956726074219, "r": 547.20844, "b": 104.95550537109375, "coord_origin": "TOPLEFT"}, "confidence": 0.976949155330658, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add ."}, {"label": "text", "id": 3, "page_no": 66, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.73487854003906, "t": 111.0660400390625, "r": 482.46234000000004, "b": 121.75677490234375, "coord_origin": "TOPLEFT"}, "confidence": 0.7767043113708496, "cells": [{"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile."}, {"label": "caption", "id": 4, "page_no": 66, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.369873046875, "t": 363.4606018066406, "r": 352.9217834472656, "b": 372.808837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455896019935608, "cells": [{"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 Creating group profiles and adding users"}, {"label": "list_item", "id": 5, "page_no": 66, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.0438232421875, "t": 389.4517822265625, "r": 537.61829, "b": 411.7866516113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9663872122764587, "cells": [{"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups \uf0ae Groups , as shown in Figure 4-23."}, {"label": "caption", "id": 6, "page_no": 66, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.12078857421875, "t": 553.0734252929688, "r": 303.932373046875, "b": 562.2108764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9498841166496277, "cells": [{"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-23 Newly created group profiles"}, {"label": "picture", "id": 7, "page_no": 66, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2171630859375, "t": 135.30877685546875, "r": 474.1829528808594, "b": 361.1051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9854894280433655, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 66, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.2489471435547, "t": 425.68438720703125, "r": 269.5424499511719, "b": 550.3474731445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9837116599082947, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 66, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.031005859375, "t": 70.50956726074219, "r": 547.20844, "b": 104.95550537109375, "coord_origin": "TOPLEFT"}, "confidence": 0.976949155330658, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Group window opens, as shown in Figure 4-22. For each new group, enter the ", "bbox": {"l": 147.96048, "t": 71.50903000000005, "r": 540.68945, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.20844, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "associated to this group by selecting the user profile and clicking ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 438.54974000000004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Add", "bbox": {"l": 438.47998, "t": 95.50867000000005, "r": 457.77448, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": ".", "bbox": {"l": 457.80038, "t": 95.50867000000005, "r": 460.56927, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Group window opens, as shown in Figure 4-22. For each new group, enter the Group name (ADMIN, CUSTOMER, TELLER, and DBE) and add the user profiles that are associated to this group by selecting the user profile and clicking Add ."}, {"label": "text", "id": 3, "page_no": 66, "cluster": {"id": 3, "label": "text", "bbox": {"l": 150.73487854003906, "t": 111.0660400390625, "r": 482.46234000000004, "b": 121.75677490234375, "coord_origin": "TOPLEFT"}, "confidence": 0.7767043113708496, "cells": [{"id": 8, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile.", "bbox": {"l": 151.20071, "t": 112.48845999999992, "r": 482.46234000000004, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 shows adding user TQSPENCER to the TELLER group profile."}, {"label": "caption", "id": 4, "page_no": 66, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.369873046875, "t": 363.4606018066406, "r": 352.9217834472656, "b": 372.808837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455896019935608, "cells": [{"id": 9, "text": "Figure 4-22 Creating group profiles and adding users", "bbox": {"l": 136.8, "t": 364.33797999999996, "r": 352.45258, "b": 372.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-22 Creating group profiles and adding users"}, {"label": "list_item", "id": 5, "page_no": 66, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.0438232421875, "t": 389.4517822265625, "r": 537.61829, "b": 411.7866516113281, "coord_origin": "TOPLEFT"}, "confidence": 0.9663872122764587, "cells": [{"id": 10, "text": "3.", "bbox": {"l": 136.8, "t": 390.28873, "r": 145.18831, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "After you create all the group profiles, you should see them listed in System i Navigator ", "bbox": {"l": 147.98441, "t": 390.28873, "r": 537.61829, "b": 399.50171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "under ", "bbox": {"l": 151.20016, "t": 402.28853999999995, "r": 179.56824, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Users and Groups", "bbox": {"l": 179.52043, "t": 402.28853999999995, "r": 265.87564, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "\uf0ae", "bbox": {"l": 268.3208, "t": 399.43002, "r": 278.15131, "b": 411.62106, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " Groups", "bbox": {"l": 278.16028, "t": 402.28853999999995, "r": 316.31705, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ", as shown in Figure 4-23.", "bbox": {"l": 316.14075, "t": 402.28853999999995, "r": 431.05228, "b": 411.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "3. After you create all the group profiles, you should see them listed in System i Navigator under Users and Groups \uf0ae Groups , as shown in Figure 4-23."}, {"label": "caption", "id": 6, "page_no": 66, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.12078857421875, "t": 553.0734252929688, "r": 303.932373046875, "b": 562.2108764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9498841166496277, "cells": [{"id": 17, "text": "Figure 4-23 Newly created group profiles", "bbox": {"l": 136.8, "t": 553.33789, "r": 303.75809, "b": 561.6629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-23 Newly created group profiles"}, {"label": "picture", "id": 7, "page_no": 66, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2171630859375, "t": 135.30877685546875, "r": 474.1829528808594, "b": 361.1051330566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9854894280433655, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 66, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.2489471435547, "t": 425.68438720703125, "r": 269.5424499511719, "b": 550.3474731445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9837116599082947, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 66, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30003356933594, "t": 754.7357177734375, "r": 523.59357, "b": 764.0491333007812, "coord_origin": "TOPLEFT"}, "confidence": 0.956891655921936, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 66, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7405395507812, "t": 754.3246459960938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9111406803131104, "cells": [{"id": 1, "text": "51", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "51"}]}}, {"page_no": 67, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1907958984375, "t": 754.3226928710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162147045135498, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31280517578125, "t": 754.688720703125, "r": 334.42142, "b": 763.898193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9516439437866211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.14804077148438, "t": 70.27552795410156, "r": 420.28372, "b": 83.57343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9602196216583252, "cells": [{"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.99069213867188, "t": 96.89618682861328, "r": 545.77252, "b": 131.00881958007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9838969707489014, "cells": [{"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.14224243164062, "t": 142.52076721191406, "r": 266.86069, "b": 152.9317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8107734322547913, "cells": [{"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.56494140625, "t": 159.2626495361328, "r": 535.943603515625, "b": 181.82007, "coord_origin": "TOPLEFT"}, "confidence": 0.9734883904457092, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.03294372558594, "t": 407.6881408691406, "r": 292.05377197265625, "b": 416.7829284667969, "coord_origin": "TOPLEFT"}, "confidence": 0.9526056051254272, "cells": [{"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.92572021484375, "t": 433.5293884277344, "r": 541.19196, "b": 479.4812927246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9796995520591736, "cells": [{"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.31603240966797, "t": 710.88671875, "r": 347.040283203125, "b": 720.9501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9492066502571106, "cells": [{"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 135.9110107421875, "t": 195.97637939453125, "r": 454.9993896484375, "b": 405.2922058105469, "coord_origin": "TOPLEFT"}, "confidence": 0.987210750579834, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 64.25324249267578, "t": 493.0924987792969, "r": 546.2809448242188, "b": 708.3674926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9863254427909851, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 67, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1907958984375, "t": 754.3226928710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162147045135498, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "52"}, {"label": "page_footer", "id": 1, "page_no": 67, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31280517578125, "t": 754.688720703125, "r": 334.42142, "b": 763.898193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9516439437866211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 67, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.14804077148438, "t": 70.27552795410156, "r": 420.28372, "b": 83.57343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9602196216583252, "cells": [{"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "text", "id": 3, "page_no": 67, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99069213867188, "t": 96.89618682861328, "r": 545.77252, "b": 131.00881958007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9838969707489014, "cells": [{"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19."}, {"label": "section_header", "id": 4, "page_no": 67, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.14224243164062, "t": 142.52076721191406, "r": 266.86069, "b": 152.9317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8107734322547913, "cells": [{"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 67, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.56494140625, "t": 159.2626495361328, "r": 535.943603515625, "b": 181.82007, "coord_origin": "TOPLEFT"}, "confidence": 0.9734883904457092, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New \uf0ae Global Variable , as shown in Figure 4-24."}, {"label": "caption", "id": 6, "page_no": 67, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.03294372558594, "t": 407.6881408691406, "r": 292.05377197265625, "b": 416.7829284667969, "coord_origin": "TOPLEFT"}, "confidence": 0.9526056051254272, "cells": [{"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-24 Creating a global variable"}, {"label": "list_item", "id": 7, "page_no": 67, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.92572021484375, "t": 433.5293884277344, "r": 541.19196, "b": 479.4812927246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9796995520591736, "cells": [{"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK ."}, {"label": "caption", "id": 8, "page_no": 67, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.31603240966797, "t": 710.88671875, "r": 347.040283203125, "b": 720.9501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9492066502571106, "cells": [{"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID"}, {"label": "picture", "id": 9, "page_no": 67, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9110107421875, "t": 195.97637939453125, "r": 454.9993896484375, "b": 405.2922058105469, "coord_origin": "TOPLEFT"}, "confidence": 0.987210750579834, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 67, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 64.25324249267578, "t": 493.0924987792969, "r": 546.2809448242188, "b": 708.3674926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9863254427909851, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 67, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.14804077148438, "t": 70.27552795410156, "r": 420.28372, "b": 83.57343292236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9602196216583252, "cells": [{"id": 2, "text": "4.3.4", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.893837, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Creating the CUSTOMER_LOGIN_ID global variable ", "bbox": {"l": 97.530579, "t": 71.33471999999995, "r": 420.28372, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.4 Creating the CUSTOMER_LOGIN_ID global variable"}, {"label": "text", "id": 3, "page_no": 67, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99069213867188, "t": 96.89618682861328, "r": 545.77252, "b": 131.00881958007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9838969707489014, "cells": [{"id": 4, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 524.35071, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, which is required to validate the permissions. For more information about global ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 545.77252, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19.", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 393.31793, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In this step, you create a global variable that is used to capture the Customer_Login_ID information, which is required to validate the permissions. For more information about global variables, see 3.2.2, \u201cBuilt-in global variables\u201d on page 19."}, {"label": "section_header", "id": 4, "page_no": 67, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.14224243164062, "t": 142.52076721191406, "r": 266.86069, "b": 152.9317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8107734322547913, "cells": [{"id": 7, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 143.50793, "r": 266.86069, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 5, "page_no": 67, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.56494140625, "t": 159.2626495361328, "r": 535.943603515625, "b": 181.82007, "coord_origin": "TOPLEFT"}, "confidence": 0.9734883904457092, "cells": [{"id": 8, "text": "1.", "bbox": {"l": 136.8, "t": 160.48773000000006, "r": 145.18987, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "From System i Navigator, under the schema Bank_Schema, right-click ", "bbox": {"l": 147.98647, "t": 160.48773000000006, "r": 463.85352, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Global Variable", "bbox": {"l": 463.79974000000004, "t": 160.48773000000006, "r": 535.91608, "b": 169.70074, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and select ", "bbox": {"l": 151.20016, "t": 172.48755000000006, "r": 199.5191, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "New", "bbox": {"l": 199.50018, "t": 172.48755000000006, "r": 219.97794, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "\uf0ae", "bbox": {"l": 222.71992, "t": 169.62902999999994, "r": 232.55045000000004, "b": 181.82007, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Global Variable", "bbox": {"l": 235.38007999999996, "t": 172.48755000000006, "r": 307.45761, "b": 181.70056, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ", as shown in Figure 4-24.", "bbox": {"l": 307.26041, "t": 172.48755000000006, "r": 422.09814, "b": 181.70056, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, under the schema Bank_Schema, right-click Global Variable and select New \uf0ae Global Variable , as shown in Figure 4-24."}, {"label": "caption", "id": 6, "page_no": 67, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.03294372558594, "t": 407.6881408691406, "r": 292.05377197265625, "b": 416.7829284667969, "coord_origin": "TOPLEFT"}, "confidence": 0.9526056051254272, "cells": [{"id": 16, "text": "Figure 4-24 Creating a global variable", "bbox": {"l": 136.8, "t": 407.95801, "r": 291.84482, "b": 416.28302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-24 Creating a global variable"}, {"label": "list_item", "id": 7, "page_no": 67, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.92572021484375, "t": 433.5293884277344, "r": 541.19196, "b": 479.4812927246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9796995520591736, "cells": [{"id": 17, "text": "2.", "bbox": {"l": 136.8, "t": 433.90872, "r": 145.17693, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "The New Global Variable window opens, as shown in Figure 4-25. Enter the global ", "bbox": {"l": 147.96921, "t": 433.90872, "r": 517.53796, "b": 443.1217, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave ", "bbox": {"l": 151.20016, "t": 445.90854, "r": 541.19196, "b": 455.1215199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "the default value of NULL. This default value ensures that users that do not use the web ", "bbox": {"l": 151.20016, "t": 457.90836, "r": 541.04456, "b": 467.12134, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "interface do not have permission to access the data. Click ", "bbox": {"l": 151.20016, "t": 469.90817, "r": 408.75781, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 408.84045, "t": 469.90817, "r": 423.76251, "b": 479.12115, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 423.78046, "t": 469.90817, "r": 426.54935, "b": 479.12115, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Global Variable window opens, as shown in Figure 4-25. Enter the global variable name of CUSTOMER_LOGIN_ID, select the data type of VARCHAR, and leave the default value of NULL. This default value ensures that users that do not use the web interface do not have permission to access the data. Click OK ."}, {"label": "caption", "id": 8, "page_no": 67, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.31603240966797, "t": 710.88671875, "r": 347.040283203125, "b": 720.9501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9492066502571106, "cells": [{"id": 24, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID", "bbox": {"l": 64.800003, "t": 712.158005, "r": 346.33698, "b": 720.4830019999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-25 Creating a global variable called CUSTOMER_LOGIN_ID"}, {"label": "picture", "id": 9, "page_no": 67, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9110107421875, "t": 195.97637939453125, "r": 454.9993896484375, "b": 405.2922058105469, "coord_origin": "TOPLEFT"}, "confidence": 0.987210750579834, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 67, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 64.25324249267578, "t": 493.0924987792969, "r": 546.2809448242188, "b": 708.3674926757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9863254427909851, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 67, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1907958984375, "t": 754.3226928710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162147045135498, "cells": [{"id": 0, "text": "52 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "52"}, {"label": "page_footer", "id": 1, "page_no": 67, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31280517578125, "t": 754.688720703125, "r": 334.42142, "b": 763.898193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9516439437866211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 68, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.31678771972656, "t": 754.7354125976562, "r": 523.59357, "b": 764.0438232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9558536410331726, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.7046508789062, "t": 754.34130859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125332832336426, "cells": [{"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.12977600097656, "t": 70.7454833984375, "r": 547.25427, "b": 104.7872085571289, "coord_origin": "TOPLEFT"}, "confidence": 0.9774090051651001, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.95867919921875, "t": 241.98797607421875, "r": 457.0142822265625, "b": 251.3716278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9472981095314026, "cells": [{"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.82858276367188, "t": 267.8819274902344, "r": 534.23877, "b": 290.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9716678857803345, "cells": [{"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.15591430664062, "t": 578.5726318359375, "r": 540.3552856445312, "b": 588.1502075195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9472869038581848, "cells": [{"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.84584045410156, "t": 303.6470031738281, "r": 547.677978515625, "b": 576.6021118164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9863014221191406, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 136.07814025878906, "t": 119.34014892578125, "r": 346.28375244140625, "b": 239.5808868408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9723811745643616, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 68, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31678771972656, "t": 754.7354125976562, "r": 523.59357, "b": 764.0438232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9558536410331726, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 68, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7046508789062, "t": 754.34130859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125332832336426, "cells": [{"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "53"}, {"label": "list_item", "id": 2, "page_no": 68, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.12977600097656, "t": 70.7454833984375, "r": 547.25427, "b": 104.7872085571289, "coord_origin": "TOPLEFT"}, "confidence": 0.9774090051651001, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26."}, {"label": "caption", "id": 3, "page_no": 68, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.95867919921875, "t": 241.98797607421875, "r": 457.0142822265625, "b": 251.3716278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9472981095314026, "cells": [{"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 4, "page_no": 68, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.82858276367188, "t": 267.8819274902344, "r": 534.23877, "b": 290.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9716678857803345, "cells": [{"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable."}, {"label": "caption", "id": 5, "page_no": 68, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.15591430664062, "t": 578.5726318359375, "r": 540.3552856445312, "b": 588.1502075195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9472869038581848, "cells": [{"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable"}, {"label": "picture", "id": 6, "page_no": 68, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.84584045410156, "t": 303.6470031738281, "r": 547.677978515625, "b": 576.6021118164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9863014221191406, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 68, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.07814025878906, "t": 119.34014892578125, "r": 346.28375244140625, "b": 239.5808868408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9723811745643616, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 68, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.12977600097656, "t": 70.7454833984375, "r": 547.25427, "b": 104.7872085571289, "coord_origin": "TOPLEFT"}, "confidence": 0.9774090051651001, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.08879, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now that the global variable is created, assign permissions to the variable so that it can be ", "bbox": {"l": 147.85187, "t": 71.50903000000005, "r": 547.25427, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 532.09296, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 210.36716, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-26.", "bbox": {"l": 210.17989, "t": 95.50867000000005, "r": 325.08237, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Now that the global variable is created, assign permissions to the variable so that it can be set by the program. Right-click the CUSTOMER_LOGIN_ID global variable and select Permissions , as shown in Figure 4-26."}, {"label": "caption", "id": 3, "page_no": 68, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.95867919921875, "t": 241.98797607421875, "r": 457.0142822265625, "b": 251.3716278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9472981095314026, "cells": [{"id": 7, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 242.83794999999998, "r": 456.94073, "b": 251.16290000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-26 Setting permissions on the CUSTOMER_LOGIN_ID global variable"}, {"label": "list_item", "id": 4, "page_no": 68, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.82858276367188, "t": 267.8819274902344, "r": 534.23877, "b": 290.46051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9716678857803345, "cells": [{"id": 8, "text": "4.", "bbox": {"l": 136.8, "t": 268.78857000000005, "r": 145.2059, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The Permissions window opens, as shown in Figure 4-27. Select ", "bbox": {"l": 148.00787, "t": 268.78857000000005, "r": 439.29123, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change", "bbox": {"l": 439.32007, "t": 268.78857000000005, "r": 476.15612999999996, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " authority for ", "bbox": {"l": 476.10034, "t": 268.78857000000005, "r": 534.23877, "b": 278.00158999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Webuser so that the application can set this global variable.", "bbox": {"l": 151.20016, "t": 280.78842, "r": 413.51169, "b": 290.0014, "coord_origin": "TOPLEFT"}}]}, "text": "4. The Permissions window opens, as shown in Figure 4-27. Select Change authority for Webuser so that the application can set this global variable."}, {"label": "caption", "id": 5, "page_no": 68, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.15591430664062, "t": 578.5726318359375, "r": 540.3552856445312, "b": 588.1502075195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9472869038581848, "cells": [{"id": 13, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable", "bbox": {"l": 136.8, "t": 579.49789, "r": 539.75073, "b": 587.82291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-27 Setting change permissions for Webuser on the CUSTOMER_LOGIN_ID global variable"}, {"label": "picture", "id": 6, "page_no": 68, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.84584045410156, "t": 303.6470031738281, "r": 547.677978515625, "b": 576.6021118164062, "coord_origin": "TOPLEFT"}, "confidence": 0.9863014221191406, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 68, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.07814025878906, "t": 119.34014892578125, "r": 346.28375244140625, "b": 239.5808868408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9723811745643616, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 68, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31678771972656, "t": 754.7354125976562, "r": 523.59357, "b": 764.0438232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9558536410331726, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 68, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.7046508789062, "t": 754.34130859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125332832336426, "cells": [{"id": 1, "text": "53", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "53"}]}}, {"page_no": 69, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.29161071777344, "t": 754.29296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131852984428406, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.33383178710938, "t": 754.6670532226562, "r": 334.42142, "b": 763.9429321289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9536429047584534, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.21206665039062, "t": 70.20098876953125, "r": 339.95895, "b": 83.59224700927734, "coord_origin": "TOPLEFT"}, "confidence": 0.9649859070777893, "cells": [{"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9742889404297, "t": 96.73395538330078, "r": 527.37946, "b": 106.9632339477539, "coord_origin": "TOPLEFT"}, "confidence": 0.9519023299217224, "cells": [{"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.758056640625, "t": 111.66974000000005, "r": 530.75983, "b": 148.32473754882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9718437194824219, "cells": [{"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.1620330810547, "t": 422.876953125, "r": 314.04541015625, "b": 432.17633056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444904327392578, "cells": [{"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.3912811279297, "t": 161.90283203125, "r": 467.3126220703125, "b": 420.1808166503906, "coord_origin": "TOPLEFT"}, "confidence": 0.9873494505882263, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 69, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29161071777344, "t": 754.29296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131852984428406, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "54"}, {"label": "page_footer", "id": 1, "page_no": 69, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33383178710938, "t": 754.6670532226562, "r": 334.42142, "b": 763.9429321289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9536429047584534, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 69, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.21206665039062, "t": 70.20098876953125, "r": 339.95895, "b": 83.59224700927734, "coord_origin": "TOPLEFT"}, "confidence": 0.9649859070777893, "cells": [{"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.5 Defining and creating row permissions"}, {"label": "text", "id": 3, "page_no": 69, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9742889404297, "t": 96.73395538330078, "r": 527.37946, "b": 106.9632339477539, "coord_origin": "TOPLEFT"}, "confidence": 0.9519023299217224, "cells": [{"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "You now ready to define the row permissions of the tables. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 69, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.758056640625, "t": 111.66974000000005, "r": 530.75983, "b": 148.32473754882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9718437194824219, "cells": [{"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Row Permissions , and select New \uf0ae Row Permission , as shown in Figure 4-28."}, {"label": "caption", "id": 5, "page_no": 69, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.1620330810547, "t": 422.876953125, "r": 314.04541015625, "b": 432.17633056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444904327392578, "cells": [{"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-28 Selecting new row permissions"}, {"label": "picture", "id": 6, "page_no": 69, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.3912811279297, "t": 161.90283203125, "r": 467.3126220703125, "b": 420.1808166503906, "coord_origin": "TOPLEFT"}, "confidence": 0.9873494505882263, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 69, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.21206665039062, "t": 70.20098876953125, "r": 339.95895, "b": 83.59224700927734, "coord_origin": "TOPLEFT"}, "confidence": 0.9649859070777893, "cells": [{"id": 2, "text": "4.3.5", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.008797, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Defining and creating row permissions", "bbox": {"l": 97.659912, "t": 71.33471999999995, "r": 339.95895, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.5 Defining and creating row permissions"}, {"label": "text", "id": 3, "page_no": 69, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9742889404297, "t": 96.73395538330078, "r": 527.37946, "b": 106.9632339477539, "coord_origin": "TOPLEFT"}, "confidence": 0.9519023299217224, "cells": [{"id": 4, "text": "You now ready to define the row permissions of the tables. Complete the following steps:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 527.37946, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "You now ready to define the row permissions of the tables. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 69, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.758056640625, "t": 111.66974000000005, "r": 530.75983, "b": 148.32473754882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9718437194824219, "cells": [{"id": 5, "text": "1.", "bbox": {"l": 136.8, "t": 114.52826000000005, "r": 145.19618, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "From the navigation pane of System i Navigator, click ", "bbox": {"l": 147.99492, "t": 114.52826000000005, "r": 388.58487, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Schemas", "bbox": {"l": 388.50015, "t": 114.52826000000005, "r": 432.27634000000006, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\uf0ae", "bbox": {"l": 435.06015, "t": 111.66974000000005, "r": 444.89066, "b": 123.86077999999986, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "BANK_SCHEMA", "bbox": {"l": 447.72031, "t": 114.52826000000005, "r": 525.15625, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", ", "bbox": {"l": 525.12048, "t": 114.52826000000005, "r": 530.75983, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "right-click ", "bbox": {"l": 151.2002, "t": 126.52808000000005, "r": 196.0929, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Row Permissions", "bbox": {"l": 196.13971, "t": 126.52808000000005, "r": 278.99695, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ", and select", "bbox": {"l": 278.81967, "t": 126.52808000000005, "r": 329.97723, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " New", "bbox": {"l": 329.93936, "t": 126.52808000000005, "r": 353.22482, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 355.61923, "t": 123.66956000000016, "r": 365.44974, "b": 135.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " Row Permission", "bbox": {"l": 365.51947, "t": 126.52808000000005, "r": 445.6078499999999, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", as shown in ", "bbox": {"l": 445.5590199999999, "t": 126.52808000000005, "r": 506.52917, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-28.", "bbox": {"l": 151.19818, "t": 138.52788999999996, "r": 205.13155, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Row Permissions , and select New \uf0ae Row Permission , as shown in Figure 4-28."}, {"label": "caption", "id": 5, "page_no": 69, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.1620330810547, "t": 422.876953125, "r": 314.04541015625, "b": 432.17633056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444904327392578, "cells": [{"id": 19, "text": "Figure 4-28 Selecting new row permissions", "bbox": {"l": 136.8, "t": 423.31799, "r": 313.46371, "b": 431.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-28 Selecting new row permissions"}, {"label": "picture", "id": 6, "page_no": 69, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.3912811279297, "t": 161.90283203125, "r": 467.3126220703125, "b": 420.1808166503906, "coord_origin": "TOPLEFT"}, "confidence": 0.9873494505882263, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 69, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29161071777344, "t": 754.29296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131852984428406, "cells": [{"id": 0, "text": "54 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "54"}, {"label": "page_footer", "id": 1, "page_no": 69, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33383178710938, "t": 754.6670532226562, "r": 334.42142, "b": 763.9429321289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9536429047584534, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 70, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.24986267089844, "t": 754.7130737304688, "r": 523.59357, "b": 764.043212890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545792937278748, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6702270507812, "t": 754.3177490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9093314409255981, "cells": [{"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.03018188476562, "t": 70.50949096679688, "r": 544.50513, "b": 104.85425567626953, "coord_origin": "TOPLEFT"}, "confidence": 0.9784817099571228, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.3019256591797, "t": 111.28250122070312, "r": 542.18152, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9687250852584839, "cells": [{"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.4884796142578, "t": 140.4087677001953, "r": 537.78314, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983960747718811, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.66030883789062, "t": 217.47354125976562, "r": 381.32654, "b": 227.79330444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9481797814369202, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 151.00958251953125, "t": 234.5278778076172, "r": 314.76883, "b": 245.11355590820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7769520878791809, "cells": [{"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 135.95968627929688, "t": 529.3792114257812, "r": 384.6536865234375, "b": 538.73486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.947584867477417, "cells": [{"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.22802734375, "t": 258.7868347167969, "r": 507.9937438964844, "b": 526.5271606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9844093918800354, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 70, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.24986267089844, "t": 754.7130737304688, "r": 523.59357, "b": 764.043212890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545792937278748, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 70, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6702270507812, "t": 754.3177490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9093314409255981, "cells": [{"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "55"}, {"label": "list_item", "id": 2, "page_no": 70, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03018188476562, "t": 70.50949096679688, "r": 544.50513, "b": 104.85425567626953, "coord_origin": "TOPLEFT"}, "confidence": 0.9784817099571228, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 70, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.3019256591797, "t": 111.28250122070312, "r": 542.18152, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9687250852584839, "cells": [{"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 70, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.4884796142578, "t": 140.4087677001953, "r": 537.78314, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983960747718811, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 70, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.66030883789062, "t": 217.47354125976562, "r": 381.32654, "b": 227.79330444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9481797814369202, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 70, "cluster": {"id": 6, "label": "text", "bbox": {"l": 151.00958251953125, "t": 234.5278778076172, "r": 314.76883, "b": 245.11355590820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7769520878791809, "cells": [{"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 70, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.95968627929688, "t": 529.3792114257812, "r": 384.6536865234375, "b": 538.73486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.947584867477417, "cells": [{"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-29 New row permissions on the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 70, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.22802734375, "t": 258.7868347167969, "r": 507.9937438964844, "b": 526.5271606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9844093918800354, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 70, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03018188476562, "t": 70.50949096679688, "r": 544.50513, "b": 104.85425567626953, "coord_origin": "TOPLEFT"}, "confidence": 0.9784817099571228, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18062, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Row Permission window opens, as shown in Figure 4-29. Enter the information ", "bbox": {"l": 147.97429, "t": 71.50903000000005, "r": 544.50513, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "regarding the row permissions on the CUSTOMERS table. This row permission defines ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 538.36682, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "what is established in the following policy:", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 334.9458, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The New Row Permission window opens, as shown in Figure 4-29. Enter the information regarding the row permissions on the CUSTOMERS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 70, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.3019256591797, "t": 111.28250122070312, "r": 542.18152, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9687250852584839, "cells": [{"id": 6, "text": "-", "bbox": {"l": 152.03938, "t": 112.48845999999992, "r": 157.60901, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the ", "bbox": {"l": 165.59892, "t": 112.48845999999992, "r": 542.18152, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "rows.", "bbox": {"l": 165.59892, "t": 124.48828000000003, "r": 189.17128, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 70, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.4884796142578, "t": 140.4087677001953, "r": 537.78314, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983960747718811, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03938, "t": 141.52783, "r": 157.61002, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59894, "t": 141.52783, "r": 534.40277, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 527.79926, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59892, "t": 165.52747, "r": 513.83038, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 537.78314, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 460.90103, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 456.26354999999995, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 70, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.66030883789062, "t": 217.47354125976562, "r": 381.32654, "b": 227.79330444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9481797814369202, "cells": [{"id": 16, "text": "-", "bbox": {"l": 152.03937, "t": 218.50671, "r": 157.61099, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 218.50671, "r": 381.32654, "b": 227.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 70, "cluster": {"id": 6, "label": "text", "bbox": {"l": 151.00958251953125, "t": 234.5278778076172, "r": 314.76883, "b": 245.11355590820312, "coord_origin": "TOPLEFT"}, "confidence": 0.7769520878791809, "cells": [{"id": 18, "text": "Select the ", "bbox": {"l": 151.19974, "t": 235.48650999999995, "r": 198.41113, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Enabled", "bbox": {"l": 198.4201, "t": 235.48650999999995, "r": 237.21332, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 235.48650999999995, "r": 297.04803, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "OK", "bbox": {"l": 297.00018, "t": 235.48650999999995, "r": 311.92224, "b": 244.69952, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ".", "bbox": {"l": 311.99994, "t": 235.48650999999995, "r": 314.76883, "b": 244.69952, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 70, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.95968627929688, "t": 529.3792114257812, "r": 384.6536865234375, "b": 538.73486328125, "coord_origin": "TOPLEFT"}, "confidence": 0.947584867477417, "cells": [{"id": 23, "text": "Figure 4-29 New row permissions on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 529.9379, "r": 384.29547, "b": 538.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-29 New row permissions on the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 70, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.22802734375, "t": 258.7868347167969, "r": 507.9937438964844, "b": 526.5271606445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9844093918800354, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 70, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.24986267089844, "t": 754.7130737304688, "r": 523.59357, "b": 764.043212890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545792937278748, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 70, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6702270507812, "t": 754.3177490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9093314409255981, "cells": [{"id": 1, "text": "55", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "55"}]}}, {"page_no": 71, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.20973205566406, "t": 754.2777099609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9139277338981628, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28527069091797, "t": 754.64208984375, "r": 334.42142, "b": 763.944091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527794718742371, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.20513916015625, "t": 70.595458984375, "r": 543.83636, "b": 117.18975830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9810321927070618, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.44004821777344, "t": 123.32445526123047, "r": 539.45398, "b": 145.70074, "coord_origin": "TOPLEFT"}, "confidence": 0.9677587151527405, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.2493438720703, "t": 152.3936767578125, "r": 537.75769, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9846922159194946, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.43359375, "t": 229.4423370361328, "r": 381.32697, "b": 239.7835235595703, "coord_origin": "TOPLEFT"}, "confidence": 0.9531306028366089, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.8797149658203, "t": 246.4891815185547, "r": 314.76926, "b": 256.9587707519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8528881072998047, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.3364486694336, "t": 584.8099365234375, "r": 305.99822998046875, "b": 594.063, "coord_origin": "TOPLEFT"}, "confidence": 0.9497343897819519, "cells": [{"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 63.957679748535156, "t": 270.48822021484375, "r": 540.6087646484375, "b": 582.9116821289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9854897260665894, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 71, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20973205566406, "t": 754.2777099609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9139277338981628, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "56"}, {"label": "page_footer", "id": 1, "page_no": 71, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28527069091797, "t": 754.64208984375, "r": 334.42142, "b": 763.944091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527794718742371, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 71, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20513916015625, "t": 70.595458984375, "r": 543.83636, "b": 117.18975830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9810321927070618, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 71, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.44004821777344, "t": 123.32445526123047, "r": 539.45398, "b": 145.70074, "coord_origin": "TOPLEFT"}, "confidence": 0.9677587151527405, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 71, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2493438720703, "t": 152.3936767578125, "r": 537.75769, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9846922159194946, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 71, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.43359375, "t": 229.4423370361328, "r": 381.32697, "b": 239.7835235595703, "coord_origin": "TOPLEFT"}, "confidence": 0.9531306028366089, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 71, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.8797149658203, "t": 246.4891815185547, "r": 314.76926, "b": 256.9587707519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8528881072998047, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 71, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.3364486694336, "t": 584.8099365234375, "r": 305.99822998046875, "b": 594.063, "coord_origin": "TOPLEFT"}, "confidence": 0.9497343897819519, "cells": [{"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-30 New row permissions on the ACCOUNTS table"}, {"label": "picture", "id": 8, "page_no": 71, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.957679748535156, "t": 270.48822021484375, "r": 540.6087646484375, "b": 582.9116821289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9854897260665894, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 71, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20513916015625, "t": 70.595458984375, "r": 543.83636, "b": 117.18975830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9810321927070618, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.16809, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions for the ACCOUNTS table. The New Row Permission window ", "bbox": {"l": 147.95744, "t": 71.50867000000005, "r": 543.83636, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "opens, as shown in Figure 4-30. Enter the information regarding the row permissions on ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.03442, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the ACCOUNTS table. This row permission defines what is established in the following ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 535.38037, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "policy:", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 179.53438, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Define the row permissions for the ACCOUNTS table. The New Row Permission window opens, as shown in Figure 4-30. Enter the information regarding the row permissions on the ACCOUNTS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 71, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.44004821777344, "t": 123.32445526123047, "r": 539.45398, "b": 145.70074, "coord_origin": "TOPLEFT"}, "confidence": 0.9677587151527405, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03979, "t": 124.48792000000003, "r": 157.61043, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the ", "bbox": {"l": 165.59935, "t": 124.48792000000003, "r": 539.45398, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59933, "t": 136.48773000000006, "r": 189.17169, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN and TELLER group profiles can see all the rows."}, {"label": "list_item", "id": 4, "page_no": 71, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2493438720703, "t": 152.3936767578125, "r": 537.75769, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9846922159194946, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03979, "t": 153.52728000000002, "r": 157.61043, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59935, "t": 153.52728000000002, "r": 534.36139, "b": 162.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59933, "t": 165.52710000000002, "r": 527.79968, "b": 174.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59933, "t": 177.52692000000002, "r": 513.83081, "b": 186.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59933, "t": 189.52673000000004, "r": 537.75769, "b": 198.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59933, "t": 201.52655000000004, "r": 460.90145999999993, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59933, "t": 213.52637000000004, "r": 456.26398, "b": 222.73937999999998, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 71, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.43359375, "t": 229.4423370361328, "r": 381.32697, "b": 239.7835235595703, "coord_origin": "TOPLEFT"}, "confidence": 0.9531306028366089, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03979, "t": 230.50616000000002, "r": 157.61142, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59933, "t": 230.50616000000002, "r": 381.32697, "b": 239.71918000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 71, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.8797149658203, "t": 246.4891815185547, "r": 314.76926, "b": 256.9587707519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8528881072998047, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.20016, "t": 247.48595999999998, "r": 198.41156, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.42053, "t": 247.48595999999998, "r": 237.21375, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18086000000002, "t": 247.48595999999998, "r": 297.04846, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00061, "t": 247.48595999999998, "r": 311.92267, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 312.00037, "t": 247.48595999999998, "r": 314.76926, "b": 256.69897000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 71, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.3364486694336, "t": 584.8099365234375, "r": 305.99822998046875, "b": 594.063, "coord_origin": "TOPLEFT"}, "confidence": 0.9497343897819519, "cells": [{"id": 24, "text": "Figure 4-30 New row permissions on the ACCOUNTS table", "bbox": {"l": 64.800003, "t": 585.7379900000001, "r": 305.46814, "b": 594.063, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-30 New row permissions on the ACCOUNTS table"}, {"label": "picture", "id": 8, "page_no": 71, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.957679748535156, "t": 270.48822021484375, "r": 540.6087646484375, "b": 582.9116821289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9854897260665894, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 71, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20973205566406, "t": 754.2777099609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9139277338981628, "cells": [{"id": 0, "text": "56 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "56"}, {"label": "page_footer", "id": 1, "page_no": 71, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28527069091797, "t": 754.64208984375, "r": 334.42142, "b": 763.944091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527794718742371, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 72, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.22891235351562, "t": 754.7304077148438, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545765519142151, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5846557617188, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9055094718933105, "cells": [{"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.74258422851562, "t": 70.44811248779297, "r": 529.90491, "b": 116.96112823486328, "coord_origin": "TOPLEFT"}, "confidence": 0.9810266494750977, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.45989990234375, "t": 123.25712585449219, "r": 547.22925, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9677688479423523, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.29940795898438, "t": 152.36669921875, "r": 537.78314, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983658492565155, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.38229370117188, "t": 306.10906982421875, "r": 381.32654, "b": 316.44915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9394587874412537, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.89027404785156, "t": 322.4906311035156, "r": 314.76883, "b": 333.08697509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.7668123245239258, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.22490692138672, "t": 713.5319213867188, "r": 325.5702819824219, "b": 722.9600830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502029418945312, "cells": [{"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 170.69351196289062, "t": 240.3377685546875, "r": 533.39197, "b": 286.7464904785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9755160808563232, "cells": [{"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 63.73027801513672, "t": 346.8805236816406, "r": 535.9136352539062, "b": 711.4491577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9856986403465271, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 72, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.22891235351562, "t": 754.7304077148438, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545765519142151, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 72, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5846557617188, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9055094718933105, "cells": [{"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "57"}, {"label": "list_item", "id": 2, "page_no": 72, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.74258422851562, "t": 70.44811248779297, "r": 529.90491, "b": 116.96112823486328, "coord_origin": "TOPLEFT"}, "confidence": 0.9810266494750977, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 72, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.45989990234375, "t": 123.25712585449219, "r": 547.22925, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9677688479423523, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows."}, {"label": "list_item", "id": 4, "page_no": 72, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.29940795898438, "t": 152.36669921875, "r": 537.78314, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983658492565155, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 72, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.38229370117188, "t": 306.10906982421875, "r": 381.32654, "b": 316.44915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9394587874412537, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 72, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.89027404785156, "t": 322.4906311035156, "r": 314.76883, "b": 333.08697509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.7668123245239258, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 72, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.22490692138672, "t": 713.5319213867188, "r": 325.5702819824219, "b": 722.9600830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502029418945312, "cells": [{"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table"}, {"label": "text", "id": 8, "page_no": 72, "cluster": {"id": 8, "label": "text", "bbox": {"l": 170.69351196289062, "t": 240.3377685546875, "r": 533.39197, "b": 286.7464904785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9755160808563232, "cells": [{"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}]}, "text": "Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored."}, {"label": "picture", "id": 9, "page_no": 72, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.73027801513672, "t": 346.8805236816406, "r": 535.9136352539062, "b": 711.4491577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9856986403465271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 72, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.74258422851562, "t": 70.44811248779297, "r": 529.90491, "b": 116.96112823486328, "coord_origin": "TOPLEFT"}, "confidence": 0.9810266494750977, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17957, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Define the row permissions on the TRANSACTIONS table. The New Row Permission ", "bbox": {"l": 147.9729, "t": 71.50903000000005, "r": 529.90491, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "window opens, as shown in Figure 4-31. Enter the information regarding the row ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 507.79965, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "permissions on the TRANSACTIONS table. This row permission defines what is ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 506.39526, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "established in the following policy:", "bbox": {"l": 151.19974, "t": 107.50847999999996, "r": 301.1127, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Define the row permissions on the TRANSACTIONS table. The New Row Permission window opens, as shown in Figure 4-31. Enter the information regarding the row permissions on the TRANSACTIONS table. This row permission defines what is established in the following policy:"}, {"label": "list_item", "id": 3, "page_no": 72, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.45989990234375, "t": 123.25712585449219, "r": 547.22925, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9677688479423523, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03937, "t": 124.48828000000003, "r": 157.60899, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the ", "bbox": {"l": 165.59891, "t": 124.48828000000003, "r": 547.22925, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "rows.", "bbox": {"l": 165.59891, "t": 136.48810000000003, "r": 189.17126, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to DBE, ADMIN, and TELLER group profiles can see all of the rows."}, {"label": "list_item", "id": 4, "page_no": 72, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.29940795898438, "t": 152.36669921875, "r": 537.78314, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.983658492565155, "cells": [{"id": 10, "text": "-", "bbox": {"l": 152.03937, "t": 153.52765, "r": 157.61, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER ", "bbox": {"l": 165.59892, "t": 153.52765, "r": 534.40277, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "user) can see only the rows that match their customer login ID. The login ID value ", "bbox": {"l": 165.59891, "t": 165.52747, "r": 527.79926, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "representing the online banking user is passed from the web application to the ", "bbox": {"l": 165.59891, "t": 177.52728000000002, "r": 513.83038, "b": 186.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "database by using the global variable CUSTOMER_LOGIN_ID. The permission rule ", "bbox": {"l": 165.59891, "t": 189.52710000000002, "r": 537.78314, "b": 198.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "uses a subquery to check whether the global variable matches the ", "bbox": {"l": 165.59891, "t": 201.52692000000002, "r": 460.90103, "b": 210.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CUSTOMER_LOGIN_ID column value in the CUSTOMERS table.", "bbox": {"l": 165.59891, "t": 213.52673000000004, "r": 456.26354999999995, "b": 222.73974999999996, "coord_origin": "TOPLEFT"}}]}, "text": "-User profiles that belong to the CUSTOMERS group profile (that is, the WEBUSER user) can see only the rows that match their customer login ID. The login ID value representing the online banking user is passed from the web application to the database by using the global variable CUSTOMER_LOGIN_ID. The permission rule uses a subquery to check whether the global variable matches the CUSTOMER_LOGIN_ID column value in the CUSTOMERS table."}, {"label": "list_item", "id": 5, "page_no": 72, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.38229370117188, "t": 306.10906982421875, "r": 381.32654, "b": 316.44915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9394587874412537, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03937, "t": 306.52628, "r": 157.61099, "b": 315.73926, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Any other user profile cannot see any rows at all.", "bbox": {"l": 165.59891, "t": 306.52628, "r": 381.32654, "b": 315.73926, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other user profile cannot see any rows at all."}, {"label": "text", "id": 6, "page_no": 72, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.89027404785156, "t": 322.4906311035156, "r": 314.76883, "b": 333.08697509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.7668123245239258, "cells": [{"id": 19, "text": "Select the ", "bbox": {"l": 151.19974, "t": 323.50607, "r": 198.41113, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Enabled", "bbox": {"l": 198.4201, "t": 323.50607, "r": 237.21332, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": " option. Click ", "bbox": {"l": 237.18044, "t": 323.50607, "r": 297.04803, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OK", "bbox": {"l": 297.00018, "t": 323.50607, "r": 311.92224, "b": 332.71906, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ".", "bbox": {"l": 311.99994, "t": 323.50607, "r": 314.76883, "b": 332.71906, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 72, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.22490692138672, "t": 713.5319213867188, "r": 325.5702819824219, "b": 722.9600830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9502029418945312, "cells": [{"id": 24, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table", "bbox": {"l": 64.800003, "t": 714.318001, "r": 325.42834, "b": 722.642998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-31 New row permissions on the TRANSACTIONS table"}, {"label": "text", "id": 8, "page_no": 72, "cluster": {"id": 8, "label": "text", "bbox": {"l": 170.69351196289062, "t": 240.3377685546875, "r": 533.39197, "b": 286.7464904785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9755160808563232, "cells": [{"id": 25, "text": "Note:", "bbox": {"l": 171.60001, "t": 241.48870999999997, "r": 197.13246, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " You must join back to ACCOUNTS and then to CUSTOMERS by using a ", "bbox": {"l": 197.16035, "t": 241.48870999999997, "r": 522.27563, "b": 250.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. ", "bbox": {"l": 171.60001, "t": 253.48852999999997, "r": 531.92487, "b": 262.70154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Also, if the row permission or column mask rule text references another table with ", "bbox": {"l": 171.60001, "t": 265.48834, "r": 533.39197, "b": 274.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC defined, the RCAC for the referenced table is ignored.", "bbox": {"l": 171.60001, "t": 277.48816, "r": 439.61749, "b": 286.70117, "coord_origin": "TOPLEFT"}}]}, "text": "Note: You must join back to ACCOUNTS and then to CUSTOMERS by using a subquery to check whether the global variable matches CUSTOMER_LOGIN_ID. Also, if the row permission or column mask rule text references another table with RCAC defined, the RCAC for the referenced table is ignored."}, {"label": "picture", "id": 9, "page_no": 72, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.73027801513672, "t": 346.8805236816406, "r": 535.9136352539062, "b": 711.4491577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9856986403465271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 72, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.22891235351562, "t": 754.7304077148438, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9545765519142151, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 72, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5846557617188, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9055094718933105, "cells": [{"id": 1, "text": "57", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "57"}]}}, {"page_no": 73, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.232666015625, "t": 754.386474609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160420298576355, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35807037353516, "t": 754.7005615234375, "r": 334.42142, "b": 763.9410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541155695915222, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.36386108398438, "t": 70.54908752441406, "r": 521.19122, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9746115207672119, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.27239227294922, "t": 274.6299133300781, "r": 292.91876220703125, "b": 283.9879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9361065626144409, "cells": [{"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.21476745605469, "t": 303.8726806640625, "r": 327.40588, "b": 317.2160339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9644060134887695, "cells": [{"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.03562927246094, "t": 329.9996337890625, "r": 479.42001000000005, "b": 340.2921142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9330124855041504, "cells": [{"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 344.64999, "r": 523.07068, "b": 381.08123779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9756982922554016, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.1403350830078, "t": 571.737060546875, "r": 287.95941162109375, "b": 581.0671997070312, "coord_origin": "TOPLEFT"}, "confidence": 0.947037935256958, "cells": [{"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.1191864013672, "t": 395.1215515136719, "r": 456.9282531738281, "b": 568.6239013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855613112449646, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 64.10432434082031, "t": 119.99431610107422, "r": 545.318603515625, "b": 271.414306640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9836570024490356, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 73, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.232666015625, "t": 754.386474609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160420298576355, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "58"}, {"label": "page_footer", "id": 1, "page_no": 73, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35807037353516, "t": 754.7005615234375, "r": 334.42142, "b": 763.9410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541155695915222, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 73, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.36386108398438, "t": 70.54908752441406, "r": 521.19122, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9746115207672119, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled."}, {"label": "caption", "id": 3, "page_no": 73, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27239227294922, "t": 274.6299133300781, "r": 292.91876220703125, "b": 283.9879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9361065626144409, "cells": [{"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 73, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21476745605469, "t": 303.8726806640625, "r": 327.40588, "b": 317.2160339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9644060134887695, "cells": [{"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.6 Defining and creating column masks"}, {"label": "text", "id": 5, "page_no": 73, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.03562927246094, "t": 329.9996337890625, "r": 479.42001000000005, "b": 340.2921142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9330124855041504, "cells": [{"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}]}, "text": "This section defines the masks on the columns. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 73, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 344.64999, "r": 523.07068, "b": 381.08123779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9756982922554016, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the main navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Column Masks , and select New \uf0ae Column Mask , as shown in Figure 4-33."}, {"label": "caption", "id": 7, "page_no": 73, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1403350830078, "t": 571.737060546875, "r": 287.95941162109375, "b": 581.0671997070312, "coord_origin": "TOPLEFT"}, "confidence": 0.947037935256958, "cells": [{"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-33 Creating a column mask"}, {"label": "picture", "id": 8, "page_no": 73, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.1191864013672, "t": 395.1215515136719, "r": 456.9282531738281, "b": 568.6239013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855613112449646, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 73, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.10432434082031, "t": 119.99431610107422, "r": 545.318603515625, "b": 271.414306640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9836570024490356, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 73, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.36386108398438, "t": 70.54908752441406, "r": 521.19122, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9746115207672119, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15915, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the row permissions are enabled, from System i Navigator, click ", "bbox": {"l": 147.94556, "t": 71.50867000000005, "r": 493.84805000000006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row ", "bbox": {"l": 493.80023, "t": 71.50867000000005, "r": 517.62854, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Permissions", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 210.36757, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-32. The three row permissions are created and ", "bbox": {"l": 210.1803, "t": 83.50847999999996, "r": 521.19122, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "enabled.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 189.4117, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "5. To verify that the row permissions are enabled, from System i Navigator, click Row Permissions , as shown in Figure 4-32. The three row permissions are created and enabled."}, {"label": "caption", "id": 3, "page_no": 73, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27239227294922, "t": 274.6299133300781, "r": 292.91876220703125, "b": 283.9879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9361065626144409, "cells": [{"id": 8, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 275.53801999999996, "r": 292.52338, "b": 283.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-32 List of row permissions on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 73, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.21476745605469, "t": 303.8726806640625, "r": 327.40588, "b": 317.2160339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9644060134887695, "cells": [{"id": 9, "text": "4.3.6", "bbox": {"l": 64.800003, "t": 304.37473, "r": 94.073502, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Defining and creating column masks", "bbox": {"l": 97.732674, "t": 304.37473, "r": 327.40588, "b": 316.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.6 Defining and creating column masks"}, {"label": "text", "id": 5, "page_no": 73, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.03562927246094, "t": 329.9996337890625, "r": 479.42001000000005, "b": 340.2921142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9330124855041504, "cells": [{"id": 11, "text": "This section defines the masks on the columns. Complete the following steps:", "bbox": {"l": 136.8, "t": 330.52872, "r": 479.42001000000005, "b": 339.7417, "coord_origin": "TOPLEFT"}}]}, "text": "This section defines the masks on the columns. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 73, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.79999, "t": 344.64999, "r": 523.07068, "b": 381.08123779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9756982922554016, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 347.50851, "r": 145.18799, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "From the main navigation pane of System i Navigator, click ", "bbox": {"l": 147.98398, "t": 347.50851, "r": 412.92996, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Schemas", "bbox": {"l": 412.92007, "t": 347.50851, "r": 456.69629000000003, "b": 356.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\uf0ae", "bbox": {"l": 459.48007, "t": 344.64999, "r": 469.31058, "b": 356.84103, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "BANK_SCHEMA", "bbox": {"l": 151.20013, "t": 359.50833, "r": 228.63610999999997, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ", right-click ", "bbox": {"l": 228.60028, "t": 359.50833, "r": 279.04767, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Column Masks", "bbox": {"l": 279.12039, "t": 359.50833, "r": 349.62723, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ", and select", "bbox": {"l": 349.50073, "t": 359.50833, "r": 400.5477, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " New", "bbox": {"l": 400.62042, "t": 359.50833, "r": 423.72662, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\uf0ae", "bbox": {"l": 426.54031, "t": 356.64980999999995, "r": 436.37082, "b": 368.84085, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Column Mask", "bbox": {"l": 439.20047000000005, "t": 359.50833, "r": 504.10678, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", as ", "bbox": {"l": 504.18050999999997, "t": 359.50833, "r": 523.07068, "b": 368.72131, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "shown in Figure 4-33.", "bbox": {"l": 151.2001, "t": 371.50815, "r": 247.20354, "b": 380.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. From the main navigation pane of System i Navigator, click Schemas \uf0ae BANK_SCHEMA , right-click Column Masks , and select New \uf0ae Column Mask , as shown in Figure 4-33."}, {"label": "caption", "id": 7, "page_no": 73, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1403350830078, "t": 571.737060546875, "r": 287.95941162109375, "b": 581.0671997070312, "coord_origin": "TOPLEFT"}, "confidence": 0.947037935256958, "cells": [{"id": 25, "text": "Figure 4-33 Creating a column mask", "bbox": {"l": 136.8, "t": 571.87799, "r": 287.181, "b": 580.203, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-33 Creating a column mask"}, {"label": "picture", "id": 8, "page_no": 73, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.1191864013672, "t": 395.1215515136719, "r": 456.9282531738281, "b": 568.6239013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9855613112449646, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 73, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.10432434082031, "t": 119.99431610107422, "r": 545.318603515625, "b": 271.414306640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9836570024490356, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 73, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.232666015625, "t": 754.386474609375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160420298576355, "cells": [{"id": 0, "text": "58 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "58"}, {"label": "page_footer", "id": 1, "page_no": 73, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35807037353516, "t": 754.7005615234375, "r": 334.42142, "b": 763.9410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541155695915222, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 74, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.23280334472656, "t": 754.7346801757812, "r": 523.59357, "b": 763.9798583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9574586153030396, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6565551757812, "t": 754.1910400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9153223633766174, "cells": [{"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.03579711914062, "t": 70.76680755615234, "r": 524.10217, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.935202956199646, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 151.32827758789062, "t": 99.3359375, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9387155175209045, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.2732391357422, "t": 111.13023376464844, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9359274506568909, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.39305114746094, "t": 123.64397430419922, "r": 531.30621, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9761620759963989, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.79855346679688, "t": 164.49195861816406, "r": 314.76685, "b": 175.1024627685547, "coord_origin": "TOPLEFT"}, "confidence": 0.7048681974411011, "cells": [{"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 135.8140106201172, "t": 604.765380859375, "r": 395.16131591796875, "b": 614.04291, "coord_origin": "TOPLEFT"}, "confidence": 0.9423272013664246, "cells": [{"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.26536560058594, "t": 630.8367919921875, "r": 522.03296, "b": 641.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.8807461857795715, "cells": [{"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.44378662109375, "t": 647.1741943359375, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}, "confidence": 0.9306973814964294, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.36248779296875, "t": 659.518798828125, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}, "confidence": 0.9286901354789734, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.4147491455078, "t": 671.4402465820312, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}, "confidence": 0.9449449777603149, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 151.27947998046875, "t": 683.0931396484375, "r": 379.591064453125, "b": 693.92086, "coord_origin": "TOPLEFT"}, "confidence": 0.924078106880188, "cells": [{"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 151.41717529296875, "t": 695.0255737304688, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}, "confidence": 0.9357948303222656, "cells": [{"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 151.33258056640625, "t": 707.4501953125, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}, "confidence": 0.9366948008537292, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 136.62161254882812, "t": 188.8601531982422, "r": 533.3434448242188, "b": 602.5858154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9852358102798462, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 74, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.23280334472656, "t": 754.7346801757812, "r": 523.59357, "b": 763.9798583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9574586153030396, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 74, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6565551757812, "t": 754.1910400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9153223633766174, "cells": [{"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "59"}, {"label": "list_item", "id": 2, "page_no": 74, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03579711914062, "t": 70.76680755615234, "r": 524.10217, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.935202956199646, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information:"}, {"label": "list_item", "id": 3, "page_no": 74, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.32827758789062, "t": 99.3359375, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9387155175209045, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the CUSTOMERS table on which to create the column mask."}, {"label": "list_item", "id": 4, "page_no": 74, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2732391357422, "t": 111.13023376464844, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9359274506568909, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the Column to mask; in this example, it is CUSTOMER_EMAIL."}, {"label": "list_item", "id": 5, "page_no": 74, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.39305114746094, "t": 123.64397430419922, "r": 531.30621, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9761620759963989, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****."}, {"label": "text", "id": 6, "page_no": 74, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.79855346679688, "t": 164.49195861816406, "r": 314.76685, "b": 175.1024627685547, "coord_origin": "TOPLEFT"}, "confidence": 0.7048681974411011, "cells": [{"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 74, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.8140106201172, "t": 604.765380859375, "r": 395.16131591796875, "b": 614.04291, "coord_origin": "TOPLEFT"}, "confidence": 0.9423272013664246, "cells": [{"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table"}, {"label": "list_item", "id": 8, "page_no": 74, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.26536560058594, "t": 630.8367919921875, "r": 522.03296, "b": 641.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.8807461857795715, "cells": [{"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}]}, "text": "3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns:"}, {"label": "list_item", "id": 9, "page_no": 74, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.44378662109375, "t": 647.1741943359375, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}, "confidence": 0.9306973814964294, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_DRIVERS_LICENSE_ON_CUSTOMERS"}, {"label": "list_item", "id": 10, "page_no": 74, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.36248779296875, "t": 659.518798828125, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}, "confidence": 0.9286901354789734, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_LOGIN_ID_ON_CUSTOMERS"}, {"label": "list_item", "id": 11, "page_no": 74, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4147491455078, "t": 671.4402465820312, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}, "confidence": 0.9449449777603149, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS"}, {"label": "list_item", "id": 12, "page_no": 74, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.27947998046875, "t": 683.0931396484375, "r": 379.591064453125, "b": 693.92086, "coord_origin": "TOPLEFT"}, "confidence": 0.924078106880188, "cells": [{"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_ACCOUNT_NUMBER_ON_ACCOUNTS"}, {"label": "list_item", "id": 13, "page_no": 74, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 151.41717529296875, "t": 695.0255737304688, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}, "confidence": 0.9357948303222656, "cells": [{"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ON_CUSTOMERS"}, {"label": "list_item", "id": 14, "page_no": 74, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 151.33258056640625, "t": 707.4501953125, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}, "confidence": 0.9366948008537292, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_TAX_ID_ON_CUSTOMERS"}, {"label": "picture", "id": 15, "page_no": 74, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.62161254882812, "t": 188.8601531982422, "r": 533.3434448242188, "b": 602.5858154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9852358102798462, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 74, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.03579711914062, "t": 70.76680755615234, "r": 524.10217, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.935202956199646, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.17424, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In the New Column Mask window, which is shown in Figure 4-34, enter the following ", "bbox": {"l": 147.96579, "t": 71.50903000000005, "r": 524.10217, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "information:", "bbox": {"l": 151.19876, "t": 83.50885000000017, "r": 203.38417, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. In the New Column Mask window, which is shown in Figure 4-34, enter the following information:"}, {"label": "list_item", "id": 3, "page_no": 74, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 151.32827758789062, "t": 99.3359375, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9387155175209045, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03839, "t": 100.48865, "r": 157.57317, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the CUSTOMERS table on which to create the column mask.", "bbox": {"l": 165.59793, "t": 100.48865, "r": 465.46960000000007, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the CUSTOMERS table on which to create the column mask."}, {"label": "list_item", "id": 4, "page_no": 74, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.2732391357422, "t": 111.13023376464844, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9359274506568909, "cells": [{"id": 7, "text": "-", "bbox": {"l": 152.03839, "t": 112.48845999999992, "r": 157.57416, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Select the Column to mask; in this example, it is CUSTOMER_EMAIL.", "bbox": {"l": 165.59793, "t": 112.48845999999992, "r": 475.19052000000005, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "-Select the Column to mask; in this example, it is CUSTOMER_EMAIL."}, {"label": "list_item", "id": 5, "page_no": 74, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.39305114746094, "t": 123.64397430419922, "r": 531.30621, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9761620759963989, "cells": [{"id": 9, "text": "-", "bbox": {"l": 152.03839, "t": 124.48828000000003, "r": 157.61002, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Define the masking logic depending on the rules that you want to enforce. In this ", "bbox": {"l": 165.59793, "t": 124.48828000000003, "r": 522.83429, "b": 133.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "example, either the ADMIN or CUSTOMER group profiles can see the entire email ", "bbox": {"l": 165.59793, "t": 136.48810000000003, "r": 531.30621, "b": 145.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "address; otherwise, it is masked to ****@****.", "bbox": {"l": 165.59793, "t": 148.48792000000003, "r": 365.33081, "b": 157.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "-Define the masking logic depending on the rules that you want to enforce. In this example, either the ADMIN or CUSTOMER group profiles can see the entire email address; otherwise, it is masked to ****@****."}, {"label": "text", "id": 6, "page_no": 74, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.79855346679688, "t": 164.49195861816406, "r": 314.76685, "b": 175.1024627685547, "coord_origin": "TOPLEFT"}, "confidence": 0.7048681974411011, "cells": [{"id": 13, "text": "Select the ", "bbox": {"l": 151.19775, "t": 165.52747, "r": 198.40915, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Enabled", "bbox": {"l": 198.41812, "t": 165.52747, "r": 237.21132999999998, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " option. Click ", "bbox": {"l": 237.17845, "t": 165.52747, "r": 297.04605, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 296.9982, "t": 165.52747, "r": 311.92026, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 311.99796, "t": 165.52747, "r": 314.76685, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Select the Enabled option. Click OK ."}, {"label": "caption", "id": 7, "page_no": 74, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 135.8140106201172, "t": 604.765380859375, "r": 395.16131591796875, "b": 614.04291, "coord_origin": "TOPLEFT"}, "confidence": 0.9423272013664246, "cells": [{"id": 18, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 605.7179, "r": 394.91101, "b": 614.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-34 Defining a column mask on the CUSTOMERS table"}, {"label": "list_item", "id": 8, "page_no": 74, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.26536560058594, "t": 630.8367919921875, "r": 522.03296, "b": 641.0337524414062, "coord_origin": "TOPLEFT"}, "confidence": 0.8807461857795715, "cells": [{"id": 19, "text": "3.", "bbox": {"l": 136.8, "t": 631.72862, "r": 145.18929, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Repeat steps 1 on page 58 and 2 to create column masks for the following columns:", "bbox": {"l": 147.9857, "t": 631.72862, "r": 522.03296, "b": 640.9416200000001, "coord_origin": "TOPLEFT"}}]}, "text": "3. Repeat steps 1 on page 58 and 2 to create column masks for the following columns:"}, {"label": "list_item", "id": 9, "page_no": 74, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.44378662109375, "t": 647.1741943359375, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}, "confidence": 0.9306973814964294, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.03979, "t": 648.70844, "r": 157.59648, "b": 657.92143, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MASK_DRIVERS_LICENSE_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 648.70844, "r": 381.77414, "b": 657.92143, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_DRIVERS_LICENSE_ON_CUSTOMERS"}, {"label": "list_item", "id": 10, "page_no": 74, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.36248779296875, "t": 659.518798828125, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}, "confidence": 0.9286901354789734, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03979, "t": 660.7082399999999, "r": 157.59549, "b": 669.92124, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MASK_LOGIN_ID_ON_CUSTOMERS", "bbox": {"l": 165.59935, "t": 660.7082399999999, "r": 335.7012, "b": 669.92124, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_LOGIN_ID_ON_CUSTOMERS"}, {"label": "list_item", "id": 11, "page_no": 74, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4147491455078, "t": 671.4402465820312, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}, "confidence": 0.9449449777603149, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03979, "t": 672.70805, "r": 157.59349, "b": 681.92105, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 672.70805, "r": 446.63971, "b": 681.92105, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS"}, {"label": "list_item", "id": 12, "page_no": 74, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.27947998046875, "t": 683.0931396484375, "r": 379.591064453125, "b": 693.92086, "coord_origin": "TOPLEFT"}, "confidence": 0.924078106880188, "cells": [{"id": 27, "text": "-", "bbox": {"l": 152.03979, "t": 684.70786, "r": 157.59747, "b": 693.92086, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "MASK_ACCOUNT_NUMBER_ON_ACCOUNTS", "bbox": {"l": 165.59933, "t": 684.70786, "r": 379.32303, "b": 693.92086, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_ACCOUNT_NUMBER_ON_ACCOUNTS"}, {"label": "list_item", "id": 13, "page_no": 74, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 151.41717529296875, "t": 695.0255737304688, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}, "confidence": 0.9357948303222656, "cells": [{"id": 29, "text": "-", "bbox": {"l": 152.03979, "t": 696.707664, "r": 157.59349, "b": 705.92067, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "MASK_SECURITY_QUESTION_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 696.707664, "r": 397.17035, "b": 705.92067, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_SECURITY_QUESTION_ON_CUSTOMERS"}, {"label": "list_item", "id": 14, "page_no": 74, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 151.33258056640625, "t": 707.4501953125, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}, "confidence": 0.9366948008537292, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03979, "t": 708.707474, "r": 157.59747, "b": 717.920479, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "MASK_TAX_ID_ON_CUSTOMERS", "bbox": {"l": 165.59933, "t": 708.707474, "r": 322.77811, "b": 717.920479, "coord_origin": "TOPLEFT"}}]}, "text": "-MASK_TAX_ID_ON_CUSTOMERS"}, {"label": "picture", "id": 15, "page_no": 74, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 136.62161254882812, "t": 188.8601531982422, "r": 533.3434448242188, "b": 602.5858154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9852358102798462, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 74, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.23280334472656, "t": 754.7346801757812, "r": 523.59357, "b": 763.9798583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9574586153030396, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 74, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6565551757812, "t": 754.1910400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9153223633766174, "cells": [{"id": 1, "text": "59", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "59"}]}}, {"page_no": 75, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.13931274414062, "t": 754.37646484375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9181943535804749, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2583236694336, "t": 754.7027587890625, "r": 334.42142, "b": 763.9403686523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9538118243217468, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.86886596679688, "t": 70.40605926513672, "r": 525.70728, "b": 92.86236572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9647813439369202, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.10326385498047, "t": 183.41061401367188, "r": 285.1827087402344, "b": 192.7096710205078, "coord_origin": "TOPLEFT"}, "confidence": 0.9432595372200012, "cells": [{"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.0513916015625, "t": 212.59413146972656, "r": 433.79065, "b": 225.7198028564453, "coord_origin": "TOPLEFT"}, "confidence": 0.9636105895042419, "cells": [{"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.85455322265625, "t": 238.7532196044922, "r": 544.92688, "b": 284.9345397949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9866855144500732, "cells": [{"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.1099090576172, "t": 296.4962158203125, "r": 266.86069, "b": 307.0681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8199454545974731, "cells": [{"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.3522491455078, "t": 313.09881591796875, "r": 547.19568, "b": 347.6925048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9741182923316956, "cells": [{"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 135.78135681152344, "t": 471.4366455078125, "r": 334.3720397949219, "b": 480.8490295410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9464175701141357, "cells": [{"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.75648498535156, "t": 497.3858337402344, "r": 547.73962, "b": 519.6641845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9690989851951599, "cells": [{"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 64.25939178466797, "t": 602.9214477539062, "r": 221.74893188476562, "b": 612.18291, "coord_origin": "TOPLEFT"}, "confidence": 0.9495618343353271, "cells": [{"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 136.29519653320312, "t": 362.13775634765625, "r": 545.3217163085938, "b": 468.5462951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.983352780342102, "cells": []}, {"id": 12, "label": "picture", "bbox": {"l": 64.00347900390625, "t": 533.6920776367188, "r": 546.5211181640625, "b": 600.8970947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9819415807723999, "cells": []}, {"id": 13, "label": "picture", "bbox": {"l": 64.02095031738281, "t": 107.45484924316406, "r": 547.409912109375, "b": 180.8109893798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9703426361083984, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 75, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.13931274414062, "t": 754.37646484375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9181943535804749, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "60"}, {"label": "page_footer", "id": 1, "page_no": 75, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2583236694336, "t": 754.7027587890625, "r": 334.42142, "b": 763.9403686523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9538118243217468, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 75, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.86886596679688, "t": 70.40605926513672, "r": 525.70728, "b": 92.86236572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9647813439369202, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled."}, {"label": "caption", "id": 3, "page_no": 75, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.10326385498047, "t": 183.41061401367188, "r": 285.1827087402344, "b": 192.7096710205078, "coord_origin": "TOPLEFT"}, "confidence": 0.9432595372200012, "cells": [{"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-35 List of column masks on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 75, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.0513916015625, "t": 212.59413146972656, "r": 433.79065, "b": 225.7198028564453, "coord_origin": "TOPLEFT"}, "confidence": 0.9636105895042419, "cells": [{"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.7 Restricting the inserting and updating of masked data"}, {"label": "text", "id": 5, "page_no": 75, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85455322265625, "t": 238.7532196044922, "r": 544.92688, "b": 284.9345397949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9866855144500732, "cells": [{"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}]}, "text": "This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on page 108."}, {"label": "section_header", "id": 6, "page_no": 75, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.1099090576172, "t": 296.4962158203125, "r": 266.86069, "b": 307.0681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8199454545974731, "cells": [{"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 75, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.3522491455078, "t": 313.09881591796875, "r": 547.19568, "b": 347.6925048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9741182923316956, "cells": [{"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36"}, {"label": "caption", "id": 8, "page_no": 75, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.78135681152344, "t": 471.4366455078125, "r": 334.3720397949219, "b": 480.8490295410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9464175701141357, "cells": [{"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-36 Definition of the CUSTOMERS table"}, {"label": "list_item", "id": 9, "page_no": 75, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75648498535156, "t": 497.3858337402344, "r": 547.73962, "b": 519.6641845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9690989851951599, "cells": [{"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}]}, "text": "2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37."}, {"label": "caption", "id": 10, "page_no": 75, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.25939178466797, "t": 602.9214477539062, "r": 221.74893188476562, "b": 612.18291, "coord_origin": "TOPLEFT"}, "confidence": 0.9495618343353271, "cells": [{"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-37 Adding a check constraint"}, {"label": "picture", "id": 11, "page_no": 75, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.29519653320312, "t": 362.13775634765625, "r": 545.3217163085938, "b": 468.5462951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.983352780342102, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 75, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 64.00347900390625, "t": 533.6920776367188, "r": 546.5211181640625, "b": 600.8970947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9819415807723999, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 13, "page_no": 75, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 64.02095031738281, "t": 107.45484924316406, "r": 547.409912109375, "b": 180.8109893798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9703426361083984, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 75, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.86886596679688, "t": 70.40605926513672, "r": 525.70728, "b": 92.86236572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9647813439369202, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.15868, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To verify that the column masks are enabled, from System i Navigator, click ", "bbox": {"l": 147.94489, "t": 71.50867000000005, "r": 485.4787, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Column ", "bbox": {"l": 485.40002, "t": 71.50867000000005, "r": 525.39343, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Masks", "bbox": {"l": 151.2002, "t": 83.50847999999996, "r": 181.74052, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ", as shown in Figure 4-35. The seven column masks are created and enabled.", "bbox": {"l": 181.62003, "t": 83.50847999999996, "r": 525.70728, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. To verify that the column masks are enabled, from System i Navigator, click Column Masks , as shown in Figure 4-35. The seven column masks are created and enabled."}, {"label": "caption", "id": 3, "page_no": 75, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.10326385498047, "t": 183.41061401367188, "r": 285.1827087402344, "b": 192.7096710205078, "coord_origin": "TOPLEFT"}, "confidence": 0.9432595372200012, "cells": [{"id": 7, "text": "Figure 4-35 List of column masks on BANK_SCHEMA", "bbox": {"l": 64.800003, "t": 184.27801999999997, "r": 285.03, "b": 192.60297000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-35 List of column masks on BANK_SCHEMA"}, {"label": "section_header", "id": 4, "page_no": 75, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.0513916015625, "t": 212.59413146972656, "r": 433.79065, "b": 225.7198028564453, "coord_origin": "TOPLEFT"}, "confidence": 0.9636105895042419, "cells": [{"id": 8, "text": "4.3.7", "bbox": {"l": 64.800003, "t": 213.11469, "r": 93.985405, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Restricting the inserting and updating of masked data", "bbox": {"l": 97.633568, "t": 213.11469, "r": 433.79065, "b": 225.10271999999998, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.7 Restricting the inserting and updating of masked data"}, {"label": "text", "id": 5, "page_no": 75, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85455322265625, "t": 238.7532196044922, "r": 544.92688, "b": 284.9345397949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9866855144500732, "cells": [{"id": 10, "text": "This step defines the check constraints that support the column masks to make sure that on ", "bbox": {"l": 136.8, "t": 239.26868000000002, "r": 544.46484, "b": 248.48168999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "INSERTS or UPDATES, data is not written with a masked value. For more information about ", "bbox": {"l": 136.8, "t": 251.26849000000004, "r": 544.92688, "b": 260.48150999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on ", "bbox": {"l": 136.8, "t": 263.26831000000004, "r": 508.48523, "b": 272.48132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "page 108.", "bbox": {"l": 136.8, "t": 275.26813000000004, "r": 181.30827, "b": 284.48114, "coord_origin": "TOPLEFT"}}]}, "text": "This step defines the check constraints that support the column masks to make sure that on INSERTS or UPDATES, data is not written with a masked value. For more information about the propagation of masked data, see 6.8, \u201cAvoiding propagation of masked data\u201d on page 108."}, {"label": "section_header", "id": 6, "page_no": 75, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.1099090576172, "t": 296.4962158203125, "r": 266.86069, "b": 307.0681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.8199454545974731, "cells": [{"id": 14, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 297.2279700000001, "r": 266.86069, "b": 306.44095, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 7, "page_no": 75, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.3522491455078, "t": 313.09881591796875, "r": 547.19568, "b": 347.6925048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9741182923316956, "cells": [{"id": 15, "text": "1.", "bbox": {"l": 136.8, "t": 314.26755, "r": 145.1564, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. ", "bbox": {"l": 147.94186, "t": 314.26755, "r": 547.19568, "b": 323.48053, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "From the navigation pane of System i Navigator, right-click the ", "bbox": {"l": 151.20016, "t": 326.26736, "r": 428.14206, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CUSTOMERS ", "bbox": {"l": 428.10013, "t": 326.26736, "r": 494.30425999999994, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table and ", "bbox": {"l": 494.34009, "t": 326.26736, "r": 538.0177, "b": 335.48035, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "select ", "bbox": {"l": 151.20013, "t": 338.26718, "r": 180.07518, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Definition", "bbox": {"l": 180.06023, "t": 338.26718, "r": 226.23678999999998, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown Figure 4-36", "bbox": {"l": 226.14017, "t": 338.26718, "r": 327.7511, "b": 347.48016000000007, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a check constraint on the column CUSTOMER_EMAIL in the CUSTOMERS table. From the navigation pane of System i Navigator, right-click the CUSTOMERS table and select Definition , as shown Figure 4-36"}, {"label": "caption", "id": 8, "page_no": 75, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 135.78135681152344, "t": 471.4366455078125, "r": 334.3720397949219, "b": 480.8490295410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9464175701141357, "cells": [{"id": 23, "text": "Figure 4-36 Definition of the CUSTOMERS table", "bbox": {"l": 136.8, "t": 472.09799, "r": 334.01611, "b": 480.423, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-36 Definition of the CUSTOMERS table"}, {"label": "list_item", "id": 9, "page_no": 75, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.75648498535156, "t": 497.3858337402344, "r": 547.73962, "b": 519.6641845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9690989851951599, "cells": [{"id": 24, "text": "2.", "bbox": {"l": 136.8, "t": 498.04874, "r": 145.07706, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "From the CUSTOMERS definition window, click the ", "bbox": {"l": 147.83607, "t": 498.04874, "r": 376.15961, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Check Constraints", "bbox": {"l": 376.08002, "t": 498.04874, "r": 463.7648899999999, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": " tab and click ", "bbox": {"l": 463.73996, "t": 498.04874, "r": 522.76489, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Add", "bbox": {"l": 522.77985, "t": 498.04874, "r": 542.0744, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", ", "bbox": {"l": 542.10028, "t": 498.04874, "r": 547.73962, "b": 507.26172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "as shown in Figure 4-37.", "bbox": {"l": 151.20013, "t": 510.04855, "r": 260.45734, "b": 519.26154, "coord_origin": "TOPLEFT"}}]}, "text": "2. From the CUSTOMERS definition window, click the Check Constraints tab and click Add , as shown in Figure 4-37."}, {"label": "caption", "id": 10, "page_no": 75, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.25939178466797, "t": 602.9214477539062, "r": 221.74893188476562, "b": 612.18291, "coord_origin": "TOPLEFT"}, "confidence": 0.9495618343353271, "cells": [{"id": 31, "text": "Figure 4-37 Adding a check constraint", "bbox": {"l": 64.800003, "t": 603.85789, "r": 220.9212, "b": 612.18291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-37 Adding a check constraint"}, {"label": "picture", "id": 11, "page_no": 75, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.29519653320312, "t": 362.13775634765625, "r": 545.3217163085938, "b": 468.5462951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.983352780342102, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 75, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 64.00347900390625, "t": 533.6920776367188, "r": 546.5211181640625, "b": 600.8970947265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9819415807723999, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 13, "page_no": 75, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 64.02095031738281, "t": 107.45484924316406, "r": 547.409912109375, "b": 180.8109893798828, "coord_origin": "TOPLEFT"}, "confidence": 0.9703426361083984, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 75, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.13931274414062, "t": 754.37646484375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9181943535804749, "cells": [{"id": 0, "text": "60 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "60"}, {"label": "page_footer", "id": 1, "page_no": 75, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2583236694336, "t": 754.7027587890625, "r": 334.42142, "b": 763.9403686523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9538118243217468, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 76, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.33963012695312, "t": 754.6822509765625, "r": 523.59357, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9542582035064697, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6194458007812, "t": 754.259521484375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9045737385749817, "cells": [{"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.19448852539062, "t": 70.60295867919922, "r": 515.81549, "b": 92.99156951904297, "coord_origin": "TOPLEFT"}, "confidence": 0.9727184176445007, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 150.47923278808594, "t": 99.40367889404297, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9255325794219971, "cells": [{"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 150.597412109375, "t": 116.41293334960938, "r": 541.59985, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9738664627075195, "cells": [{"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.6071319580078, "t": 145.43560791015625, "r": 511.92703, "b": 155.8599853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9509996175765991, "cells": [{"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 64.2974853515625, "t": 653.2451782226562, "r": 362.4355773925781, "b": 662.75830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9486740827560425, "cells": [{"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 63.89818572998047, "t": 169.34371948242188, "r": 543.365966796875, "b": 650.5548095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851900935173035, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 76, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.33963012695312, "t": 754.6822509765625, "r": 523.59357, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9542582035064697, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 76, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6194458007812, "t": 754.259521484375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9045737385749817, "cells": [{"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "61"}, {"label": "list_item", "id": 2, "page_no": 76, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.19448852539062, "t": 70.60295867919922, "r": 515.81549, "b": 92.99156951904297, "coord_origin": "TOPLEFT"}, "confidence": 0.9727184176445007, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 76, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.47923278808594, "t": 99.40367889404297, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9255325794219971, "cells": [{"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "a. Select the CUSTOMER_EMAIL column."}, {"label": "list_item", "id": 4, "page_no": 76, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 150.597412109375, "t": 116.41293334960938, "r": 541.59985, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9738664627075195, "cells": [{"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value."}, {"label": "list_item", "id": 5, "page_no": 76, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.6071319580078, "t": 145.43560791015625, "r": 511.92703, "b": 155.8599853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9509996175765991, "cells": [{"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}]}, "text": "c. Select the On update violation, preserve column value option and click OK ."}, {"label": "caption", "id": 6, "page_no": 76, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.2974853515625, "t": 653.2451782226562, "r": 362.4355773925781, "b": 662.75830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9486740827560425, "cells": [{"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table"}, {"label": "picture", "id": 7, "page_no": 76, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.89818572998047, "t": 169.34371948242188, "r": 543.365966796875, "b": 650.5548095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851900935173035, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 76, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.19448852539062, "t": 70.60295867919922, "r": 515.81549, "b": 92.99156951904297, "coord_origin": "TOPLEFT"}, "confidence": 0.9727184176445007, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.18819, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The New Check Constraint window opens, as shown in Figure 4-38. Complete the ", "bbox": {"l": 147.98439, "t": 71.50903000000005, "r": 515.81549, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "following steps:", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 219.05225, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The New Check Constraint window opens, as shown in Figure 4-38. Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 76, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.47923278808594, "t": 99.40367889404297, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9255325794219971, "cells": [{"id": 5, "text": "a.", "bbox": {"l": 151.19975, "t": 100.48865, "r": 160.00291, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Select the ", "bbox": {"l": 162.9373, "t": 100.48865, "r": 212.81131, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CUSTOMER_EMAIL", "bbox": {"l": 212.81927, "t": 100.48865, "r": 306.29187, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " column.", "bbox": {"l": 306.23911, "t": 100.48865, "r": 344.06818, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "a. Select the CUSTOMER_EMAIL column."}, {"label": "list_item", "id": 4, "page_no": 76, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 150.597412109375, "t": 116.41293334960938, "r": 541.59985, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9738664627075195, "cells": [{"id": 9, "text": "b.", "bbox": {"l": 151.19875, "t": 117.52819999999997, "r": 159.57977, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to ", "bbox": {"l": 162.37343, "t": 117.52819999999997, "r": 541.59985, "b": 126.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "be different from ****@****, which is the mask value.", "bbox": {"l": 165.59891, "t": 129.52801999999997, "r": 395.45975, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}]}, "text": "b. Enter the check constraint condition. In this example, specify CUSTOMER_EMAIL to be different from ****@****, which is the mask value."}, {"label": "list_item", "id": 5, "page_no": 76, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.6071319580078, "t": 145.43560791015625, "r": 511.92703, "b": 155.8599853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9509996175765991, "cells": [{"id": 12, "text": "c.", "bbox": {"l": 151.19875, "t": 146.50780999999995, "r": 159.48901, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Select the ", "bbox": {"l": 162.45135, "t": 146.50780999999995, "r": 212.80035, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "On update violation, preserve column value ", "bbox": {"l": 212.81827, "t": 146.50780999999995, "r": 422.71716, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "option and click ", "bbox": {"l": 422.69836, "t": 146.50780999999995, "r": 494.17922999999996, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "OK", "bbox": {"l": 494.15839, "t": 146.50780999999995, "r": 509.08044000000007, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ".", "bbox": {"l": 509.15814, "t": 146.50780999999995, "r": 511.92703, "b": 155.72082999999998, "coord_origin": "TOPLEFT"}}]}, "text": "c. Select the On update violation, preserve column value option and click OK ."}, {"label": "caption", "id": 6, "page_no": 76, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 64.2974853515625, "t": 653.2451782226562, "r": 362.4355773925781, "b": 662.75830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9486740827560425, "cells": [{"id": 18, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 654.19789, "r": 361.97821, "b": 662.5228999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-38 Specifying a new check constraint on the CUSTOMERS table"}, {"label": "picture", "id": 7, "page_no": 76, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.89818572998047, "t": 169.34371948242188, "r": 543.365966796875, "b": 650.5548095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851900935173035, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 76, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.33963012695312, "t": 754.6822509765625, "r": 523.59357, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9542582035064697, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 76, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6194458007812, "t": 754.259521484375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9045737385749817, "cells": [{"id": 1, "text": "61", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "61"}]}}, {"page_no": 77, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.20623016357422, "t": 754.3389282226562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9119569659233093, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.26509857177734, "t": 754.6648559570312, "r": 334.42142, "b": 763.939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9529509544372559, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.84481811523438, "t": 70.5638198852539, "r": 535.55554, "b": 92.91973876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9732864499092102, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.23225402832031, "t": 386.5921325683594, "r": 294.2088317871094, "b": 395.9991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9511763453483582, "cells": [{"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.3284149169922, "t": 412.6619567871094, "r": 547.27332, "b": 447.14215087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9731178879737854, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.24510955810547, "t": 602.5396118164062, "r": 323.0049743652344, "b": 611.9821166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9424684047698975, "cells": [{"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.67375564575195, "t": 107.14707946777344, "r": 546.8531494140625, "b": 383.6925354003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9858631491661072, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 63.88129806518555, "t": 461.2124938964844, "r": 543.3204956054688, "b": 600.3211669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816429018974304, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 77, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20623016357422, "t": 754.3389282226562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9119569659233093, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "62"}, {"label": "page_footer", "id": 1, "page_no": 77, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26509857177734, "t": 754.6648559570312, "r": 334.42142, "b": 763.939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9529509544372559, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 77, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.84481811523438, "t": 70.5638198852539, "r": 535.55554, "b": 92.91973876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9732864499092102, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column."}, {"label": "caption", "id": 3, "page_no": 77, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.23225402832031, "t": 386.5921325683594, "r": 294.2088317871094, "b": 395.9991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9511763453483582, "cells": [{"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-39 Check constraint on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 77, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.3284149169922, "t": 412.6619567871094, "r": 547.27332, "b": 447.14215087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9731178879737854, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40."}, {"label": "caption", "id": 5, "page_no": 77, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.24510955810547, "t": 602.5396118164062, "r": 323.0049743652344, "b": 611.9821166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9424684047698975, "cells": [{"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table"}, {"label": "picture", "id": 6, "page_no": 77, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.67375564575195, "t": 107.14707946777344, "r": 546.8531494140625, "b": 383.6925354003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9858631491661072, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 77, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.88129806518555, "t": 461.2124938964844, "r": 543.3204956054688, "b": 600.3211669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816429018974304, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 77, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.84481811523438, "t": 70.5638198852539, "r": 535.55554, "b": 92.91973876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9732864499092102, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18027, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that ", "bbox": {"l": 147.97366, "t": 71.50867000000005, "r": 535.55554, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "prevents any masked data from being updated to the CUSTOMER_EMAIL column.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 517.11249, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "4. Figure 4-39 shows that there is now a check constraint on the CUSTOMERS table that prevents any masked data from being updated to the CUSTOMER_EMAIL column."}, {"label": "caption", "id": 3, "page_no": 77, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.23225402832031, "t": 386.5921325683594, "r": 294.2088317871094, "b": 395.9991455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9511763453483582, "cells": [{"id": 5, "text": "Figure 4-39 Check constraint on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 387.43799, "r": 293.78427, "b": 395.763, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-39 Check constraint on the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 77, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.3284149169922, "t": 412.6619567871094, "r": 547.27332, "b": 447.14215087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9731178879737854, "cells": [{"id": 6, "text": "5.", "bbox": {"l": 136.8, "t": 413.38873, "r": 145.20113, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create all the other check constraints that are associated to each of the masks on the ", "bbox": {"l": 148.00148, "t": 413.38873, "r": 531.54163, "b": 422.60172, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CUSTOMERS table. After this is done, these constraints should look like the ones that are ", "bbox": {"l": 151.20016, "t": 425.38855, "r": 547.27332, "b": 434.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "shown in Figure 4-40.", "bbox": {"l": 151.20016, "t": 437.38837, "r": 247.20359999999997, "b": 446.60135, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create all the other check constraints that are associated to each of the masks on the CUSTOMERS table. After this is done, these constraints should look like the ones that are shown in Figure 4-40."}, {"label": "caption", "id": 5, "page_no": 77, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.24510955810547, "t": 602.5396118164062, "r": 323.0049743652344, "b": 611.9821166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9424684047698975, "cells": [{"id": 10, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table", "bbox": {"l": 64.800003, "t": 603.37799, "r": 322.73096, "b": 611.703, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-40 List of check constraints on the CUSTOMERS table"}, {"label": "picture", "id": 6, "page_no": 77, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.67375564575195, "t": 107.14707946777344, "r": 546.8531494140625, "b": 383.6925354003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9858631491661072, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 77, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.88129806518555, "t": 461.2124938964844, "r": 543.3204956054688, "b": 600.3211669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816429018974304, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 77, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20623016357422, "t": 754.3389282226562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9119569659233093, "cells": [{"id": 0, "text": "62 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "62"}, {"label": "page_footer", "id": 1, "page_no": 77, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.26509857177734, "t": 754.6648559570312, "r": 334.42142, "b": 763.939453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9529509544372559, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 78, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.27894592285156, "t": 754.7236328125, "r": 523.59357, "b": 764.05419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9573627710342407, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.566162109375, "t": 754.30859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157171249389648, "cells": [{"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.11198425292969, "t": 70.35449981689453, "r": 360.40594, "b": 83.69813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9612811207771301, "cells": [{"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.0153350830078, "t": 96.60980987548828, "r": 516.22321, "b": 118.89674377441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9671575427055359, "cells": [{"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 125.977294921875, "r": 542.70996, "b": 160.520263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9787286520004272, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.109375, "t": 335.1785888671875, "r": 361.76947021484375, "b": 344.71710205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520919322967529, "cells": [{"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.86691284179688, "t": 361.27203369140625, "r": 537.47778, "b": 395.48135, "coord_origin": "TOPLEFT"}, "confidence": 0.969711422920227, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.17703247070312, "t": 575.9801635742188, "r": 318.5569763183594, "b": 585.77587890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541999101638794, "cells": [{"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.82846069335938, "t": 410.0953674316406, "r": 534.9657592773438, "b": 572.7034912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863720536231995, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 135.9375457763672, "t": 173.51026916503906, "r": 546.1521606445312, "b": 332.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9859922528266907, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 78, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27894592285156, "t": 754.7236328125, "r": 523.59357, "b": 764.05419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9573627710342407, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 78, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.566162109375, "t": 754.30859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157171249389648, "cells": [{"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "63"}, {"label": "section_header", "id": 2, "page_no": 78, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.11198425292969, "t": 70.35449981689453, "r": 360.40594, "b": 83.69813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9612811207771301, "cells": [{"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.8 Activating row and column access control"}, {"label": "text", "id": 3, "page_no": 78, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.0153350830078, "t": 96.60980987548828, "r": 516.22321, "b": 118.89674377441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9671575427055359, "cells": [{"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 78, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 125.977294921875, "r": 542.70996, "b": 160.520263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9787286520004272, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 5, "page_no": 78, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.109375, "t": 335.1785888671875, "r": 361.76947021484375, "b": 344.71710205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520919322967529, "cells": [{"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table"}, {"label": "list_item", "id": 6, "page_no": 78, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.86691284179688, "t": 361.27203369140625, "r": 537.47778, "b": 395.48135, "coord_origin": "TOPLEFT"}, "confidence": 0.969711422920227, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}]}, "text": "2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 7, "page_no": 78, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.17703247070312, "t": 575.9801635742188, "r": 318.5569763183594, "b": 585.77587890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541999101638794, "cells": [{"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS"}, {"label": "picture", "id": 8, "page_no": 78, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.82846069335938, "t": 410.0953674316406, "r": 534.9657592773438, "b": 572.7034912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863720536231995, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 78, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9375457763672, "t": 173.51026916503906, "r": 546.1521606445312, "b": 332.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9859922528266907, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 78, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.11198425292969, "t": 70.35449981689453, "r": 360.40594, "b": 83.69813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9612811207771301, "cells": [{"id": 2, "text": "4.3.8", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 93.937424, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Activating row and column access control", "bbox": {"l": 97.57959, "t": 71.33471999999995, "r": 360.40594, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.8 Activating row and column access control"}, {"label": "text", "id": 3, "page_no": 78, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.0153350830078, "t": 96.60980987548828, "r": 516.22321, "b": 118.89674377441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9671575427055359, "cells": [{"id": 4, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 516.22321, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "following steps:", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 204.65848, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to activate RCAC on all three tables in this example. Complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 78, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 125.977294921875, "r": 542.70996, "b": 160.520263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9787286520004272, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 126.52808000000005, "r": 145.15627, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click ", "bbox": {"l": 147.94167, "t": 126.52808000000005, "r": 542.70996, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the ", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 167.81343, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CUSTOMERS", "bbox": {"l": 167.88017, "t": 138.52788999999996, "r": 231.29152, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " table and select ", "bbox": {"l": 231.30048000000002, "t": 138.52788999999996, "r": 306.71658, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Definition", "bbox": {"l": 306.66083, "t": 138.52788999999996, "r": 352.81055, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ". As shown in Figure 4-41, make sure that ", "bbox": {"l": 352.80054, "t": 138.52788999999996, "r": 540.20892, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "you select ", "bbox": {"l": 151.20018, "t": 150.52770999999996, "r": 198.73924, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Row access control", "bbox": {"l": 198.78009, "t": 150.52770999999996, "r": 292.3035, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " and ", "bbox": {"l": 292.32043, "t": 150.52770999999996, "r": 314.64279, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Column access control", "bbox": {"l": 314.52026, "t": 150.52770999999996, "r": 424.31631, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": ". Click ", "bbox": {"l": 424.32031, "t": 150.52770999999996, "r": 454.07382, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "OK", "bbox": {"l": 454.0798, "t": 150.52770999999996, "r": 469.1214, "b": 159.74072, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ".", "bbox": {"l": 469.07956, "t": 150.52770999999996, "r": 471.84845, "b": 159.74072, "coord_origin": "TOPLEFT"}}]}, "text": "1. Start by enabling RCAC on the CUSTOMERS table. From System i Navigator, right-click the CUSTOMERS table and select Definition . As shown in Figure 4-41, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 5, "page_no": 78, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.109375, "t": 335.1785888671875, "r": 361.76947021484375, "b": 344.71710205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9520919322967529, "cells": [{"id": 20, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table", "bbox": {"l": 136.8, "t": 336.31799, "r": 361.49582, "b": 344.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-41 Enabling RCAC on the CUSTOMERS table"}, {"label": "list_item", "id": 6, "page_no": 78, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.86691284179688, "t": 361.27203369140625, "r": 537.47778, "b": 395.48135, "coord_origin": "TOPLEFT"}, "confidence": 0.969711422920227, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 362.26874, "r": 145.19742, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Enable RCAC on the ACCOUNTS table. Right-click the ", "bbox": {"l": 147.99657, "t": 362.26874, "r": 396.99893, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS ", "bbox": {"l": 397.01996, "t": 362.26874, "r": 456.02994, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "table and select ", "bbox": {"l": 456.00009000000006, "t": 362.26874, "r": 528.64832, "b": 371.48172000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Definition", "bbox": {"l": 151.2002, "t": 374.26855, "r": 197.23233, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ". As shown Figure 4-42, make sure that you select ", "bbox": {"l": 197.28014, "t": 374.26855, "r": 421.7308, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row access control", "bbox": {"l": 421.73969, "t": 374.26855, "r": 515.25806, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " and ", "bbox": {"l": 515.21924, "t": 374.26855, "r": 537.47778, "b": 383.48154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Column access control", "bbox": {"l": 151.19919, "t": 386.26837, "r": 261.00516, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": ". Click ", "bbox": {"l": 260.93945, "t": 386.26837, "r": 290.77264, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "OK", "bbox": {"l": 290.7597, "t": 386.26837, "r": 305.68176, "b": 395.48135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": ".", "bbox": {"l": 305.75946, "t": 386.26837, "r": 308.52835, "b": 395.48135, "coord_origin": "TOPLEFT"}}]}, "text": "2. Enable RCAC on the ACCOUNTS table. Right-click the ACCOUNTS table and select Definition . As shown Figure 4-42, make sure that you select Row access control and Column access control . Click OK ."}, {"label": "caption", "id": 7, "page_no": 78, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.17703247070312, "t": 575.9801635742188, "r": 318.5569763183594, "b": 585.77587890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9541999101638794, "cells": [{"id": 33, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS", "bbox": {"l": 136.8, "t": 576.7979, "r": 317.85483, "b": 585.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-42 Enabling RCAC on ACCOUNTS"}, {"label": "picture", "id": 8, "page_no": 78, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.82846069335938, "t": 410.0953674316406, "r": 534.9657592773438, "b": 572.7034912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863720536231995, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 78, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 135.9375457763672, "t": 173.51026916503906, "r": 546.1521606445312, "b": 332.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9859922528266907, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 78, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.27894592285156, "t": 754.7236328125, "r": 523.59357, "b": 764.05419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9573627710342407, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 78, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.566162109375, "t": 754.30859375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9157171249389648, "cells": [{"id": 1, "text": "63", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "63"}]}}, {"page_no": 79, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.15714263916016, "t": 754.3335571289062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127570390701294, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.25228881835938, "t": 754.6705932617188, "r": 334.42142, "b": 763.9555053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9553424715995789, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.11422729492188, "t": 70.50455474853516, "r": 544.67987, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9770053625106812, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.18548583984375, "t": 279.2968444824219, "r": 338.2870788574219, "b": 289.08013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507059454917908, "cells": [{"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.14816284179688, "t": 307.58905029296875, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}, "confidence": 0.9649584889411926, "cells": [{"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9355010986328, "t": 333.9635009765625, "r": 535.83545, "b": 356.36151, "coord_origin": "TOPLEFT"}, "confidence": 0.9637021422386169, "cells": [{"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.80099, "t": 363.3408508300781, "r": 533.23096, "b": 397.5221252441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9786288738250732, "cells": [{"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.30838775634766, "t": 584.093017578125, "r": 271.8835754394531, "b": 593.4585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9465454816818237, "cells": [{"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.07981872558594, "t": 119.14159393310547, "r": 547.2720947265625, "b": 276.12908935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865725040435791, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 63.96348190307617, "t": 412.05908203125, "r": 546.8929443359375, "b": 581.2628784179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9827678799629211, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 79, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15714263916016, "t": 754.3335571289062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127570390701294, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "64"}, {"label": "page_footer", "id": 1, "page_no": 79, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.25228881835938, "t": 754.6705932617188, "r": 334.42142, "b": 763.9555053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9553424715995789, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 79, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.11422729492188, "t": 70.50455474853516, "r": 544.67987, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9770053625106812, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK ."}, {"label": "caption", "id": 3, "page_no": 79, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.18548583984375, "t": 279.2968444824219, "r": 338.2870788574219, "b": 289.08013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507059454917908, "cells": [{"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS"}, {"label": "section_header", "id": 4, "page_no": 79, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.14816284179688, "t": 307.58905029296875, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}, "confidence": 0.9649584889411926, "cells": [{"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.9 Reviewing row permissions"}, {"label": "text", "id": 5, "page_no": 79, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9355010986328, "t": 333.9635009765625, "r": 535.83545, "b": 356.36151, "coord_origin": "TOPLEFT"}, "confidence": 0.9637021422386169, "cells": [{"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}]}, "text": "This section displays all the row permissions after enabling RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 79, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80099, "t": 363.3408508300781, "r": 533.23096, "b": 397.5221252441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9786288738250732, "cells": [{"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission."}, {"label": "caption", "id": 7, "page_no": 79, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.30838775634766, "t": 584.093017578125, "r": 271.8835754394531, "b": 593.4585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9465454816818237, "cells": [{"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-44 Row permissions after enabling RCAC"}, {"label": "picture", "id": 8, "page_no": 79, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.07981872558594, "t": 119.14159393310547, "r": 547.2720947265625, "b": 276.12908935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865725040435791, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 79, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.96348190307617, "t": 412.05908203125, "r": 546.8929443359375, "b": 581.2628784179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9827678799629211, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 79, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.11422729492188, "t": 70.50455474853516, "r": 544.67987, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9770053625106812, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Enable RCAC on the TRANSACTIONS table. Right-click the ", "bbox": {"l": 147.98666, "t": 71.50867000000005, "r": 419.13211, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "TRANSACTIONS ", "bbox": {"l": 419.21979, "t": 71.50867000000005, "r": 501.02628, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "table and ", "bbox": {"l": 500.99936, "t": 71.50867000000005, "r": 544.67987, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "select ", "bbox": {"l": 151.19919, "t": 83.50847999999996, "r": 180.07423, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Definition", "bbox": {"l": 180.05928, "t": 83.50847999999996, "r": 226.23584, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ". As shown in Figure 4-43, make sure that you select ", "bbox": {"l": 226.13922, "t": 83.50847999999996, "r": 461.255, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Row access ", "bbox": {"l": 461.15839, "t": 83.50847999999996, "r": 520.97821, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "control", "bbox": {"l": 151.19821, "t": 95.50829999999996, "r": 184.90685, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ". Click ", "bbox": {"l": 184.85803, "t": 95.50829999999996, "r": 214.66931000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "OK", "bbox": {"l": 214.67826999999997, "t": 95.50829999999996, "r": 229.71985999999998, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ".", "bbox": {"l": 229.61826999999997, "t": 95.50829999999996, "r": 232.38715000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "3. Enable RCAC on the TRANSACTIONS table. Right-click the TRANSACTIONS table and select Definition . As shown in Figure 4-43, make sure that you select Row access control . Click OK ."}, {"label": "caption", "id": 3, "page_no": 79, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.18548583984375, "t": 279.2968444824219, "r": 338.2870788574219, "b": 289.08013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507059454917908, "cells": [{"id": 14, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS", "bbox": {"l": 136.8, "t": 280.15799, "r": 337.80872, "b": 288.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-43 Enabling RCAC on TRANSACTIONS"}, {"label": "section_header", "id": 4, "page_no": 79, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.14816284179688, "t": 307.58905029296875, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}, "confidence": 0.9649584889411926, "cells": [{"id": 15, "text": "4.3.9", "bbox": {"l": 64.800003, "t": 308.99472, "r": 94.076729, "b": 320.9827, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Reviewing row permissions", "bbox": {"l": 97.73632, "t": 308.99472, "r": 271.11932, "b": 320.9827, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.9 Reviewing row permissions"}, {"label": "text", "id": 5, "page_no": 79, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9355010986328, "t": 333.9635009765625, "r": 535.83545, "b": 356.36151, "coord_origin": "TOPLEFT"}, "confidence": 0.9637021422386169, "cells": [{"id": 17, "text": "This section displays all the row permissions after enabling RCAC. Complete the following ", "bbox": {"l": 136.8, "t": 335.14871, "r": 535.83545, "b": 344.36169, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "steps:", "bbox": {"l": 136.80099, "t": 347.14853, "r": 163.44998, "b": 356.36151, "coord_origin": "TOPLEFT"}}]}, "text": "This section displays all the row permissions after enabling RCAC. Complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 79, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.80099, "t": 363.3408508300781, "r": 533.23096, "b": 397.5221252441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9786288738250732, "cells": [{"id": 19, "text": "1.", "bbox": {"l": 136.80099, "t": 364.12833, "r": 145.24223, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From System i Navigator, click ", "bbox": {"l": 148.05597, "t": 364.12833, "r": 287.52866, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Row Permissions", "bbox": {"l": 287.58145, "t": 364.12833, "r": 370.44568, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": ", as shown in Figure 4-44. Three ", "bbox": {"l": 370.32117, "t": 364.12833, "r": 516.80585, "b": 373.3413100000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row ", "bbox": {"l": 151.20117, "t": 376.12814, "r": 533.23096, "b": 385.34113, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "permission.", "bbox": {"l": 151.20117, "t": 388.12796, "r": 202.5141, "b": 397.34093999999993, "coord_origin": "TOPLEFT"}}]}, "text": "1. From System i Navigator, click Row Permissions , as shown in Figure 4-44. Three additional Row Permissions are added (QIBM_DEFAULT*). There is one per each row permission."}, {"label": "caption", "id": 7, "page_no": 79, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.30838775634766, "t": 584.093017578125, "r": 271.8835754394531, "b": 593.4585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9465454816818237, "cells": [{"id": 25, "text": "Figure 4-44 Row permissions after enabling RCAC", "bbox": {"l": 64.800003, "t": 584.6579, "r": 271.20956, "b": 592.98291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-44 Row permissions after enabling RCAC"}, {"label": "picture", "id": 8, "page_no": 79, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.07981872558594, "t": 119.14159393310547, "r": 547.2720947265625, "b": 276.12908935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865725040435791, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 79, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.96348190307617, "t": 412.05908203125, "r": 546.8929443359375, "b": 581.2628784179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9827678799629211, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 79, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.15714263916016, "t": 754.3335571289062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127570390701294, "cells": [{"id": 0, "text": "64 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "64"}, {"label": "page_footer", "id": 1, "page_no": 79, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.25228881835938, "t": 754.6705932617188, "r": 334.42142, "b": 763.9555053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9553424715995789, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 80, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.26358032226562, "t": 754.7083740234375, "r": 523.59357, "b": 764.0580444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9547041058540344, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6220703125, "t": 754.29638671875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9117289185523987, "cells": [{"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.80770874023438, "t": 70.57334899902344, "r": 544.37872, "b": 92.76964569091797, "coord_origin": "TOPLEFT"}, "confidence": 0.965424120426178, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.82278442382812, "t": 241.54090881347656, "r": 328.7805480957031, "b": 250.71495056152344, "coord_origin": "TOPLEFT"}, "confidence": 0.9502364993095398, "cells": [{"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.20486450195312, "t": 267.31622314453125, "r": 546.08038, "b": 313.33673095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9789031744003296, "cells": [{"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.38289642333984, "t": 598.0608520507812, "r": 342.9576110839844, "b": 607.2294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9494208693504333, "cells": [{"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.34481811523438, "t": 107.48910522460938, "r": 467.5279846191406, "b": 238.44802856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9859717488288879, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 63.714664459228516, "t": 327.1063232421875, "r": 502.0154113769531, "b": 595.8734741210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9849998950958252, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 80, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.26358032226562, "t": 754.7083740234375, "r": 523.59357, "b": 764.0580444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9547041058540344, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 80, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6220703125, "t": 754.29638671875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9117289185523987, "cells": [{"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "65"}, {"label": "list_item", "id": 2, "page_no": 80, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.80770874023438, "t": 70.57334899902344, "r": 544.37872, "b": 92.76964569091797, "coord_origin": "TOPLEFT"}, "confidence": 0.965424120426178, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45."}, {"label": "caption", "id": 3, "page_no": 80, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.82278442382812, "t": 241.54090881347656, "r": 328.7805480957031, "b": 250.71495056152344, "coord_origin": "TOPLEFT"}, "confidence": 0.9502364993095398, "cells": [{"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-45 Selecting row permission definition"}, {"label": "list_item", "id": 4, "page_no": 80, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.20486450195312, "t": 267.31622314453125, "r": 546.08038, "b": 313.33673095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9789031744003296, "cells": [{"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}]}, "text": "3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied."}, {"label": "caption", "id": 5, "page_no": 80, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.38289642333984, "t": 598.0608520507812, "r": 342.9576110839844, "b": 607.2294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9494208693504333, "cells": [{"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission"}, {"label": "picture", "id": 6, "page_no": 80, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.34481811523438, "t": 107.48910522460938, "r": 467.5279846191406, "b": 238.44802856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9859717488288879, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 80, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.714664459228516, "t": 327.1063232421875, "r": 502.0154113769531, "b": 595.8734741210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9849998950958252, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 80, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.80770874023438, "t": 70.57334899902344, "r": 544.37872, "b": 92.76964569091797, "coord_origin": "TOPLEFT"}, "confidence": 0.965424120426178, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.21153, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Look at one of the row permission definitions by right-clicking it and selecting ", "bbox": {"l": 148.0155, "t": 71.50903000000005, "r": 492.7739, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Definition", "bbox": {"l": 492.65945, "t": 71.50903000000005, "r": 538.80908, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": ", ", "bbox": {"l": 538.73938, "t": 71.50903000000005, "r": 544.37872, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-45.", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 260.45697, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at one of the row permission definitions by right-clicking it and selecting Definition , as shown in Figure 4-45."}, {"label": "caption", "id": 3, "page_no": 80, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.82278442382812, "t": 241.54090881347656, "r": 328.7805480957031, "b": 250.71495056152344, "coord_origin": "TOPLEFT"}, "confidence": 0.9502364993095398, "cells": [{"id": 7, "text": "Figure 4-45 Selecting row permission definition", "bbox": {"l": 136.8, "t": 242.05804, "r": 328.69974, "b": 250.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-45 Selecting row permission definition"}, {"label": "list_item", "id": 4, "page_no": 80, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.20486450195312, "t": 267.31622314453125, "r": 546.08038, "b": 313.33673095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9789031744003296, "cells": [{"id": 8, "text": "3.", "bbox": {"l": 136.8, "t": 268.06866, "r": 145.16658, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition ", "bbox": {"l": 147.95543, "t": 268.06866, "r": 546.08038, "b": 277.28168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "(0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the ", "bbox": {"l": 151.20016, "t": 280.06851, "r": 528.18719, "b": 289.28149, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "others and it ensures that if someone does not meet any of the criteria from the row ", "bbox": {"l": 151.20016, "t": 292.06832999999995, "r": 522.29791, "b": 301.28131, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission then this condition is tested, and because it is false the access is denied.", "bbox": {"l": 151.20016, "t": 304.06815000000006, "r": 523.24811, "b": 313.28113, "coord_origin": "TOPLEFT"}}]}, "text": "3. A window opens, as shown in Figure 4-46. Take note of the nonsensical search condition (0=1) of the QIBM_DEFAULT row permission. This permission is ORed with all of the others and it ensures that if someone does not meet any of the criteria from the row permission then this condition is tested, and because it is false the access is denied."}, {"label": "caption", "id": 5, "page_no": 80, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.38289642333984, "t": 598.0608520507812, "r": 342.9576110839844, "b": 607.2294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9494208693504333, "cells": [{"id": 13, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission", "bbox": {"l": 64.800003, "t": 598.758, "r": 342.44904, "b": 607.0830100000001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-46 Search condition of the QIBM_DEFAULT row permission"}, {"label": "picture", "id": 6, "page_no": 80, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.34481811523438, "t": 107.48910522460938, "r": 467.5279846191406, "b": 238.44802856445312, "coord_origin": "TOPLEFT"}, "confidence": 0.9859717488288879, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 80, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 63.714664459228516, "t": 327.1063232421875, "r": 502.0154113769531, "b": 595.8734741210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9849998950958252, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 80, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.26358032226562, "t": 754.7083740234375, "r": 523.59357, "b": 764.0580444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9547041058540344, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 80, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6220703125, "t": 754.29638671875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9117289185523987, "cells": [{"id": 1, "text": "65", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "65"}]}}, {"page_no": 81, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.22357940673828, "t": 754.4584350585938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105024337768555, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.37715148925781, "t": 754.6815795898438, "r": 334.42142, "b": 763.9869384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9468215703964233, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.1228256225586, "t": 70.26021575927734, "r": 347.13361, "b": 83.70108795166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9626623392105103, "cells": [{"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.73379516601562, "t": 96.64435577392578, "r": 547.25568, "b": 119.03988647460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9718443751335144, "cells": [{"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.537353515625, "t": 125.70227813720703, "r": 390.82486, "b": 135.94515991210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9467165470123291, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6352081298828, "t": 142.6588897705078, "r": 543.19196, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9719513654708862, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.70932006835938, "t": 171.48867797851562, "r": 543.64008, "b": 193.7998046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9690733551979065, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.35504150390625, "t": 200.90966796875, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}, "confidence": 0.914056658744812, "cells": [{"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.4617462158203, "t": 213.36526489257812, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}, "confidence": 0.908424973487854, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.39413452148438, "t": 224.96202087402344, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9008285403251648, "cells": [{"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.38189697265625, "t": 237.14512634277344, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9172974228858948, "cells": [{"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.4001007080078, "t": 248.64210510253906, "r": 318.3563537597656, "b": 258.73914, "coord_origin": "TOPLEFT"}, "confidence": 0.9473636746406555, "cells": [{"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 136.71405029296875, "t": 274.4760437011719, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9395599961280823, "cells": [{"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.20758056640625, "t": 289.3038635253906, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}, "confidence": 0.9441509246826172, "cells": [{"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 136.73385620117188, "t": 306.8790588378906, "r": 531.48303, "b": 328.8634033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9618597626686096, "cells": [{"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "caption", "bbox": {"l": 136.308349609375, "t": 440.55535888671875, "r": 262.7190856933594, "b": 450.0071105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9195859432220459, "cells": [{"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.81915283203125, "t": 466.6739807128906, "r": 503.15964, "b": 477.26654052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9244843125343323, "cells": [{"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "caption", "bbox": {"l": 136.09771728515625, "t": 626.5655517578125, "r": 451.9573974609375, "b": 636.12291, "coord_origin": "TOPLEFT"}, "confidence": 0.9248898029327393, "cells": [{"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "picture", "bbox": {"l": 135.9881591796875, "t": 491.6136474609375, "r": 393.8948669433594, "b": 625.150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8431334495544434, "cells": []}, {"id": 19, "label": "picture", "bbox": {"l": 136.04849243164062, "t": 343.6217346191406, "r": 358.4311218261719, "b": 438.34320068359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7820501923561096, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 81, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22357940673828, "t": 754.4584350585938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105024337768555, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "66"}, {"label": "page_footer", "id": 1, "page_no": 81, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37715148925781, "t": 754.6815795898438, "r": 334.42142, "b": 763.9869384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9468215703964233, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 81, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.1228256225586, "t": 70.26021575927734, "r": 347.13361, "b": 83.70108795166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9626623392105103, "cells": [{"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.10 Demonstrating data access with RCAC"}, {"label": "text", "id": 3, "page_no": 81, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.73379516601562, "t": 96.64435577392578, "r": 547.25568, "b": 119.03988647460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9718443751335144, "cells": [{"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):"}, {"label": "list_item", "id": 4, "page_no": 81, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.537353515625, "t": 125.70227813720703, "r": 390.82486, "b": 135.94515991210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9467165470123291, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that returns the SESSION_USER."}, {"label": "list_item", "id": 5, "page_no": 81, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6352081298828, "t": 142.6588897705078, "r": 543.19196, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9719513654708862, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table."}, {"label": "list_item", "id": 6, "page_no": 81, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.70932006835938, "t": 171.48867797851562, "r": 543.64008, "b": 193.7998046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9690733551979065, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name:"}, {"label": "list_item", "id": 7, "page_no": 81, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.35504150390625, "t": 200.90966796875, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}, "confidence": 0.914056658744812, "cells": [{"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ i d"}, {"label": "list_item", "id": 8, "page_no": 81, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.4617462158203, "t": 213.36526489257812, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}, "confidence": 0.908424973487854, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_name"}, {"label": "list_item", "id": 9, "page_no": 81, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.39413452148438, "t": 224.96202087402344, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9008285403251648, "cells": [{"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_email"}, {"label": "list_item", "id": 10, "page_no": 81, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.38189697265625, "t": 237.14512634277344, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9172974228858948, "cells": [{"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ t a x _ i d"}, {"label": "list_item", "id": 11, "page_no": 81, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4001007080078, "t": 248.64210510253906, "r": 318.3563537597656, "b": 258.73914, "coord_origin": "TOPLEFT"}, "confidence": 0.9473636746406555, "cells": [{"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_drivers_license_number"}, {"label": "section_header", "id": 12, "page_no": 81, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.71405029296875, "t": 274.4760437011719, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9395599961280823, "cells": [{"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for a DBE user with RCAC"}, {"label": "text", "id": 13, "page_no": 81, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.20758056640625, "t": 289.3038635253906, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}, "confidence": 0.9441509246826172, "cells": [{"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a DBE (MCAIN) user, complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 81, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.73385620117188, "t": 306.8790588378906, "r": 531.48303, "b": 328.8634033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9618597626686096, "cells": [{"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user."}, {"label": "caption", "id": 15, "page_no": 81, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 136.308349609375, "t": 440.55535888671875, "r": 262.7190856933594, "b": 450.0071105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9195859432220459, "cells": [{"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-47 DBE session user"}, {"label": "list_item", "id": 16, "page_no": 81, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.81915283203125, "t": 466.6739807128906, "r": 503.15964, "b": 477.26654052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9244843125343323, "cells": [{"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48."}, {"label": "caption", "id": 17, "page_no": 81, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 136.09771728515625, "t": 626.5655517578125, "r": 451.9573974609375, "b": 636.12291, "coord_origin": "TOPLEFT"}, "confidence": 0.9248898029327393, "cells": [{"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table"}, {"label": "picture", "id": 18, "page_no": 81, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 135.9881591796875, "t": 491.6136474609375, "r": 393.8948669433594, "b": 625.150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8431334495544434, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 19, "page_no": 81, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 136.04849243164062, "t": 343.6217346191406, "r": 358.4311218261719, "b": 438.34320068359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7820501923561096, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 81, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.1228256225586, "t": 70.26021575927734, "r": 347.13361, "b": 83.70108795166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9626623392105103, "cells": [{"id": 2, "text": "4.3.10", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 101.29621, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Demonstrating data access with RCAC", "bbox": {"l": 104.94582, "t": 71.33471999999995, "r": 347.13361, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.10 Demonstrating data access with RCAC"}, {"label": "text", "id": 3, "page_no": 81, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.73379516601562, "t": 96.64435577392578, "r": 547.25568, "b": 119.03988647460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9718443751335144, "cells": [{"id": 4, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.25568, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 433.09406, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "You are now ready to test the RCAC definitions. Run the following SQL statements with each type of user (DBE, SECURITY, TELLER, ADMIN, and WEBUSER):"}, {"label": "list_item", "id": 4, "page_no": 81, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.537353515625, "t": 125.70227813720703, "r": 390.82486, "b": 135.94515991210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9467165470123291, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 126.67749000000003, "r": 141.78, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A ", "bbox": {"l": 151.20016, "t": 126.52808000000005, "r": 160.64622, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "SELECT", "bbox": {"l": 160.62033, "t": 126.67749000000003, "r": 190.61983, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " statement that returns the SESSION_USER.", "bbox": {"l": 190.61986, "t": 126.52808000000005, "r": 390.82486, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that returns the SESSION_USER."}, {"label": "list_item", "id": 5, "page_no": 81, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6352081298828, "t": 142.6588897705078, "r": 543.19196, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9719513654708862, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 143.65729, "r": 141.78, "b": 152.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A ", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 160.64622, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 160.62033, "t": 143.65729, "r": 190.61983, "b": 152.48186999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " statement that counts the customers from the CUSTOMER table. There are 90 ", "bbox": {"l": 190.61986, "t": 143.50787000000003, "r": 543.19196, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "customers in the CUSTOMER table.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 310.90085, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A SELECT statement that counts the customers from the CUSTOMER table. There are 90 customers in the CUSTOMER table."}, {"label": "list_item", "id": 6, "page_no": 81, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.70932006835938, "t": 171.48867797851562, "r": 543.64008, "b": 193.7998046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9690733551979065, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "A simple ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 192.29114, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "SELECT", "bbox": {"l": 192.30011, "t": 172.63689999999997, "r": 222.23987, "b": 181.46149000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": " statement that returns the following output from the CUSTOMERS table ", "bbox": {"l": 222.29964, "t": 172.48748999999998, "r": 543.64008, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ordered by customer_name:", "bbox": {"l": 151.19919, "t": 184.4873, "r": 276.00995, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A simple SELECT statement that returns the following output from the CUSTOMERS table ordered by customer_name:"}, {"label": "list_item", "id": 7, "page_no": 81, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.35504150390625, "t": 200.90966796875, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}, "confidence": 0.914056658744812, "cells": [{"id": 20, "text": "-c", "bbox": {"l": 152.03882, "t": 201.52686000000006, "r": 178.60014, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "u", "bbox": {"l": 170.57835, "t": 201.52686000000006, "r": 184.13789, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "s", "bbox": {"l": 176.15794, "t": 201.52686000000006, "r": 189.15973, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "t", "bbox": {"l": 181.13794, "t": 201.52686000000006, "r": 191.9286, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "o", "bbox": {"l": 183.89786, "t": 201.52686000000006, "r": 197.4574, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "m", "bbox": {"l": 189.47745, "t": 201.52686000000006, "r": 205.79591, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "e", "bbox": {"l": 197.81696, "t": 201.52686000000006, "r": 211.3765, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "r", "bbox": {"l": 203.33678, "t": 201.52686000000006, "r": 214.67525, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "_", "bbox": {"l": 206.69728, "t": 201.52686000000006, "r": 220.25682, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "i", "bbox": {"l": 212.2171, "t": 201.52686000000006, "r": 222.45001, "b": 210.73987, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "d", "bbox": {"l": 214.43719000000002, "t": 201.52686000000006, "r": 227.99673, "b": 210.73987, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ i d"}, {"label": "list_item", "id": 8, "page_no": 81, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.4617462158203, "t": 213.36526489257812, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}, "confidence": 0.908424973487854, "cells": [{"id": 31, "text": "-", "bbox": {"l": 152.03882, "t": 213.52666999999997, "r": 157.61443, "b": 222.73969, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "customer_name", "bbox": {"l": 165.59836, "t": 213.52666999999997, "r": 237.24663000000004, "b": 222.73969, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_name"}, {"label": "list_item", "id": 9, "page_no": 81, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.39413452148438, "t": 224.96202087402344, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9008285403251648, "cells": [{"id": 33, "text": "-", "bbox": {"l": 152.03882, "t": 225.52648999999997, "r": 157.61443, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "customer_email", "bbox": {"l": 165.59836, "t": 225.52648999999997, "r": 236.13907, "b": 234.73950000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_email"}, {"label": "list_item", "id": 10, "page_no": 81, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.38189697265625, "t": 237.14512634277344, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9172974228858948, "cells": [{"id": 35, "text": "-c", "bbox": {"l": 152.03882, "t": 237.52630999999997, "r": 178.60014, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "u", "bbox": {"l": 170.57835, "t": 237.52630999999997, "r": 184.13789, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "s", "bbox": {"l": 176.15794, "t": 237.52630999999997, "r": 189.15973, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "t", "bbox": {"l": 181.13794, "t": 237.52630999999997, "r": 191.9286, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "o", "bbox": {"l": 183.89786, "t": 237.52630999999997, "r": 197.4574, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "m", "bbox": {"l": 189.47745, "t": 237.52630999999997, "r": 205.79591, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "e", "bbox": {"l": 197.81696, "t": 237.52630999999997, "r": 211.3765, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "r", "bbox": {"l": 203.33678, "t": 237.52630999999997, "r": 214.67525, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "_", "bbox": {"l": 206.69728, "t": 237.52630999999997, "r": 220.25682, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "t", "bbox": {"l": 212.2171, "t": 237.52630999999997, "r": 223.00777, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "a", "bbox": {"l": 215.03677, "t": 237.52630999999997, "r": 228.59631000000002, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "x", "bbox": {"l": 220.55659, "t": 237.52630999999997, "r": 233.55837999999997, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "_", "bbox": {"l": 225.59636, "t": 237.52630999999997, "r": 239.15590000000003, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 231.11618, "t": 237.52630999999997, "r": 241.34908999999996, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "d", "bbox": {"l": 233.33627, "t": 237.52630999999997, "r": 246.89580999999998, "b": 246.73932000000002, "coord_origin": "TOPLEFT"}}]}, "text": "-c u s t o m e r _ t a x _ i d"}, {"label": "list_item", "id": 11, "page_no": 81, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.4001007080078, "t": 248.64210510253906, "r": 318.3563537597656, "b": 258.73914, "coord_origin": "TOPLEFT"}, "confidence": 0.9473636746406555, "cells": [{"id": 50, "text": "-", "bbox": {"l": 152.03882, "t": 249.52612, "r": 157.61044, "b": 258.73914, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "customer_drivers_license_number", "bbox": {"l": 165.59836, "t": 249.52612, "r": 318.23041, "b": 258.73914, "coord_origin": "TOPLEFT"}}]}, "text": "-customer_drivers_license_number"}, {"label": "section_header", "id": 12, "page_no": 81, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.71405029296875, "t": 274.4760437011719, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}, "confidence": 0.9395599961280823, "cells": [{"id": 52, "text": "Data access for a DBE user with RCAC", "bbox": {"l": 136.8, "t": 275.36401, "r": 357.22922, "b": 286.46402, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for a DBE user with RCAC"}, {"label": "text", "id": 13, "page_no": 81, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.20758056640625, "t": 289.3038635253906, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}, "confidence": 0.9441509246826172, "cells": [{"id": 53, "text": "To test a DBE (MCAIN) user, complete the following steps:", "bbox": {"l": 136.8, "t": 290.50872999999996, "r": 394.54984, "b": 299.72171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a DBE (MCAIN) user, complete the following steps:"}, {"label": "list_item", "id": 14, "page_no": 81, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.73385620117188, "t": 306.8790588378906, "r": 531.48303, "b": 328.8634033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9618597626686096, "cells": [{"id": 54, "text": "1.", "bbox": {"l": 136.8, "t": 307.48853, "r": 145.21211, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 307.48853, "r": 531.48303, "b": 316.70151, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "shown in Figure 4-47. In this example, MCAIN is the DBE user.", "bbox": {"l": 151.20016, "t": 319.48834, "r": 429.04044, "b": 328.70131999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-47. In this example, MCAIN is the DBE user."}, {"label": "caption", "id": 15, "page_no": 81, "cluster": {"id": 15, "label": "caption", "bbox": {"l": 136.308349609375, "t": 440.55535888671875, "r": 262.7190856933594, "b": 450.0071105957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9195859432220459, "cells": [{"id": 57, "text": "Figure 4-47 DBE session user", "bbox": {"l": 136.8, "t": 441.67801, "r": 261.65161, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-47 DBE session user"}, {"label": "list_item", "id": 16, "page_no": 81, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.81915283203125, "t": 466.6739807128906, "r": 503.15964, "b": 477.26654052734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9244843125343323, "cells": [{"id": 58, "text": "2.", "bbox": {"l": 136.8, "t": 467.62872, "r": 145.20607, "b": 476.84171, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "The number of rows that the DBE user MCAIN can see is shown in Figure 4-48.", "bbox": {"l": 148.00812, "t": 467.62872, "r": 503.15964, "b": 476.84171, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the DBE user MCAIN can see is shown in Figure 4-48."}, {"label": "caption", "id": 17, "page_no": 81, "cluster": {"id": 17, "label": "caption", "bbox": {"l": 136.09771728515625, "t": 626.5655517578125, "r": 451.9573974609375, "b": 636.12291, "coord_origin": "TOPLEFT"}, "confidence": 0.9248898029327393, "cells": [{"id": 60, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 627.7979, "r": 451.75512999999995, "b": 636.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-48 Number of rows that DBE user can see in the CUSTOMERS table"}, {"label": "picture", "id": 18, "page_no": 81, "cluster": {"id": 18, "label": "picture", "bbox": {"l": 135.9881591796875, "t": 491.6136474609375, "r": 393.8948669433594, "b": 625.150146484375, "coord_origin": "TOPLEFT"}, "confidence": 0.8431334495544434, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 19, "page_no": 81, "cluster": {"id": 19, "label": "picture", "bbox": {"l": 136.04849243164062, "t": 343.6217346191406, "r": 358.4311218261719, "b": 438.34320068359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7820501923561096, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 81, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22357940673828, "t": 754.4584350585938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105024337768555, "cells": [{"id": 0, "text": "66 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "66"}, {"label": "page_footer", "id": 1, "page_no": 81, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.37715148925781, "t": 754.6815795898438, "r": 334.42142, "b": 763.9869384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9468215703964233, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 82, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.31561279296875, "t": 754.7977905273438, "r": 523.59357, "b": 764.0062866210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9568237662315369, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5758666992188, "t": 754.2555541992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127215147018433, "cells": [{"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.20147705078125, "t": 70.6068115234375, "r": 547.29102, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9730502963066101, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.37542724609375, "t": 469.88720703125, "r": 376.57159423828125, "b": 479.52301, "coord_origin": "TOPLEFT"}, "confidence": 0.940518319606781, "cells": [{"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.4634246826172, "t": 495.54241943359375, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}, "confidence": 0.9448604583740234, "cells": [{"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.3077392578125, "t": 511.1701354980469, "r": 382.87076, "b": 521.498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9233824014663696, "cells": [{"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 527.958740234375, "r": 531.48303, "b": 550.41796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.09732055664062, "t": 687.5260620117188, "r": 289.5880432128906, "b": 696.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477524161338806, "cells": [{"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.97964477539062, "t": 564.6740112304688, "r": 354.29364013671875, "b": 685.4274291992188, "coord_origin": "TOPLEFT"}, "confidence": 0.945771336555481, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 82, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31561279296875, "t": 754.7977905273438, "r": 523.59357, "b": 764.0062866210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9568237662315369, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 82, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5758666992188, "t": 754.2555541992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127215147018433, "cells": [{"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "67"}, {"label": "list_item", "id": 2, "page_no": 82, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20147705078125, "t": 70.6068115234375, "r": 547.29102, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9730502963066101, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked."}, {"label": "caption", "id": 3, "page_no": 82, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37542724609375, "t": 469.88720703125, "r": 376.57159423828125, "b": 479.52301, "coord_origin": "TOPLEFT"}, "confidence": 0.940518319606781, "cells": [{"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns"}, {"label": "section_header", "id": 4, "page_no": 82, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.4634246826172, "t": 495.54241943359375, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}, "confidence": 0.9448604583740234, "cells": [{"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for SECURITY user with RCAC"}, {"label": "text", "id": 5, "page_no": 82, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.3077392578125, "t": 511.1701354980469, "r": 382.87076, "b": 521.498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9233824014663696, "cells": [{"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}]}, "text": "To test a SECURITY user, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 82, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 527.958740234375, "r": 531.48303, "b": 550.41796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer."}, {"label": "caption", "id": 7, "page_no": 82, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.09732055664062, "t": 687.5260620117188, "r": 289.5880432128906, "b": 696.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477524161338806, "cells": [{"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-50 SECURITY session user"}, {"label": "picture", "id": 8, "page_no": 82, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.97964477539062, "t": 564.6740112304688, "r": 354.29364013671875, "b": 685.4274291992188, "coord_origin": "TOPLEFT"}, "confidence": 0.945771336555481, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 82, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.20147705078125, "t": 70.6068115234375, "r": 547.29102, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9730502963066101, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19135, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. ", "bbox": {"l": 147.98859, "t": 71.50903000000005, "r": 547.29102, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.17639, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "where the result is masked.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 272.61414, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-49. Note the masked columns. User MCAIN can see all the rows in the CUSTOMERS table, but there are some columns where the result is masked."}, {"label": "caption", "id": 3, "page_no": 82, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37542724609375, "t": 469.88720703125, "r": 376.57159423828125, "b": 479.52301, "coord_origin": "TOPLEFT"}, "confidence": 0.940518319606781, "cells": [{"id": 6, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns", "bbox": {"l": 64.800003, "t": 471.198, "r": 376.18823, "b": 479.52301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-49 SQL statement that is run by the DBE user with masked columns"}, {"label": "section_header", "id": 4, "page_no": 82, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.4634246826172, "t": 495.54241943359375, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}, "confidence": 0.9448604583740234, "cells": [{"id": 7, "text": "Data access for SECURITY user with RCAC", "bbox": {"l": 136.8, "t": 497.00391, "r": 382.60321, "b": 508.10391, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for SECURITY user with RCAC"}, {"label": "text", "id": 5, "page_no": 82, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.3077392578125, "t": 511.1701354980469, "r": 382.87076, "b": 521.498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9233824014663696, "cells": [{"id": 8, "text": "To test a SECURITY user, complete the following steps:", "bbox": {"l": 136.8, "t": 512.1487099999999, "r": 382.87076, "b": 521.36169, "coord_origin": "TOPLEFT"}}]}, "text": "To test a SECURITY user, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 82, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.8, "t": 527.958740234375, "r": 531.48303, "b": 550.41796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9695555567741394, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 529.12851, "r": 145.21211, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01613, "t": 529.12851, "r": 531.48303, "b": 538.34152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-50. In this example, SECURITY is the security officer.", "bbox": {"l": 151.20016, "t": 541.12833, "r": 469.19904, "b": 550.34132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-50. In this example, SECURITY is the security officer."}, {"label": "caption", "id": 7, "page_no": 82, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.09732055664062, "t": 687.5260620117188, "r": 289.5880432128906, "b": 696.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477524161338806, "cells": [{"id": 12, "text": "Figure 4-50 SECURITY session user", "bbox": {"l": 136.8, "t": 687.9179, "r": 288.62375, "b": 696.242897, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-50 SECURITY session user"}, {"label": "picture", "id": 8, "page_no": 82, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.97964477539062, "t": 564.6740112304688, "r": 354.29364013671875, "b": 685.4274291992188, "coord_origin": "TOPLEFT"}, "confidence": 0.945771336555481, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 82, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31561279296875, "t": 754.7977905273438, "r": 523.59357, "b": 764.0062866210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9568237662315369, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 82, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5758666992188, "t": 754.2555541992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9127215147018433, "cells": [{"id": 1, "text": "67", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "67"}]}}, {"page_no": 83, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.20339965820312, "t": 754.427978515625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9174648523330688, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.34625244140625, "t": 754.708740234375, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526290893554688, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.87147521972656, "t": 70.62814331054688, "r": 547.19379, "b": 93.03572082519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9643672108650208, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.1445770263672, "t": 228.07118225097656, "r": 486.7213439941406, "b": 237.11375427246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9390786290168762, "cells": [{"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.01255798339844, "t": 254.04481506347656, "r": 542.73871, "b": 275.8885192871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9614978432655334, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.1894760131836, "t": 440.5732116699219, "r": 362.28131103515625, "b": 450.00302, "coord_origin": "TOPLEFT"}, "confidence": 0.952978253364563, "cells": [{"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 136.5155792236328, "t": 466.390380859375, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}, "confidence": 0.9474611878395081, "cells": [{"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.20401000976562, "t": 481.7389831542969, "r": 427.75647, "b": 492.3285217285156, "coord_origin": "TOPLEFT"}, "confidence": 0.9360538125038147, "cells": [{"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.66238403320312, "t": 498.4595947265625, "r": 530.67822, "b": 520.9165649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.960720956325531, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "caption", "bbox": {"l": 136.1230010986328, "t": 672.151611328125, "r": 278.20037841796875, "b": 681.5107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9520363211631775, "cells": [{"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 135.7608642578125, "t": 535.8259887695312, "r": 362.02239990234375, "b": 669.7214965820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9807249307632446, "cells": []}, {"id": 11, "label": "picture", "bbox": {"l": 64.11683654785156, "t": 289.6597900390625, "r": 546.5642700195312, "b": 438.1582946777344, "coord_origin": "TOPLEFT"}, "confidence": 0.9767975211143494, "cells": []}, {"id": 12, "label": "picture", "bbox": {"l": 136.23712158203125, "t": 107.2462158203125, "r": 385.9791564941406, "b": 225.44589233398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9731733202934265, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 83, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20339965820312, "t": 754.427978515625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9174648523330688, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "68"}, {"label": "page_footer", "id": 1, "page_no": 83, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34625244140625, "t": 754.708740234375, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526290893554688, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 83, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87147521972656, "t": 70.62814331054688, "r": 547.19379, "b": 93.03572082519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9643672108650208, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all."}, {"label": "caption", "id": 3, "page_no": 83, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.1445770263672, "t": 228.07118225097656, "r": 486.7213439941406, "b": 237.11375427246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9390786290168762, "cells": [{"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 83, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01255798339844, "t": 254.04481506347656, "r": 542.73871, "b": 275.8885192871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9614978432655334, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer."}, {"label": "caption", "id": 5, "page_no": 83, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.1894760131836, "t": 440.5732116699219, "r": 362.28131103515625, "b": 450.00302, "coord_origin": "TOPLEFT"}, "confidence": 0.952978253364563, "cells": [{"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results"}, {"label": "section_header", "id": 6, "page_no": 83, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.5155792236328, "t": 466.390380859375, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}, "confidence": 0.9474611878395081, "cells": [{"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for TELLER user with RCAC"}, {"label": "text", "id": 7, "page_no": 83, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.20401000976562, "t": 481.7389831542969, "r": 427.75647, "b": 492.3285217285156, "coord_origin": "TOPLEFT"}, "confidence": 0.9360538125038147, "cells": [{"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a Teller (TQSPENCER) user, complete the following steps:"}, {"label": "list_item", "id": 8, "page_no": 83, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.66238403320312, "t": 498.4595947265625, "r": 530.67822, "b": 520.9165649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.960720956325531, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user."}, {"label": "caption", "id": 9, "page_no": 83, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.1230010986328, "t": 672.151611328125, "r": 278.20037841796875, "b": 681.5107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9520363211631775, "cells": [{"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-53 TELLER session user"}, {"label": "picture", "id": 10, "page_no": 83, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.7608642578125, "t": 535.8259887695312, "r": 362.02239990234375, "b": 669.7214965820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9807249307632446, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 83, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.11683654785156, "t": 289.6597900390625, "r": 546.5642700195312, "b": 438.1582946777344, "coord_origin": "TOPLEFT"}, "confidence": 0.9767975211143494, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 83, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 136.23712158203125, "t": 107.2462158203125, "r": 385.9791564941406, "b": 225.44589233398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9731733202934265, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 83, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87147521972656, "t": 70.62814331054688, "r": 547.19379, "b": 93.03572082519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9643672108650208, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.05519, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the security officer can see is shown in ", "bbox": {"l": 147.8069, "t": 71.50867000000005, "r": 547.19379, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-51. The security officer cannot see any data at all.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 411.76868, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the security officer can see is shown in Figure 4-51. The security officer cannot see any data at all."}, {"label": "caption", "id": 3, "page_no": 83, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.1445770263672, "t": 228.07118225097656, "r": 486.7213439941406, "b": 237.11375427246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9390786290168762, "cells": [{"id": 5, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 228.61803999999995, "r": 486.40319999999997, "b": 236.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-51 Number of rows that the security officer can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 83, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01255798339844, "t": 254.04481506347656, "r": 542.73871, "b": 275.8885192871094, "coord_origin": "TOPLEFT"}, "confidence": 0.9614978432655334, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 254.56866000000002, "r": 145.20145, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is ", "bbox": {"l": 148.00191, "t": 254.56866000000002, "r": 542.73871, "b": 263.78168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "returned to the security officer.", "bbox": {"l": 151.20016, "t": 266.56848, "r": 286.06564, "b": 275.78148999999996, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-52. Note the empty set that is returned to the security officer."}, {"label": "caption", "id": 5, "page_no": 83, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.1894760131836, "t": 440.5732116699219, "r": 362.28131103515625, "b": 450.00302, "coord_origin": "TOPLEFT"}, "confidence": 0.952978253364563, "cells": [{"id": 9, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results", "bbox": {"l": 64.800003, "t": 441.67801, "r": 362.02679, "b": 450.00302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-52 SQL statement that is run by the SECURITY user - no results"}, {"label": "section_header", "id": 6, "page_no": 83, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 136.5155792236328, "t": 466.390380859375, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}, "confidence": 0.9474611878395081, "cells": [{"id": 10, "text": "Data access for TELLER user with RCAC", "bbox": {"l": 136.8, "t": 467.48401, "r": 368.64481, "b": 478.58401, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for TELLER user with RCAC"}, {"label": "text", "id": 7, "page_no": 83, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.20401000976562, "t": 481.7389831542969, "r": 427.75647, "b": 492.3285217285156, "coord_origin": "TOPLEFT"}, "confidence": 0.9360538125038147, "cells": [{"id": 11, "text": "To test a Teller (TQSPENCER) user, complete the following steps:", "bbox": {"l": 136.8, "t": 482.62872, "r": 427.75647, "b": 491.84171, "coord_origin": "TOPLEFT"}}]}, "text": "To test a Teller (TQSPENCER) user, complete the following steps:"}, {"label": "list_item", "id": 8, "page_no": 83, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.66238403320312, "t": 498.4595947265625, "r": 530.67822, "b": 520.9165649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.960720956325531, "cells": [{"id": 12, "text": "1.", "bbox": {"l": 136.79999, "t": 499.60852, "r": 145.21622, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Confirm that the TELLER user is the user of the session by running the first SQL ", "bbox": {"l": 148.02162, "t": 499.60852, "r": 509.23330999999996, "b": 508.8215, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user.", "bbox": {"l": 151.20015, "t": 511.60834, "r": 530.67822, "b": 520.82132, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the TELLER user is the user of the session by running the first SQL statement, as shown in Figure 4-53. In this example, TQSPENCER is a TELLER user."}, {"label": "caption", "id": 9, "page_no": 83, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.1230010986328, "t": 672.151611328125, "r": 278.20037841796875, "b": 681.5107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9520363211631775, "cells": [{"id": 15, "text": "Figure 4-53 TELLER session user", "bbox": {"l": 136.8, "t": 672.8579, "r": 277.11722, "b": 681.1829, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-53 TELLER session user"}, {"label": "picture", "id": 10, "page_no": 83, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.7608642578125, "t": 535.8259887695312, "r": 362.02239990234375, "b": 669.7214965820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9807249307632446, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 83, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.11683654785156, "t": 289.6597900390625, "r": 546.5642700195312, "b": 438.1582946777344, "coord_origin": "TOPLEFT"}, "confidence": 0.9767975211143494, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 12, "page_no": 83, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 136.23712158203125, "t": 107.2462158203125, "r": 385.9791564941406, "b": 225.44589233398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9731733202934265, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 83, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.20339965820312, "t": 754.427978515625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9174648523330688, "cells": [{"id": 0, "text": "68 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "68"}, {"label": "page_footer", "id": 1, "page_no": 83, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34625244140625, "t": 754.708740234375, "r": 334.42142, "b": 763.9661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526290893554688, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 84, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.29336547851562, "t": 754.7902221679688, "r": 523.59357, "b": 763.9354248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9566875696182251, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5740966796875, "t": 754.166259765625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140955209732056, "cells": [{"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.8011474609375, "t": 70.60009765625, "r": 547.24017, "b": 92.9535140991211, "coord_origin": "TOPLEFT"}, "confidence": 0.953477680683136, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.62548828125, "t": 221.36160278320312, "r": 482.5060729980469, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9344339370727539, "cells": [{"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.01345825195312, "t": 247.20472717285156, "r": 547.29144, "b": 281.66132, "coord_origin": "TOPLEFT"}, "confidence": 0.9552950263023376, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.17078399658203, "t": 672.1625366210938, "r": 391.8590393066406, "b": 681.483, "coord_origin": "TOPLEFT"}, "confidence": 0.9434057474136353, "cells": [{"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.92535400390625, "t": 107.52780151367188, "r": 388.818115234375, "b": 219.1571807861328, "coord_origin": "TOPLEFT"}, "confidence": 0.9634679555892944, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.41838073730469, "t": 296.1629638671875, "r": 548.2760009765625, "b": 670.6256713867188, "coord_origin": "TOPLEFT"}, "confidence": 0.7070707678794861, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 84, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29336547851562, "t": 754.7902221679688, "r": 523.59357, "b": 763.9354248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9566875696182251, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 84, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5740966796875, "t": 754.166259765625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140955209732056, "cells": [{"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "69"}, {"label": "list_item", "id": 2, "page_no": 84, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.8011474609375, "t": 70.60009765625, "r": 547.24017, "b": 92.9535140991211, "coord_origin": "TOPLEFT"}, "confidence": 0.953477680683136, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows."}, {"label": "caption", "id": 3, "page_no": 84, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.62548828125, "t": 221.36160278320312, "r": 482.5060729980469, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9344339370727539, "cells": [{"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 84, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01345825195312, "t": 247.20472717285156, "r": 547.29144, "b": 281.66132, "coord_origin": "TOPLEFT"}, "confidence": 0.9552950263023376, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked."}, {"label": "caption", "id": 5, "page_no": 84, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.17078399658203, "t": 672.1625366210938, "r": 391.8590393066406, "b": 681.483, "coord_origin": "TOPLEFT"}, "confidence": 0.9434057474136353, "cells": [{"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns"}, {"label": "picture", "id": 6, "page_no": 84, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.92535400390625, "t": 107.52780151367188, "r": 388.818115234375, "b": 219.1571807861328, "coord_origin": "TOPLEFT"}, "confidence": 0.9634679555892944, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 84, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.41838073730469, "t": 296.1629638671875, "r": 548.2760009765625, "b": 670.6256713867188, "coord_origin": "TOPLEFT"}, "confidence": 0.7070707678794861, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 84, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.8011474609375, "t": 70.60009765625, "r": 547.24017, "b": 92.9535140991211, "coord_origin": "TOPLEFT"}, "confidence": 0.953477680683136, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.1451, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The number of rows in the CUSTOMERS table that the TELLER user can see is shown in ", "bbox": {"l": 147.92693, "t": 71.50903000000005, "r": 547.24017, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-54. The TELLER user can see all the rows.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 381.47095, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows in the CUSTOMERS table that the TELLER user can see is shown in Figure 4-54. The TELLER user can see all the rows."}, {"label": "caption", "id": 3, "page_no": 84, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.62548828125, "t": 221.36160278320312, "r": 482.5060729980469, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9344339370727539, "cells": [{"id": 5, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 222.49805000000003, "r": 482.17749, "b": 230.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-54 Number of rows that the TELLER user can see in the CUSTOMERS table"}, {"label": "list_item", "id": 4, "page_no": 84, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.01345825195312, "t": 247.20472717285156, "r": 547.29144, "b": 281.66132, "coord_origin": "TOPLEFT"}, "confidence": 0.9552950263023376, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 248.44867, "r": 145.19176, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. ", "bbox": {"l": 147.98898, "t": 248.44867, "r": 547.29144, "b": 257.66168000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The TELLER user, TQSPENSER, can see all the rows, but there are some columns where ", "bbox": {"l": 151.20016, "t": 260.44849, "r": 547.20081, "b": 269.66150000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the result is masked.", "bbox": {"l": 151.20013, "t": 272.4483, "r": 242.59509, "b": 281.66132, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-55. Note the masked columns. The TELLER user, TQSPENSER, can see all the rows, but there are some columns where the result is masked."}, {"label": "caption", "id": 5, "page_no": 84, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.17078399658203, "t": 672.1625366210938, "r": 391.8590393066406, "b": 681.483, "coord_origin": "TOPLEFT"}, "confidence": 0.9434057474136353, "cells": [{"id": 10, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns", "bbox": {"l": 64.800003, "t": 673.158, "r": 391.66644, "b": 681.483, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-55 SQL statement that is run by the TELLER user with masked columns"}, {"label": "picture", "id": 6, "page_no": 84, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.92535400390625, "t": 107.52780151367188, "r": 388.818115234375, "b": 219.1571807861328, "coord_origin": "TOPLEFT"}, "confidence": 0.9634679555892944, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 84, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.41838073730469, "t": 296.1629638671875, "r": 548.2760009765625, "b": 670.6256713867188, "coord_origin": "TOPLEFT"}, "confidence": 0.7070707678794861, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 84, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29336547851562, "t": 754.7902221679688, "r": 523.59357, "b": 763.9354248046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9566875696182251, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 84, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5740966796875, "t": 754.166259765625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9140955209732056, "cells": [{"id": 1, "text": "69", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "69"}]}}, {"page_no": 85, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.99982833862305, "t": 754.1723022460938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086830019950867, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.3930892944336, "t": 754.6930541992188, "r": 334.42142, "b": 763.9622192382812, "coord_origin": "TOPLEFT"}, "confidence": 0.9444864988327026, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 136.52813720703125, "t": 70.49939727783203, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9242165684700012, "cells": [{"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.3176727294922, "t": 85.13993835449219, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9380269646644592, "cells": [{"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 102.55648040771484, "r": 547.23853, "b": 125.00703430175781, "coord_origin": "TOPLEFT"}, "confidence": 0.9487622976303101, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.44989013671875, "t": 224.8011932373047, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8895819187164307, "cells": [{"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.9615936279297, "t": 250.71633911132812, "r": 537.45203, "b": 272.96155, "coord_origin": "TOPLEFT"}, "confidence": 0.9431179761886597, "cells": [{"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.13417053222656, "t": 371.2900695800781, "r": 457.3196716308594, "b": 380.5198974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9259661436080933, "cells": [{"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.3792266845703, "t": 287.3948059082031, "r": 382.5545654296875, "b": 368.70892333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7004774212837219, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 136.20846557617188, "t": 138.96017456054688, "r": 352.89752197265625, "b": 222.64027404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.6416024565696716, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 85, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.99982833862305, "t": 754.1723022460938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086830019950867, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "70"}, {"label": "page_footer", "id": 1, "page_no": 85, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3930892944336, "t": 754.6930541992188, "r": 334.42142, "b": 763.9622192382812, "coord_origin": "TOPLEFT"}, "confidence": 0.9444864988327026, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 85, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.52813720703125, "t": 70.49939727783203, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9242165684700012, "cells": [{"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for ADMIN user with RCAC"}, {"label": "text", "id": 3, "page_no": 85, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3176727294922, "t": 85.13993835449219, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9380269646644592, "cells": [{"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 85, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 102.55648040771484, "r": 547.23853, "b": 125.00703430175781, "coord_origin": "TOPLEFT"}, "confidence": 0.9487622976303101, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user."}, {"label": "caption", "id": 5, "page_no": 85, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.44989013671875, "t": 224.8011932373047, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8895819187164307, "cells": [{"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-56 ADMIN session user"}, {"label": "list_item", "id": 6, "page_no": 85, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.9615936279297, "t": 250.71633911132812, "r": 537.45203, "b": 272.96155, "coord_origin": "TOPLEFT"}, "confidence": 0.9431179761886597, "cells": [{"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows."}, {"label": "caption", "id": 7, "page_no": 85, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13417053222656, "t": 371.2900695800781, "r": 457.3196716308594, "b": 380.5198974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9259661436080933, "cells": [{"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 85, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.3792266845703, "t": 287.3948059082031, "r": 382.5545654296875, "b": 368.70892333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7004774212837219, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 85, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.20846557617188, "t": 138.96017456054688, "r": 352.89752197265625, "b": 222.64027404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.6416024565696716, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 85, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.52813720703125, "t": 70.49939727783203, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9242165684700012, "cells": [{"id": 2, "text": "Data access for ADMIN user with RCAC", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 361.2876, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for ADMIN user with RCAC"}, {"label": "text", "id": 3, "page_no": 85, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.3176727294922, "t": 85.13993835449219, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9380269646644592, "cells": [{"id": 3, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 448.12963999999994, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "To test an ADMIN (VGLUCCHESS) user, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 85, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 102.55648040771484, "r": 547.23853, "b": 125.00703430175781, "coord_origin": "TOPLEFT"}, "confidence": 0.9487622976303101, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 103.48845999999992, "r": 145.08908, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Confirm that the ADMIN user is the user of the session by running the first SQL statement, ", "bbox": {"l": 147.8521, "t": 103.48845999999992, "r": 547.23853, "b": 112.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user.", "bbox": {"l": 151.20016, "t": 115.48828000000003, "r": 487.41986, "b": 124.70129000000009, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the ADMIN user is the user of the session by running the first SQL statement, as shown in Figure 4-56. In this example, VGLUCCHESS is an ADMIN user."}, {"label": "caption", "id": 5, "page_no": 85, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.44989013671875, "t": 224.8011932373047, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8895819187164307, "cells": [{"id": 7, "text": "Figure 4-56 ADMIN session user ", "bbox": {"l": 136.8, "t": 225.79803000000004, "r": 274.63858, "b": 234.12298999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-56 ADMIN session user"}, {"label": "list_item", "id": 6, "page_no": 85, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.9615936279297, "t": 250.71633911132812, "r": 537.45203, "b": 272.96155, "coord_origin": "TOPLEFT"}, "confidence": 0.9431179761886597, "cells": [{"id": 8, "text": "2.", "bbox": {"l": 136.8, "t": 251.74872000000005, "r": 145.19705, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN ", "bbox": {"l": 147.99605, "t": 251.74872000000005, "r": 537.45203, "b": 260.96173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "user can see all the rows.", "bbox": {"l": 151.20016, "t": 263.74854000000005, "r": 264.17142, "b": 272.96155, "coord_origin": "TOPLEFT"}}]}, "text": "2. The number of rows that the ADMIN user can see is shown in Figure 4-57. The ADMIN user can see all the rows."}, {"label": "caption", "id": 7, "page_no": 85, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13417053222656, "t": 371.2900695800781, "r": 457.3196716308594, "b": 380.5198974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9259661436080933, "cells": [{"id": 11, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 372.138, "r": 457.1981799999999, "b": 380.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-57 Number of rows that the ADMIN can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 85, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.3792266845703, "t": 287.3948059082031, "r": 382.5545654296875, "b": 368.70892333984375, "coord_origin": "TOPLEFT"}, "confidence": 0.7004774212837219, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 85, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.20846557617188, "t": 138.96017456054688, "r": 352.89752197265625, "b": 222.64027404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.6416024565696716, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 85, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.99982833862305, "t": 754.1723022460938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9086830019950867, "cells": [{"id": 0, "text": "70 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "70"}, {"label": "page_footer", "id": 1, "page_no": 85, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3930892944336, "t": 754.6930541992188, "r": 334.42142, "b": 763.9622192382812, "coord_origin": "TOPLEFT"}, "confidence": 0.9444864988327026, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 86, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.297607421875, "t": 754.7944946289062, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9579306244850159, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.4384765625, "t": 754.1445922851562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092021584510803, "cells": [{"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.0950164794922, "t": 70.5864028930664, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9504329562187195, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.27821350097656, "t": 478.5440979003906, "r": 386.91961669921875, "b": 488.0338134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9340198636054993, "cells": [{"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.49583435058594, "t": 504.4722595214844, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9497081637382507, "cells": [{"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1496124267578, "t": 519.399169921875, "r": 527.58466, "b": 541.5465698242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9660984873771667, "cells": [{"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.61180114746094, "t": 548.59814453125, "r": 531.48303, "b": 571.005126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9623847007751465, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.1943817138672, "t": 675.9807739257812, "r": 289.5948791503906, "b": 685.4607543945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9459738731384277, "cells": [{"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.11729431152344, "t": 584.64208984375, "r": 354.23046875, "b": 673.7885131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.949955403804779, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 86, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.297607421875, "t": 754.7944946289062, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9579306244850159, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 86, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4384765625, "t": 754.1445922851562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092021584510803, "cells": [{"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "71"}, {"label": "list_item", "id": 2, "page_no": 86, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0950164794922, "t": 70.5864028930664, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9504329562187195, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns."}, {"label": "caption", "id": 3, "page_no": 86, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27821350097656, "t": 478.5440979003906, "r": 386.91961669921875, "b": 488.0338134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9340198636054993, "cells": [{"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 86, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.49583435058594, "t": 504.4722595214844, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9497081637382507, "cells": [{"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for WEBUSER user with RCAC"}, {"label": "text", "id": 5, "page_no": 86, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1496124267578, "t": 519.399169921875, "r": 527.58466, "b": 541.5465698242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9660984873771667, "cells": [{"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}]}, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 86, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.61180114746094, "t": 548.59814453125, "r": 531.48303, "b": 571.005126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9623847007751465, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user."}, {"label": "caption", "id": 7, "page_no": 86, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1943817138672, "t": 675.9807739257812, "r": 289.5948791503906, "b": 685.4607543945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9459738731384277, "cells": [{"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-59 WEBUSER session user"}, {"label": "picture", "id": 8, "page_no": 86, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.11729431152344, "t": 584.64208984375, "r": 354.23046875, "b": 673.7885131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.949955403804779, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 86, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.0950164794922, "t": 70.5864028930664, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9504329562187195, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-58. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 191.06964, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. The result of the third SQL statement is shown in Figure 4-58. There are no masked columns."}, {"label": "caption", "id": 3, "page_no": 86, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27821350097656, "t": 478.5440979003906, "r": 386.91961669921875, "b": 488.0338134765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9340198636054993, "cells": [{"id": 5, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns", "bbox": {"l": 64.800003, "t": 479.298, "r": 386.27728, "b": 487.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-58 SQL statement that is run by the ADMIN user - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 86, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.49583435058594, "t": 504.4722595214844, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9497081637382507, "cells": [{"id": 6, "text": "Data access for WEBUSER user with RCAC", "bbox": {"l": 136.8, "t": 505.10391, "r": 383.07721, "b": 516.2039199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data access for WEBUSER user with RCAC"}, {"label": "text", "id": 5, "page_no": 86, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1496124267578, "t": 519.399169921875, "r": 527.58466, "b": 541.5465698242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9660984873771667, "cells": [{"id": 7, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web ", "bbox": {"l": 136.8, "t": 520.24872, "r": 527.58466, "b": 529.4617000000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "application, complete the following steps:", "bbox": {"l": 136.80002, "t": 532.2484999999999, "r": 317.9585, "b": 541.4615200000001, "coord_origin": "TOPLEFT"}}]}, "text": "To test a CUSTOMERS (WEBUSER) user that accesses the database by using the web application, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 86, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.61180114746094, "t": 548.59814453125, "r": 531.48303, "b": 571.005126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9623847007751465, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.80002, "t": 549.28809, "r": 145.21213, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Confirm that the user is the user of the session by running the first SQL statement, as ", "bbox": {"l": 148.01616, "t": 549.28809, "r": 531.48303, "b": 558.50108, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user.", "bbox": {"l": 151.20018, "t": 561.2878900000001, "r": 475.2537500000001, "b": 570.50089, "coord_origin": "TOPLEFT"}}]}, "text": "1. Confirm that the user is the user of the session by running the first SQL statement, as shown in Figure 4-59. In this example, WEBUSER is a CUSTOMER user."}, {"label": "caption", "id": 7, "page_no": 86, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.1943817138672, "t": 675.9807739257812, "r": 289.5948791503906, "b": 685.4607543945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9459738731384277, "cells": [{"id": 12, "text": "Figure 4-59 WEBUSER session user", "bbox": {"l": 136.8, "t": 676.998, "r": 288.54453, "b": 685.323, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-59 WEBUSER session user"}, {"label": "picture", "id": 8, "page_no": 86, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.11729431152344, "t": 584.64208984375, "r": 354.23046875, "b": 673.7885131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.949955403804779, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 86, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.297607421875, "t": 754.7944946289062, "r": 523.59357, "b": 763.9957275390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9579306244850159, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 86, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4384765625, "t": 754.1445922851562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092021584510803, "cells": [{"id": 1, "text": "71", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "71"}]}}, {"page_no": 87, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.95808410644531, "t": 754.2484130859375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9073862433433533, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32298278808594, "t": 754.67529296875, "r": 334.42142, "b": 764.010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9502434730529785, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.97177124023438, "t": 70.53437042236328, "r": 547.29254, "b": 105.20692443847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9725183844566345, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.13768005371094, "t": 223.07266235351562, "r": 394.4398498535156, "b": 232.92161560058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9459361433982849, "cells": [{"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.97732543945312, "t": 249.29721069335938, "r": 514.37964, "b": 271.60693359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9487968683242798, "cells": [{"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.13868713378906, "t": 521.3612060546875, "r": 320.7819519042969, "b": 530.787841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9481346607208252, "cells": [{"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.78077697753906, "t": 547.3094482421875, "r": 541.26068, "b": 569.7304077148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9655671715736389, "cells": [{"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.2648468017578, "t": 685.8698120117188, "r": 474.20855712890625, "b": 695.402901, "coord_origin": "TOPLEFT"}, "confidence": 0.9365612864494324, "cells": [{"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 136.12271118164062, "t": 285.7159118652344, "r": 395.9803466796875, "b": 519.3853149414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9821423888206482, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 136.00576782226562, "t": 584.1505737304688, "r": 382.0115966796875, "b": 684.032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9579524993896484, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 135.9663848876953, "t": 119.12814331054688, "r": 547.538818359375, "b": 221.56602478027344, "coord_origin": "TOPLEFT"}, "confidence": 0.9356961846351624, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 87, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95808410644531, "t": 754.2484130859375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9073862433433533, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "72"}, {"label": "page_footer", "id": 1, "page_no": 87, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32298278808594, "t": 754.67529296875, "r": 334.42142, "b": 764.010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9502434730529785, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 87, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97177124023438, "t": 70.53437042236328, "r": 547.29254, "b": 105.20692443847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9725183844566345, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID."}, {"label": "caption", "id": 3, "page_no": 87, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13768005371094, "t": 223.07266235351562, "r": 394.4398498535156, "b": 232.92161560058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9459361433982849, "cells": [{"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID"}, {"label": "list_item", "id": 4, "page_no": 87, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.97732543945312, "t": 249.29721069335938, "r": 514.37964, "b": 271.60693359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9487968683242798, "cells": [{"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}]}, "text": "3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61."}, {"label": "caption", "id": 5, "page_no": 87, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.13868713378906, "t": 521.3612060546875, "r": 320.7819519042969, "b": 530.787841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9481346607208252, "cells": [{"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-61 Viewing the global variable value"}, {"label": "list_item", "id": 6, "page_no": 87, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78077697753906, "t": 547.3094482421875, "r": 541.26068, "b": 569.7304077148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9655671715736389, "cells": [{"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}]}, "text": "4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID."}, {"label": "caption", "id": 7, "page_no": 87, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.2648468017578, "t": 685.8698120117188, "r": 474.20855712890625, "b": 695.402901, "coord_origin": "TOPLEFT"}, "confidence": 0.9365612864494324, "cells": [{"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 87, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.12271118164062, "t": 285.7159118652344, "r": 395.9803466796875, "b": 519.3853149414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9821423888206482, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 87, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.00576782226562, "t": 584.1505737304688, "r": 382.0115966796875, "b": 684.032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9579524993896484, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 87, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.9663848876953, "t": 119.12814331054688, "r": 547.538818359375, "b": 221.56602478027344, "coord_origin": "TOPLEFT"}, "confidence": 0.9356961846351624, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 87, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.97177124023438, "t": 70.53437042236328, "r": 547.29254, "b": 105.20692443847656, "coord_origin": "TOPLEFT"}, "confidence": 0.9725183844566345, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.13539, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used ", "bbox": {"l": 147.91383, "t": 71.50867000000005, "r": 547.29254, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "to check the row permissions. Figure 4-60 shows setting the global variable by using the ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 542.53851, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "customer login ID.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 231.01662000000002, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. A global variable (CUSTOMER_LOGIN_ID) is set by the web application and then is used to check the row permissions. Figure 4-60 shows setting the global variable by using the customer login ID."}, {"label": "caption", "id": 3, "page_no": 87, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.13768005371094, "t": 223.07266235351562, "r": 394.4398498535156, "b": 232.92161560058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9459361433982849, "cells": [{"id": 6, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID", "bbox": {"l": 136.8, "t": 224.41803000000004, "r": 393.9201, "b": 232.74298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-60 Setting the global variable CUSTOMER_LOGIN_ID"}, {"label": "list_item", "id": 4, "page_no": 87, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.97732543945312, "t": 249.29721069335938, "r": 514.37964, "b": 271.60693359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9487968683242798, "cells": [{"id": 7, "text": "3.", "bbox": {"l": 136.8, "t": 250.36870999999996, "r": 145.17363, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Verify that the global variable was set with the correct value by clicking the ", "bbox": {"l": 147.96483, "t": 250.36870999999996, "r": 480.55042, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Global ", "bbox": {"l": 480.53955, "t": 250.36870999999996, "r": 514.37964, "b": 259.58173, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Variable", "bbox": {"l": 151.19922, "t": 262.36852999999996, "r": 188.79124, "b": 271.58154, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " tab, as shown in Figure 4-61.", "bbox": {"l": 189.35896, "t": 262.36852999999996, "r": 320.52722, "b": 271.58154, "coord_origin": "TOPLEFT"}}]}, "text": "3. Verify that the global variable was set with the correct value by clicking the Global Variable tab, as shown in Figure 4-61."}, {"label": "caption", "id": 5, "page_no": 87, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.13868713378906, "t": 521.3612060546875, "r": 320.7819519042969, "b": 530.787841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9481346607208252, "cells": [{"id": 12, "text": "Figure 4-61 Viewing the global variable value", "bbox": {"l": 136.8, "t": 522.31799, "r": 320.45041, "b": 530.64301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-61 Viewing the global variable value"}, {"label": "list_item", "id": 6, "page_no": 87, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78077697753906, "t": 547.3094482421875, "r": 541.26068, "b": 569.7304077148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9655671715736389, "cells": [{"id": 13, "text": "4.", "bbox": {"l": 136.8, "t": 548.26872, "r": 145.19461, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can ", "bbox": {"l": 147.99278, "t": 548.26872, "r": 541.26068, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "see only the one row that belongs to his web-based user ID.", "bbox": {"l": 151.20018, "t": 560.2685200000001, "r": 415.91998, "b": 569.48152, "coord_origin": "TOPLEFT"}}]}, "text": "4. The number of rows that the WEBUSER can see is shown in Figure 4-62. This user can see only the one row that belongs to his web-based user ID."}, {"label": "caption", "id": 7, "page_no": 87, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.2648468017578, "t": 685.8698120117188, "r": 474.20855712890625, "b": 695.402901, "coord_origin": "TOPLEFT"}, "confidence": 0.9365612864494324, "cells": [{"id": 16, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table", "bbox": {"l": 136.8, "t": 687.0779, "r": 473.70947, "b": 695.402901, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-62 Number of rows that the WEBUSER can see in the CUSTOMERS table"}, {"label": "picture", "id": 8, "page_no": 87, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 136.12271118164062, "t": 285.7159118652344, "r": 395.9803466796875, "b": 519.3853149414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9821423888206482, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 87, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.00576782226562, "t": 584.1505737304688, "r": 382.0115966796875, "b": 684.032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9579524993896484, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 87, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 135.9663848876953, "t": 119.12814331054688, "r": 547.538818359375, "b": 221.56602478027344, "coord_origin": "TOPLEFT"}, "confidence": 0.9356961846351624, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 87, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95808410644531, "t": 754.2484130859375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9073862433433533, "cells": [{"id": 0, "text": "72 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "72"}, {"label": "page_footer", "id": 1, "page_no": 87, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32298278808594, "t": 754.67529296875, "r": 334.42142, "b": 764.010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9502434730529785, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 88, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.31243896484375, "t": 754.7880249023438, "r": 523.59357, "b": 764.0306396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9599050283432007, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3995361328125, "t": 754.3471069335938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170706868171692, "cells": [{"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.2493438720703, "t": 70.56134033203125, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9599125981330872, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.18749237060547, "t": 252.73291015625, "r": 368.2061462402344, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9425347447395325, "cells": [{"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.10256958007812, "t": 278.1611328125, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.956287682056427, "cells": [{"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.91213989257812, "t": 293.9790344238281, "r": 512.95129, "b": 316.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9553588032722473, "cells": [{"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5059051513672, "t": 322.4664001464844, "r": 535.26086, "b": 356.90073, "coord_origin": "TOPLEFT"}, "confidence": 0.9514802098274231, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.13351440429688, "t": 544.0534057617188, "r": 520.2975463867188, "b": 553.3374633789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9272187948226929, "cells": [{"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 64.07161712646484, "t": 107.4771728515625, "r": 546.6607055664062, "b": 250.95677185058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9455775618553162, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 88, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31243896484375, "t": 754.7880249023438, "r": 523.59357, "b": 764.0306396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9599050283432007, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 88, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3995361328125, "t": 754.3471069335938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170706868171692, "cells": [{"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "73"}, {"label": "list_item", "id": 2, "page_no": 88, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.2493438720703, "t": 70.56134033203125, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9599125981330872, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user\u2019s own row."}, {"label": "caption", "id": 3, "page_no": 88, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.18749237060547, "t": 252.73291015625, "r": 368.2061462402344, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9425347447395325, "cells": [{"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 88, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.10256958007812, "t": 278.1611328125, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.956287682056427, "cells": [{"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Other examples of data access with RCAC"}, {"label": "text", "id": 5, "page_no": 88, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.91213989257812, "t": 293.9790344238281, "r": 512.95129, "b": 316.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9553588032722473, "cells": [{"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}]}, "text": "To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 88, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5059051513672, "t": 322.4664001464844, "r": 535.26086, "b": 356.90073, "coord_origin": "TOPLEFT"}, "confidence": 0.9514802098274231, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts."}, {"label": "caption", "id": 7, "page_no": 88, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13351440429688, "t": 544.0534057617188, "r": 520.2975463867188, "b": 553.3374633789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9272187948226929, "cells": [{"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile"}, {"label": "picture", "id": 8, "page_no": 88, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.07161712646484, "t": 107.4771728515625, "r": 546.6607055664062, "b": 250.95677185058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9455775618553162, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 88, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.2493438720703, "t": 70.56134033203125, "r": 524.19788, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9599125981330872, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19983, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The result of the third SQL statement is shown in Figure 4-63. There are no masked ", "bbox": {"l": 147.99991, "t": 71.50903000000005, "r": 524.19788, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "columns, and the user can see only one row, which is the user\u2019s own row.", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 474.59003, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. The result of the third SQL statement is shown in Figure 4-63. There are no masked columns, and the user can see only one row, which is the user\u2019s own row."}, {"label": "caption", "id": 3, "page_no": 88, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.18749237060547, "t": 252.73291015625, "r": 368.2061462402344, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9425347447395325, "cells": [{"id": 5, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns", "bbox": {"l": 64.800003, "t": 253.69799999999998, "r": 367.66254, "b": 262.02295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-63 SQL statement that is run by WEBUSER - no masked columns"}, {"label": "section_header", "id": 4, "page_no": 88, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.10256958007812, "t": 278.1611328125, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.956287682056427, "cells": [{"id": 6, "text": "Other examples of data access with RCAC", "bbox": {"l": 136.8, "t": 279.50397, "r": 377.4744, "b": 290.60400000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Other examples of data access with RCAC"}, {"label": "text", "id": 5, "page_no": 88, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.91213989257812, "t": 293.9790344238281, "r": 512.95129, "b": 316.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9553588032722473, "cells": [{"id": 7, "text": "To run an SQL statement that lists all the accounts and current balance by customer, ", "bbox": {"l": 136.8, "t": 294.64871, "r": 512.95129, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "complete the following steps:", "bbox": {"l": 136.8, "t": 306.64853, "r": 264.64957, "b": 315.86151, "coord_origin": "TOPLEFT"}}]}, "text": "To run an SQL statement that lists all the accounts and current balance by customer, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 88, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5059051513672, "t": 322.4664001464844, "r": 535.26086, "b": 356.90073, "coord_origin": "TOPLEFT"}, "confidence": 0.9514802098274231, "cells": [{"id": 9, "text": "1.", "bbox": {"l": 136.8, "t": 323.68811, "r": 145.19756, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. ", "bbox": {"l": 147.99672, "t": 323.68811, "r": 535.26086, "b": 332.90109000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The SQL statement has no WHERE clause, but the WEBUSER can see only his ", "bbox": {"l": 151.20016, "t": 335.68793, "r": 508.49417, "b": 344.90091, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "accounts.", "bbox": {"l": 151.20016, "t": 347.68774, "r": 193.7981, "b": 356.90073, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statement that is shown in Figure 4-64 using the WEBUSER user profile. The SQL statement has no WHERE clause, but the WEBUSER can see only his accounts."}, {"label": "caption", "id": 7, "page_no": 88, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.13351440429688, "t": 544.0534057617188, "r": 520.2975463867188, "b": 553.3374633789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9272187948226929, "cells": [{"id": 13, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile", "bbox": {"l": 136.8, "t": 544.81799, "r": 519.68433, "b": 553.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-64 List of accounts and current balance by customer using the WEBUSER user profile"}, {"label": "picture", "id": 8, "page_no": 88, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.07161712646484, "t": 107.4771728515625, "r": 546.6607055664062, "b": 250.95677185058594, "coord_origin": "TOPLEFT"}, "confidence": 0.9455775618553162, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 88, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.31243896484375, "t": 754.7880249023438, "r": 523.59357, "b": 764.0306396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9599050283432007, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 88, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3995361328125, "t": 754.3471069335938, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170706868171692, "cells": [{"id": 1, "text": "73", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "73"}]}}, {"page_no": 89, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.96171188354492, "t": 754.11767578125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9149019718170166, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27671813964844, "t": 754.632568359375, "r": 334.42142, "b": 764.0243530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9512301087379456, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.940185546875, "t": 70.60448455810547, "r": 547.25665, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9553778171539307, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.05810546875, "t": 501.21514892578125, "r": 535.08740234375, "b": 510.911376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9247013926506042, "cells": [{"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 89, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.96171188354492, "t": 754.11767578125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9149019718170166, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "74"}, {"label": "page_footer", "id": 1, "page_no": 89, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27671813964844, "t": 754.632568359375, "r": 334.42142, "b": 764.0243530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9512301087379456, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 89, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.940185546875, "t": 70.60448455810547, "r": 547.25665, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9553778171539307, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions."}, {"label": "caption", "id": 3, "page_no": 89, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.05810546875, "t": 501.21514892578125, "r": 535.08740234375, "b": 510.911376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9247013926506042, "cells": [{"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile"}], "body": [{"label": "list_item", "id": 2, "page_no": 89, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.940185546875, "t": 70.60448455810547, "r": 547.25665, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9553778171539307, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.19731, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-65 shows running a more complex SQL statement that calculates transaction ", "bbox": {"l": 147.99638, "t": 71.50867000000005, "r": 533.56744, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "total by account for year and quarter. Run this statement using the WEBUSER profile. The ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.25665, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "SQL statement has no ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 253.40468, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 253.44055, "t": 95.65770999999995, "r": 278.4003, "b": 104.48230000000012, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause, but the WEBUSER user can see only his ", "bbox": {"l": 278.4003, "t": 95.50829999999996, "r": 498.4646000000001, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "transactions.", "bbox": {"l": 151.20013, "t": 107.50811999999996, "r": 207.61755, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-65 shows running a more complex SQL statement that calculates transaction total by account for year and quarter. Run this statement using the WEBUSER profile. The SQL statement has no WHERE clause, but the WEBUSER user can see only his transactions."}, {"label": "caption", "id": 3, "page_no": 89, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.05810546875, "t": 501.21514892578125, "r": 535.08740234375, "b": 510.911376953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9247013926506042, "cells": [{"id": 9, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile", "bbox": {"l": 136.8, "t": 502.2179, "r": 534.44336, "b": 510.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-65 Calculate transaction total by account for year and quarter using the WEBUSER profile"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 89, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.96171188354492, "t": 754.11767578125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9149019718170166, "cells": [{"id": 0, "text": "74 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "74"}, {"label": "page_footer", "id": 1, "page_no": 89, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27671813964844, "t": 754.632568359375, "r": 334.42142, "b": 764.0243530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9512301087379456, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 90, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.29998779296875, "t": 754.763427734375, "r": 523.59357, "b": 764.0404663085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9579424262046814, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.4443969726562, "t": 754.1858520507812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183679819107056, "cells": [{"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.18202209472656, "t": 70.665283203125, "r": 547.24005, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9646015167236328, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.2951202392578, "t": 492.5509033203125, "r": 501.49591064453125, "b": 502.1121826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9091576933860779, "cells": [{"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.09226989746094, "t": 521.0582885742188, "r": 375.06628, "b": 534.3353271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9637629389762878, "cells": [{"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.77622985839844, "t": 547.2048950195312, "r": 547.16693, "b": 593.8646850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9798411130905151, "cells": [{"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 90, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29998779296875, "t": 754.763427734375, "r": 523.59357, "b": 764.0404663085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9579424262046814, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 90, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4443969726562, "t": 754.1858520507812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183679819107056, "cells": [{"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "75"}, {"label": "list_item", "id": 2, "page_no": 90, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.18202209472656, "t": 70.665283203125, "r": 547.24005, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9646015167236328, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 90, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2951202392578, "t": 492.5509033203125, "r": 501.49591064453125, "b": 502.1121826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9091576933860779, "cells": [{"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile"}, {"label": "section_header", "id": 4, "page_no": 90, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.09226989746094, "t": 521.0582885742188, "r": 375.06628, "b": 534.3353271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9637629389762878, "cells": [{"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.11 Query implementation with RCAC activated"}, {"label": "text", "id": 5, "page_no": 90, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.77622985839844, "t": 547.2048950195312, "r": 547.16693, "b": 593.8646850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9798411130905151, "cells": [{"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}]}, "text": "This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer."}], "body": [{"label": "list_item", "id": 2, "page_no": 90, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.18202209472656, "t": 70.665283203125, "r": 547.24005, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9646015167236328, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.09937, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Run the same SQL statement that lists the accounts and current balance by customer, but ", "bbox": {"l": 147.86595, "t": 71.50903000000005, "r": 547.24005, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 547.12665, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "TELLER user can see all the rows in the CUSTOMERS table.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 422.51218, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Run the same SQL statement that lists the accounts and current balance by customer, but use a TELLER user profile. The result of this SQL statement is shown in Figure 4-66. The TELLER user can see all the rows in the CUSTOMERS table."}, {"label": "caption", "id": 3, "page_no": 90, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2951202392578, "t": 492.5509033203125, "r": 501.49591064453125, "b": 502.1121826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9091576933860779, "cells": [{"id": 6, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile", "bbox": {"l": 136.8, "t": 493.27789, "r": 500.70490000000007, "b": 501.60291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-66 List of accounts and current balance by customer using a TELLER user profile"}, {"label": "section_header", "id": 4, "page_no": 90, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.09226989746094, "t": 521.0582885742188, "r": 375.06628, "b": 534.3353271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9637629389762878, "cells": [{"id": 7, "text": "4.3.11", "bbox": {"l": 64.800003, "t": 522.11475, "r": 101.23562, "b": 534.10272, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Query implementation with RCAC activated", "bbox": {"l": 104.87917, "t": 522.11475, "r": 375.06628, "b": 534.10272, "coord_origin": "TOPLEFT"}}]}, "text": "4.3.11 Query implementation with RCAC activated"}, {"label": "text", "id": 5, "page_no": 90, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.77622985839844, "t": 547.2048950195312, "r": 547.16693, "b": 593.8646850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9798411130905151, "cells": [{"id": 9, "text": "This section looks at some other interesting information that is related to RCAC by comparing ", "bbox": {"l": 136.8, "t": 548.26872, "r": 547.16693, "b": 557.48172, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the access plans of the same SQL statement without RCAC and with RCAC. This example ", "bbox": {"l": 136.80002, "t": 560.2685200000001, "r": 538.92499, "b": 569.48152, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "uses Visual Explain and runs an SQL statement that lists the accounts and current balance ", "bbox": {"l": 136.80002, "t": 572.26833, "r": 541.53564, "b": 581.48132, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by customer.", "bbox": {"l": 136.80002, "t": 584.26813, "r": 193.24632, "b": 593.48112, "coord_origin": "TOPLEFT"}}]}, "text": "This section looks at some other interesting information that is related to RCAC by comparing the access plans of the same SQL statement without RCAC and with RCAC. This example uses Visual Explain and runs an SQL statement that lists the accounts and current balance by customer."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 90, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.29998779296875, "t": 754.763427734375, "r": 523.59357, "b": 764.0404663085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9579424262046814, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 90, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.4443969726562, "t": 754.1858520507812, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183679819107056, "cells": [{"id": 1, "text": "75", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "75"}]}}, {"page_no": 91, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.95058822631836, "t": 754.2190551757812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9133445024490356, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32958221435547, "t": 754.64501953125, "r": 334.42142, "b": 763.9790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.952595591545105, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 136.1143798828125, "t": 70.55393981933594, "r": 266.86069, "b": 81.28746795654297, "coord_origin": "TOPLEFT"}, "confidence": 0.7829880118370056, "cells": [{"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.79046630859375, "t": 87.4289321899414, "r": 532.47498, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9777867794036865, "cells": [{"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.02316284179688, "t": 500.6075134277344, "r": 340.572021484375, "b": 510.297119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476897120475769, "cells": [{"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.32431030273438, "t": 135.9857940673828, "r": 399.8092956542969, "b": 498.6230773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9861094355583191, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 91, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95058822631836, "t": 754.2190551757812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9133445024490356, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "76"}, {"label": "page_footer", "id": 1, "page_no": 91, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32958221435547, "t": 754.64501953125, "r": 334.42142, "b": 763.9790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.952595591545105, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 91, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.1143798828125, "t": 70.55393981933594, "r": 266.86069, "b": 81.28746795654297, "coord_origin": "TOPLEFT"}, "confidence": 0.7829880118370056, "cells": [{"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 91, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.79046630859375, "t": 87.4289321899414, "r": 532.47498, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9777867794036865, "cells": [{"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing."}, {"label": "caption", "id": 4, "page_no": 91, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.02316284179688, "t": 500.6075134277344, "r": 340.572021484375, "b": 510.297119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476897120475769, "cells": [{"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-67 Visual Explain with no RCAC enabled"}, {"label": "picture", "id": 5, "page_no": 91, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.32431030273438, "t": 135.9857940673828, "r": 399.8092956542969, "b": 498.6230773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9861094355583191, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 91, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.1143798828125, "t": 70.55393981933594, "r": 266.86069, "b": 81.28746795654297, "coord_origin": "TOPLEFT"}, "confidence": 0.7829880118370056, "cells": [{"id": 2, "text": "Complete the following steps:", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 266.86069, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Complete the following steps:"}, {"label": "list_item", "id": 3, "page_no": 91, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.79046630859375, "t": 87.4289321899414, "r": 532.47498, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9777867794036865, "cells": [{"id": 3, "text": "1.", "bbox": {"l": 136.8, "t": 88.48845999999992, "r": 145.19209, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The ", "bbox": {"l": 147.98944, "t": 88.48845999999992, "r": 503.11377, "b": 97.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementation of the SQL statement is a two-way join, which is exactly what the SQL ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 532.47498, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "statement is doing.", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 235.12212, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "1. Figure 4-67 shows the SQL statement in Visual Explain ran with no RCAC. The implementation of the SQL statement is a two-way join, which is exactly what the SQL statement is doing."}, {"label": "caption", "id": 4, "page_no": 91, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.02316284179688, "t": 500.6075134277344, "r": 340.572021484375, "b": 510.297119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9476897120475769, "cells": [{"id": 7, "text": "Figure 4-67 Visual Explain with no RCAC enabled", "bbox": {"l": 136.8, "t": 501.73801, "r": 339.57263, "b": 510.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-67 Visual Explain with no RCAC enabled"}, {"label": "picture", "id": 5, "page_no": 91, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.32431030273438, "t": 135.9857940673828, "r": 399.8092956542969, "b": 498.6230773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9861094355583191, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 91, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95058822631836, "t": 754.2190551757812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9133445024490356, "cells": [{"id": 0, "text": "76 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "76"}, {"label": "page_footer", "id": 1, "page_no": 91, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32958221435547, "t": 754.64501953125, "r": 334.42142, "b": 763.9790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.952595591545105, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 92, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 92, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 92, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 92, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 92, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 92, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 92, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 92, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 92, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 92, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 92, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 92, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 92, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 92, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 92, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 92, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 92, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 93, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.94062805175781, "t": 754.1842651367188, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147760272026062, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.33392333984375, "t": 754.6708374023438, "r": 334.42142, "b": 763.9481811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9523293972015381, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.9367218017578, "t": 70.61515045166016, "r": 547.18872, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9803981184959412, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.2020263671875, "t": 238.3303680419922, "r": 249.87530517578125, "b": 247.58013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9492548704147339, "cells": [{"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 64.13593292236328, "t": 119.456298828125, "r": 508.70513916015625, "b": 234.94915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9820812344551086, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 93, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.94062805175781, "t": 754.1842651367188, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147760272026062, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "78"}, {"label": "page_footer", "id": 1, "page_no": 93, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33392333984375, "t": 754.6708374023438, "r": 334.42142, "b": 763.9481811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9523293972015381, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 93, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9367218017578, "t": 70.61515045166016, "r": 547.18872, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9803981184959412, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, \u201cIndex advisor\u201d on page 99."}, {"label": "caption", "id": 3, "page_no": 93, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.2020263671875, "t": 238.3303680419922, "r": 249.87530517578125, "b": 247.58013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9492548704147339, "cells": [{"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-70 Index advice with RCAC enabled"}, {"label": "picture", "id": 4, "page_no": 93, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.13593292236328, "t": 119.456298828125, "r": 508.70513916015625, "b": 234.94915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9820812344551086, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 93, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.9367218017578, "t": 70.61515045166016, "r": 547.18872, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9803981184959412, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.03265, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an ", "bbox": {"l": 147.77686, "t": 71.50867000000005, "r": 547.18872, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "additional index being advised, which is basically for the row permission rule. For more ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 535.9599, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information, see 6.4.2, \u201cIndex advisor\u201d on page 99.", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 374.21558, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Now, look at the advised indexes with RCAC enabled. As shown in Figure 4-70, there is an additional index being advised, which is basically for the row permission rule. For more information, see 6.4.2, \u201cIndex advisor\u201d on page 99."}, {"label": "caption", "id": 3, "page_no": 93, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.2020263671875, "t": 238.3303680419922, "r": 249.87530517578125, "b": 247.58013916015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9492548704147339, "cells": [{"id": 6, "text": "Figure 4-70 Index advice with RCAC enabled", "bbox": {"l": 64.800003, "t": 238.63800000000003, "r": 248.88689000000002, "b": 246.96294999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-70 Index advice with RCAC enabled"}, {"label": "picture", "id": 4, "page_no": 93, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.13593292236328, "t": 119.456298828125, "r": 508.70513916015625, "b": 234.94915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9820812344551086, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 93, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.94062805175781, "t": 754.1842651367188, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147760272026062, "cells": [{"id": 0, "text": "78 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "78"}, {"label": "page_footer", "id": 1, "page_no": 93, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.33392333984375, "t": 754.6708374023438, "r": 334.42142, "b": 763.9481811523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9523293972015381, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 94, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.744651794433594, "t": 754.7680053710938, "r": 257.24335, "b": 764.091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.949221134185791, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3575439453125, "t": 754.22607421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138334393501282, "cells": [{"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.33033752441406, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9421312808990479, "cells": [{"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.93673706054688, "t": 316.58636474609375, "r": 547.18188, "b": 386.9336242675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9848811626434326, "cells": [{"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.76991271972656, "t": 398.7801208496094, "r": 547.25549, "b": 432.91998, "coord_origin": "TOPLEFT"}, "confidence": 0.981573224067688, "cells": [{"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.10678100585938, "t": 444.8198547363281, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9355656504631042, "cells": [{"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8011016845703, "t": 462.3359680175781, "r": 254.56697, "b": 472.4132080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.946121335029602, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7434844970703, "t": 474.6011657714844, "r": 285.9834289550781, "b": 483.91916, "coord_origin": "TOPLEFT"}, "confidence": 0.9351681470870972, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.7656707763672, "t": 485.91131591796875, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}, "confidence": 0.9449910521507263, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.72933959960938, "t": 498.2069091796875, "r": 318.95844, "b": 508.3310852050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9523792862892151, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6404241919517517, "cells": [{"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "picture", "bbox": {"l": 32.17748260498047, "t": 70.54951477050781, "r": 239.63507080078125, "b": 238.013427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.7029868960380554, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 94, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.744651794433594, "t": 754.7680053710938, "r": 257.24335, "b": 764.091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.949221134185791, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 94, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3575439453125, "t": 754.22607421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138334393501282, "cells": [{"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "79"}, {"label": "text", "id": 2, "page_no": 94, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5."}, {"label": "section_header", "id": 3, "page_no": 94, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.33033752441406, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9421312808990479, "cells": [{"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC and non-SQL interfaces"}, {"label": "text", "id": 4, "page_no": 94, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93673706054688, "t": 316.58636474609375, "r": 547.18188, "b": 386.9336242675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9848811626434326, "cells": [{"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}]}, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF )."}, {"label": "text", "id": 5, "page_no": 94, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.76991271972656, "t": 398.7801208496094, "r": 547.25549, "b": 432.91998, "coord_origin": "TOPLEFT"}, "confidence": 0.981573224067688, "cells": [{"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}]}, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter."}, {"label": "text", "id": 6, "page_no": 94, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.10678100585938, "t": 444.8198547363281, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9355656504631042, "cells": [{"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 94, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8011016845703, "t": 462.3359680175781, "r": 254.56697, "b": 472.4132080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.946121335029602, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Unsupported interfaces"}, {"label": "list_item", "id": 8, "page_no": 94, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7434844970703, "t": 474.6011657714844, "r": 285.9834289550781, "b": 483.91916, "coord_origin": "TOPLEFT"}, "confidence": 0.9351681470870972, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native query result differences"}, {"label": "list_item", "id": 9, "page_no": 94, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.7656707763672, "t": 485.91131591796875, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}, "confidence": 0.9449910521507263, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Accidental updates with masked values"}, {"label": "list_item", "id": 10, "page_no": 94, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72933959960938, "t": 498.2069091796875, "r": 318.95844, "b": 508.3310852050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9523792862892151, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH System CL commands considerations"}, {"label": "text", "id": 11, "page_no": 94, "cluster": {"id": 11, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6404241919517517, "cells": [{"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "picture", "id": 12, "page_no": 94, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 32.17748260498047, "t": 70.54951477050781, "r": 239.63507080078125, "b": 238.013427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.7029868960380554, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 94, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 5.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5."}, {"label": "section_header", "id": 3, "page_no": 94, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.33033752441406, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9421312808990479, "cells": [{"id": 3, "text": "RCAC and non-SQL interfaces", "bbox": {"l": 136.8, "t": 254.88635, "r": 511.1796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC and non-SQL interfaces"}, {"label": "text", "id": 4, "page_no": 94, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93673706054688, "t": 316.58636474609375, "r": 547.18188, "b": 386.9336242675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9848811626434326, "cells": [{"id": 4, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced ", "bbox": {"l": 136.8, "t": 317.68872, "r": 547.18188, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "across all the interfaces that access DB2 for i because the security rules are defined and ", "bbox": {"l": 136.8, "t": 329.68854, "r": 530.37024, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "enforced at the database level. The examples that are shown in this paper focus on ", "bbox": {"l": 136.8, "t": 341.68835, "r": 506.3607799999999, "b": 350.90134, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SQL-based access, but row permissions and column masks also are enforced for non-SQL ", "bbox": {"l": 136.8, "t": 353.68817, "r": 540.88196, "b": 362.90115, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "interfaces, such as native record-level access in RPG and COBOL programs and CL ", "bbox": {"l": 136.8, "t": 365.68799, "r": 512.052, "b": 374.90097, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "commands, such as Display Physical File Member (", "bbox": {"l": 136.8, "t": 377.68781, "r": 364.92484, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "DSPPFM", "bbox": {"l": 364.86011, "t": 377.83718999999996, "r": 394.85962, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ") and Copy File (", "bbox": {"l": 394.85962, "t": 377.68781, "r": 468.42514, "b": 386.90079, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CPYF", "bbox": {"l": 468.41919000000007, "t": 377.83718999999996, "r": 488.39893, "b": 386.66177, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": ").", "bbox": {"l": 488.39896, "t": 377.68781, "r": 494.57016, "b": 386.90079, "coord_origin": "TOPLEFT"}}]}, "text": "A benefit of Row and Column Access Control (RCAC) is that its security controls are enforced across all the interfaces that access DB2 for i because the security rules are defined and enforced at the database level. The examples that are shown in this paper focus on SQL-based access, but row permissions and column masks also are enforced for non-SQL interfaces, such as native record-level access in RPG and COBOL programs and CL commands, such as Display Physical File Member ( DSPPFM ) and Copy File ( CPYF )."}, {"label": "text", "id": 5, "page_no": 94, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.76991271972656, "t": 398.7801208496094, "r": 547.25549, "b": 432.91998, "coord_origin": "TOPLEFT"}, "confidence": 0.981573224067688, "cells": [{"id": 14, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances ", "bbox": {"l": 136.79898, "t": 399.70737, "r": 547.25549, "b": 408.92035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL ", "bbox": {"l": 136.799, "t": 411.70717999999994, "r": 547.1532, "b": 420.9201699999999, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "interfaces. These considerations are described in this chapter.", "bbox": {"l": 136.799, "t": 423.70700000000005, "r": 411.01178, "b": 432.91998, "coord_origin": "TOPLEFT"}}]}, "text": "This consistent enforcement across all interfaces is a good thing, but there are some nuances and restrictions as a result of applying an SQL-based technology such as RCAC to non-SQL interfaces. These considerations are described in this chapter."}, {"label": "text", "id": 6, "page_no": 94, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.10678100585938, "t": 444.8198547363281, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9355656504631042, "cells": [{"id": 17, "text": "The following topics are covered in this chapter in this chapter:", "bbox": {"l": 136.799, "t": 445.72656, "r": 412.43704, "b": 454.9395400000001, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 94, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8011016845703, "t": 462.3359680175781, "r": 254.56697, "b": 472.4132080078125, "coord_origin": "TOPLEFT"}, "confidence": 0.946121335029602, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.799, "t": 462.85574, "r": 141.77899, "b": 471.63052, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Unsupported interfaces", "bbox": {"l": 151.19916, "t": 462.70636, "r": 254.56697, "b": 471.91934, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Unsupported interfaces"}, {"label": "list_item", "id": 8, "page_no": 94, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7434844970703, "t": 474.6011657714844, "r": 285.9834289550781, "b": 483.91916, "coord_origin": "TOPLEFT"}, "confidence": 0.9351681470870972, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.799, "t": 474.85556, "r": 141.77899, "b": 483.63034, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Native query result differences", "bbox": {"l": 151.19916, "t": 474.70618, "r": 285.97983, "b": 483.91916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native query result differences"}, {"label": "list_item", "id": 9, "page_no": 94, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.7656707763672, "t": 485.91131591796875, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}, "confidence": 0.9449910521507263, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.799, "t": 486.85538, "r": 141.77899, "b": 495.63016, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Accidental updates with masked values", "bbox": {"l": 151.19916, "t": 486.70599, "r": 325.08792, "b": 495.91898, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Accidental updates with masked values"}, {"label": "list_item", "id": 10, "page_no": 94, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72933959960938, "t": 498.2069091796875, "r": 318.95844, "b": 508.3310852050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9523792862892151, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.799, "t": 498.85519, "r": 141.77899, "b": 507.62997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "System CL commands considerations", "bbox": {"l": 151.19916, "t": 498.70581, "r": 318.95844, "b": 507.91879, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH System CL commands considerations"}, {"label": "text", "id": 11, "page_no": 94, "cluster": {"id": 11, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6404241919517517, "cells": [{"id": 26, "text": "5", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "picture", "id": 12, "page_no": 94, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 32.17748260498047, "t": 70.54951477050781, "r": 239.63507080078125, "b": 238.013427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.7029868960380554, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 94, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.744651794433594, "t": 754.7680053710938, "r": 257.24335, "b": 764.091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.949221134185791, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 94, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3575439453125, "t": 754.22607421875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138334393501282, "cells": [{"id": 1, "text": "79", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "79"}]}}, {"page_no": 95, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.1874008178711, "t": 754.3892211914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9252743721008301, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2634048461914, "t": 754.6898193359375, "r": 334.42142, "b": 763.9056396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9558761715888977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.43855285644531, "t": 73.36776733398438, "r": 275.70184, "b": 89.5892105102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9696915745735168, "cells": [{"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.1591339111328, "t": 105.93167114257812, "r": 519.797, "b": 128.38632202148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9809359312057495, "cells": [{"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.89776611328125, "t": 140.08090209960938, "r": 547.21381, "b": 174.56727600097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9822454452514648, "cells": [{"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5338592529297, "t": 180.65792846679688, "r": 526.03485, "b": 191.1039581298828, "coord_origin": "TOPLEFT"}, "confidence": 0.9507953524589539, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.57638549804688, "t": 192.57815551757812, "r": 410.49484, "b": 203.17335510253906, "coord_origin": "TOPLEFT"}, "confidence": 0.9401845932006836, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.51390075683594, "t": 205.0358123779297, "r": 264.33585, "b": 215.18972778320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9484872221946716, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.78880310058594, "t": 226.60470581054688, "r": 537.02081, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9780105948448181, "cells": [{"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.04721069335938, "t": 260.5085144042969, "r": 547.27563, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9873144030570984, "cells": [{"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.47200012207031, "t": 415.3008117675781, "r": 329.61151, "b": 431.6415710449219, "coord_origin": "TOPLEFT"}, "confidence": 0.9681466221809387, "cells": [{"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.66397094726562, "t": 447.6929626464844, "r": 542.39417, "b": 494.5770263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9864740371704102, "cells": [{"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.92169189453125, "t": 500.54949951171875, "r": 198.29859924316406, "b": 510.86075, "coord_origin": "TOPLEFT"}, "confidence": 0.9383296370506287, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.69873046875, "t": 512.3756713867188, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}, "confidence": 0.9262765645980835, "cells": [{"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.62481689453125, "t": 524.65283203125, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9469870328903198, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.5345458984375, "t": 536.3973388671875, "r": 285.93896484375, "b": 546.8602, "coord_origin": "TOPLEFT"}, "confidence": 0.934996485710144, "cells": [{"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.56021118164062, "t": 548.5358276367188, "r": 441.7839660644531, "b": 558.86, "coord_origin": "TOPLEFT"}, "confidence": 0.9559246897697449, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 135.97003173828125, "t": 570.7841796875, "r": 541.63519, "b": 617.0958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9824656248092651, "cells": [{"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 135.73948669433594, "t": 628.62744140625, "r": 547.28345, "b": 651.3435668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.975006639957428, "cells": [{"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.9209747314453, "t": 658.1214599609375, "r": 299.18975830078125, "b": 668.4609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9473878741264343, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.68008422851562, "t": 670.212890625, "r": 393.49902, "b": 680.426513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9464444518089294, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.76820373535156, "t": 681.9945068359375, "r": 358.48862, "b": 692.8447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444779753684998, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.62449645996094, "t": 693.85107421875, "r": 310.7019348144531, "b": 704.2999267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9346434473991394, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 135.7325439453125, "t": 705.99072265625, "r": 354.20792, "b": 716.4747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9466715455055237, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 135.72433471679688, "t": 718.1799926757812, "r": 246.4168701171875, "b": 728.3264770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9458449482917786, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "text", "bbox": {"l": 141.973876953125, "t": 336.4569396972656, "r": 541.237, "b": 383.3992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816816449165344, "cells": [{"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 95, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1874008178711, "t": 754.3892211914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9252743721008301, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "80"}, {"label": "page_footer", "id": 1, "page_no": 95, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2634048461914, "t": 754.6898193359375, "r": 334.42142, "b": 763.9056396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9558761715888977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 95, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.43855285644531, "t": 73.36776733398438, "r": 275.70184, "b": 89.5892105102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9696915745735168, "cells": [{"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.1 Unsupported interfaces"}, {"label": "text", "id": 3, "page_no": 95, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1591339111328, "t": 105.93167114257812, "r": 519.797, "b": 128.38632202148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9809359312057495, "cells": [{"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is not possible to create a row permission or column mask on a distributed table or a program-described file."}, {"label": "text", "id": 4, "page_no": 95, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.89776611328125, "t": 140.08090209960938, "r": 547.21381, "b": 174.56727600097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9822454452514648, "cells": [{"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message:"}, {"label": "list_item", "id": 5, "page_no": 95, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5338592529297, "t": 180.65792846679688, "r": 526.03485, "b": 191.1039581298828, "coord_origin": "TOPLEFT"}, "confidence": 0.9507953524589539, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A logical file with multiple formats if the open attempt requests more than one format."}, {"label": "list_item", "id": 6, "page_no": 95, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.57638549804688, "t": 192.57815551757812, "r": 410.49484, "b": 203.17335510253906, "coord_origin": "TOPLEFT"}, "confidence": 0.9401845932006836, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table or query that specifies an ICU 2.6.1 sort sequence."}, {"label": "list_item", "id": 7, "page_no": 95, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.51390075683594, "t": 205.0358123779297, "r": 264.33585, "b": 215.18972778320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9484872221946716, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table with read triggers."}, {"label": "text", "id": 8, "page_no": 95, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78880310058594, "t": 226.60470581054688, "r": 537.02081, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9780105948448181, "cells": [{"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}]}, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated."}, {"label": "text", "id": 9, "page_no": 95, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04721069335938, "t": 260.5085144042969, "r": 547.27563, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9873144030570984, "cells": [{"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1."}, {"label": "section_header", "id": 10, "page_no": 95, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.47200012207031, "t": 415.3008117675781, "r": 329.61151, "b": 431.6415710449219, "coord_origin": "TOPLEFT"}, "confidence": 0.9681466221809387, "cells": [{"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.2 Native query result differences"}, {"label": "text", "id": 11, "page_no": 95, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.66397094726562, "t": 447.6929626464844, "r": 542.39417, "b": 494.5770263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9864740371704102, "cells": [{"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items:"}, {"label": "list_item", "id": 12, "page_no": 95, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.92169189453125, "t": 500.54949951171875, "r": 198.29859924316406, "b": 510.86075, "coord_origin": "TOPLEFT"}, "confidence": 0.9383296370506287, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query/400"}, {"label": "list_item", "id": 13, "page_no": 95, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.69873046875, "t": 512.3756713867188, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}, "confidence": 0.9262765645980835, "cells": [{"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH QQQQRY API"}, {"label": "list_item", "id": 14, "page_no": 95, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.62481689453125, "t": 524.65283203125, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9469870328903198, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Open Query File ( OPNQRYF ) command"}, {"label": "list_item", "id": 15, "page_no": 95, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.5345458984375, "t": 536.3973388671875, "r": 285.93896484375, "b": 546.8602, "coord_origin": "TOPLEFT"}, "confidence": 0.934996485710144, "cells": [{"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Run Query ( RUNQRY ) command"}, {"label": "list_item", "id": 16, "page_no": 95, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.56021118164062, "t": 548.5358276367188, "r": 441.7839660644531, "b": 558.86, "coord_origin": "TOPLEFT"}, "confidence": 0.9559246897697449, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view"}, {"label": "text", "id": 17, "page_no": 95, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.97003173828125, "t": 570.7841796875, "r": 541.63519, "b": 617.0958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9824656248092651, "cells": [{"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}]}, "text": "Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default."}, {"label": "text", "id": 18, "page_no": 95, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.73948669433594, "t": 628.62744140625, "r": 547.28345, "b": 651.3435668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.975006639957428, "cells": [{"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}]}, "text": "The following list documents some of the query output differences that can occur when native query requests are processed by CQE:"}, {"label": "list_item", "id": 19, "page_no": 95, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.9209747314453, "t": 658.1214599609375, "r": 299.18975830078125, "b": 668.4609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9473878741264343, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different ordering in the result set"}, {"label": "list_item", "id": 20, "page_no": 95, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68008422851562, "t": 670.212890625, "r": 393.49902, "b": 680.426513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9464444518089294, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different values for null columns or columns with errors"}, {"label": "list_item", "id": 21, "page_no": 95, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.76820373535156, "t": 681.9945068359375, "r": 358.48862, "b": 692.8447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444779753684998, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Suppression of some mapping error messages"}, {"label": "list_item", "id": 22, "page_no": 95, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62449645996094, "t": 693.85107421875, "r": 310.7019348144531, "b": 704.2999267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9346434473991394, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Loss of RRN positioning capabilities"}, {"label": "list_item", "id": 23, "page_no": 95, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.7325439453125, "t": 705.99072265625, "r": 354.20792, "b": 716.4747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9466715455055237, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Duplicate key processing behavior differences"}, {"label": "list_item", "id": 24, "page_no": 95, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.72433471679688, "t": 718.1799926757812, "r": 246.4168701171875, "b": 728.3264770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9458449482917786, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Missing key feedback"}, {"label": "text", "id": 25, "page_no": 95, "cluster": {"id": 25, "label": "text", "bbox": {"l": 141.973876953125, "t": 336.4569396972656, "r": 541.237, "b": 383.3992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816816449165344, "cells": [{"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC."}], "body": [{"label": "section_header", "id": 2, "page_no": 95, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.43855285644531, "t": 73.36776733398438, "r": 275.70184, "b": 89.5892105102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9696915745735168, "cells": [{"id": 2, "text": "5.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.539185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Unsupported interfaces", "bbox": {"l": 92.087021, "t": 74.34069999999997, "r": 275.70184, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.1 Unsupported interfaces"}, {"label": "text", "id": 3, "page_no": 95, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1591339111328, "t": 105.93167114257812, "r": 519.797, "b": 128.38632202148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9809359312057495, "cells": [{"id": 4, "text": "It is not possible to create a row permission or column mask on a distributed table or a ", "bbox": {"l": 136.8, "t": 106.6087, "r": 519.797, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "program-described file.", "bbox": {"l": 136.8, "t": 118.60852, "r": 238.85611, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is not possible to create a row permission or column mask on a distributed table or a program-described file."}, {"label": "text", "id": 4, "page_no": 95, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.89776611328125, "t": 140.08090209960938, "r": 547.21381, "b": 174.56727600097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9822454452514648, "cells": [{"id": 6, "text": "After a row permission or column mask is added to a table, there are some data access ", "bbox": {"l": 136.8, "t": 140.62811, "r": 525.55267, "b": 149.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "requests that no longer work. An attempt to open or query a table with activated RCAC ", "bbox": {"l": 136.8, "t": 152.62793, "r": 521.97815, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "controls involving any of the following scenarios is rejected with the CPD43A4 error message:", "bbox": {"l": 136.8, "t": 164.62775, "r": 547.21381, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}]}, "text": "After a row permission or column mask is added to a table, there are some data access requests that no longer work. An attempt to open or query a table with activated RCAC controls involving any of the following scenarios is rejected with the CPD43A4 error message:"}, {"label": "list_item", "id": 5, "page_no": 95, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5338592529297, "t": 180.65792846679688, "r": 526.03485, "b": 191.1039581298828, "coord_origin": "TOPLEFT"}, "confidence": 0.9507953524589539, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 181.75696000000005, "r": 141.78001, "b": 190.53174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A logical file with multiple formats if the open attempt requests more than one format.", "bbox": {"l": 151.20018, "t": 181.60753999999997, "r": 526.03485, "b": 190.82056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A logical file with multiple formats if the open attempt requests more than one format."}, {"label": "list_item", "id": 6, "page_no": 95, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.57638549804688, "t": 192.57815551757812, "r": 410.49484, "b": 203.17335510253906, "coord_origin": "TOPLEFT"}, "confidence": 0.9401845932006836, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 193.75676999999996, "r": 141.78001, "b": 202.53156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "A table or query that specifies an ICU 2.6.1 sort sequence.", "bbox": {"l": 151.20018, "t": 193.60735999999997, "r": 410.49484, "b": 202.82037000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table or query that specifies an ICU 2.6.1 sort sequence."}, {"label": "list_item", "id": 7, "page_no": 95, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.51390075683594, "t": 205.0358123779297, "r": 264.33585, "b": 215.18972778320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9484872221946716, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 205.75658999999996, "r": 141.78001, "b": 214.53137000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A table with read triggers.", "bbox": {"l": 151.20018, "t": 205.60717999999997, "r": 264.33585, "b": 214.82019000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A table with read triggers."}, {"label": "text", "id": 8, "page_no": 95, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78880310058594, "t": 226.60470581054688, "r": 537.02081, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9780105948448181, "cells": [{"id": 15, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not ", "bbox": {"l": 136.80002, "t": 227.62676999999996, "r": 537.02081, "b": 236.83978000000002, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "when the RCAC control is created and activated.", "bbox": {"l": 136.80002, "t": 239.62658999999996, "r": 351.88031, "b": 248.83960000000002, "coord_origin": "TOPLEFT"}}]}, "text": "This unsupported interface error occurs when a table with RCAC controls is accessed, not when the RCAC control is created and activated."}, {"label": "text", "id": 9, "page_no": 95, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04721069335938, "t": 260.5085144042969, "r": 547.27563, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9873144030570984, "cells": [{"id": 17, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format ", "bbox": {"l": 136.80002, "t": 261.64617999999996, "r": 547.27563, "b": 270.85919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully ", "bbox": {"l": 136.80002, "t": 273.64599999999996, "r": 519.41534, "b": 282.85900999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "created and activated for PF1. Any application that accesses PF1 directly or LFS continues to ", "bbox": {"l": 136.79901, "t": 285.6458400000001, "r": 547.23773, "b": 294.85883000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "work without any issues. However, any application that opens LFM with multiple formats ", "bbox": {"l": 136.79901, "t": 297.64566, "r": 526.68823, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "receives an error on the open attempt after the row permission is activated for PF1.", "bbox": {"l": 136.79901, "t": 309.64548, "r": 503.38181, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that there is a physical file, PF1, which is referenced by a single format logical file (LFS) and a multi-format logical file (LFM). A row permission is successfully created and activated for PF1. Any application that accesses PF1 directly or LFS continues to work without any issues. However, any application that opens LFM with multiple formats receives an error on the open attempt after the row permission is activated for PF1."}, {"label": "section_header", "id": 10, "page_no": 95, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.47200012207031, "t": 415.3008117675781, "r": 329.61151, "b": 431.6415710449219, "coord_origin": "TOPLEFT"}, "confidence": 0.9681466221809387, "cells": [{"id": 22, "text": "5.2", "bbox": {"l": 64.800003, "t": 416.34069999999997, "r": 87.404282, "b": 431.1037, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Native query result differences", "bbox": {"l": 91.925117, "t": 416.34069999999997, "r": 329.61151, "b": 431.1037, "coord_origin": "TOPLEFT"}}]}, "text": "5.2 Native query result differences"}, {"label": "text", "id": 11, "page_no": 95, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.66397094726562, "t": 447.6929626464844, "r": 542.39417, "b": 494.5770263671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9864740371704102, "cells": [{"id": 24, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC ", "bbox": {"l": 136.8, "t": 448.60873, "r": 542.39417, "b": 457.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "controls on query requests. In order for native query requests to work with RCAC, these ", "bbox": {"l": 136.8, "t": 460.60855, "r": 526.14728, "b": 469.82153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "native query requests are now processed by SQE instead of the Classic Query Engine ", "bbox": {"l": 136.8, "t": 472.60837, "r": 521.31879, "b": 481.82135, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "(CQE). Native query requests can consist of the following items:", "bbox": {"l": 136.8, "t": 484.60818, "r": 419.14819, "b": 493.82117, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL Query Engine (SQE) is the only engine that is enhanced by IBM to enforce RCAC controls on query requests. In order for native query requests to work with RCAC, these native query requests are now processed by SQE instead of the Classic Query Engine (CQE). Native query requests can consist of the following items:"}, {"label": "list_item", "id": 12, "page_no": 95, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.92169189453125, "t": 500.54949951171875, "r": 198.29859924316406, "b": 510.86075, "coord_origin": "TOPLEFT"}, "confidence": 0.9383296370506287, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.8, "t": 501.79715, "r": 141.78, "b": 510.57193, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Query/400", "bbox": {"l": 151.20016, "t": 501.64777, "r": 198.17549, "b": 510.86075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Query/400"}, {"label": "list_item", "id": 13, "page_no": 95, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.69873046875, "t": 512.3756713867188, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}, "confidence": 0.9262765645980835, "cells": [{"id": 30, "text": "GLYPH", "bbox": {"l": 136.8, "t": 513.79697, "r": 141.78, "b": 522.5717500000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "QQQQRY API", "bbox": {"l": 151.20016, "t": 513.6475800000001, "r": 214.61249, "b": 522.86057, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH QQQQRY API"}, {"label": "list_item", "id": 14, "page_no": 95, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.62481689453125, "t": 524.65283203125, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9469870328903198, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.8, "t": 525.79678, "r": 141.78, "b": 534.57156, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Open Query File (", "bbox": {"l": 151.20016, "t": 525.6474000000001, "r": 230.89011, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "OPNQRYF", "bbox": {"l": 230.93991000000003, "t": 525.79678, "r": 265.85968, "b": 534.6213700000001, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ") command", "bbox": {"l": 265.92041, "t": 525.6474000000001, "r": 315.8399, "b": 534.8603800000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Open Query File ( OPNQRYF ) command"}, {"label": "list_item", "id": 15, "page_no": 95, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.5345458984375, "t": 536.3973388671875, "r": 285.93896484375, "b": 546.8602, "coord_origin": "TOPLEFT"}, "confidence": 0.934996485710144, "cells": [{"id": 36, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 537.7966, "r": 141.77997, "b": 546.5713499999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Run Query (", "bbox": {"l": 151.20013, "t": 537.6472, "r": 205.94926, "b": 546.8602, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RUNQRY", "bbox": {"l": 205.92038, "t": 537.7966, "r": 235.91989, "b": 546.62115, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ") command", "bbox": {"l": 235.91991, "t": 537.6472, "r": 285.85736, "b": 546.8602, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Run Query ( RUNQRY ) command"}, {"label": "list_item", "id": 16, "page_no": 95, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.56021118164062, "t": 548.5358276367188, "r": 441.7839660644531, "b": 558.86, "coord_origin": "TOPLEFT"}, "confidence": 0.9559246897697449, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 549.7964, "r": 141.77997, "b": 558.57115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view", "bbox": {"l": 151.20013, "t": 549.6469999999999, "r": 441.4704, "b": 558.86, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Native open (RPG, COBOL, OPNDBF, and so on) of an SQL view"}, {"label": "text", "id": 17, "page_no": 95, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.97003173828125, "t": 570.7841796875, "r": 541.63519, "b": 617.0958251953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9824656248092651, "cells": [{"id": 42, "text": "Legacy queries that have been running without any issues for many years and over many", "bbox": {"l": 136.79997, "t": 571.66656, "r": 530.37244, "b": 580.87956, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM i releases are now processed by a different query engine. As a result, the runtime ", "bbox": {"l": 136.79997, "t": 583.66637, "r": 519.22693, "b": 592.87936, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "behavior and results that are returned can be different for native query requests with RCAC ", "bbox": {"l": 136.79997, "t": 595.66617, "r": 541.63519, "b": 604.8791699999999, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "enabled. The ", "bbox": {"l": 136.79997, "t": 607.66597, "r": 197.70737, "b": 616.87897, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "OPNQRYF", "bbox": {"l": 197.70039, "t": 607.81537, "r": 232.67992000000004, "b": 616.6399200000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " command and Query/400 run with SQE by default.", "bbox": {"l": 232.68091, "t": 607.66597, "r": 458.73212, "b": 616.87897, "coord_origin": "TOPLEFT"}}]}, "text": "Legacy queries that have been running without any issues for many years and over many IBM i releases are now processed by a different query engine. As a result, the runtime behavior and results that are returned can be different for native query requests with RCAC enabled. The OPNQRYF command and Query/400 run with SQE by default."}, {"label": "text", "id": 18, "page_no": 95, "cluster": {"id": 18, "label": "text", "bbox": {"l": 135.73948669433594, "t": 628.62744140625, "r": 547.28345, "b": 651.3435668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.975006639957428, "cells": [{"id": 48, "text": "The following list documents some of the query output differences that can occur when native ", "bbox": {"l": 136.80096, "t": 629.62578, "r": 547.28345, "b": 638.83878, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "query requests are processed by CQE:", "bbox": {"l": 136.80096, "t": 641.62558, "r": 309.73151, "b": 650.83858, "coord_origin": "TOPLEFT"}}]}, "text": "The following list documents some of the query output differences that can occur when native query requests are processed by CQE:"}, {"label": "list_item", "id": 19, "page_no": 95, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.9209747314453, "t": 658.1214599609375, "r": 299.18975830078125, "b": 668.4609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9473878741264343, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 658.81454, "r": 141.78096, "b": 667.5893, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Different ordering in the result set", "bbox": {"l": 151.20113, "t": 658.66515, "r": 298.89197, "b": 667.87814, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different ordering in the result set"}, {"label": "list_item", "id": 20, "page_no": 95, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68008422851562, "t": 670.212890625, "r": 393.49902, "b": 680.426513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9464444518089294, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 670.81435, "r": 141.78096, "b": 679.58911, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Different values for null columns or columns with errors", "bbox": {"l": 151.20113, "t": 670.66495, "r": 393.49902, "b": 679.87795, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Different values for null columns or columns with errors"}, {"label": "list_item", "id": 21, "page_no": 95, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.76820373535156, "t": 681.9945068359375, "r": 358.48862, "b": 692.8447265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9444779753684998, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 682.81416, "r": 141.78096, "b": 691.58892, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Suppression of some mapping error messages", "bbox": {"l": 151.20113, "t": 682.66476, "r": 358.48862, "b": 691.87776, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Suppression of some mapping error messages"}, {"label": "list_item", "id": 22, "page_no": 95, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62449645996094, "t": 693.85107421875, "r": 310.7019348144531, "b": 704.2999267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9346434473991394, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 694.813972, "r": 141.78096, "b": 703.5887299999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Loss of RRN positioning capabilities", "bbox": {"l": 151.20113, "t": 694.664566, "r": 310.57407, "b": 703.877571, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Loss of RRN positioning capabilities"}, {"label": "list_item", "id": 23, "page_no": 95, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.7325439453125, "t": 705.99072265625, "r": 354.20792, "b": 716.4747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9466715455055237, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 706.813782, "r": 141.78096, "b": 715.588539, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "Duplicate key processing behavior differences", "bbox": {"l": 151.20113, "t": 706.6643750000001, "r": 354.20792, "b": 715.87738, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Duplicate key processing behavior differences"}, {"label": "list_item", "id": 24, "page_no": 95, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.72433471679688, "t": 718.1799926757812, "r": 246.4168701171875, "b": 728.3264770507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9458449482917786, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 718.813591, "r": 141.78096, "b": 727.588348, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Missing key feedback", "bbox": {"l": 151.20113, "t": 718.664185, "r": 245.8849, "b": 727.87719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Missing key feedback"}, {"label": "text", "id": 25, "page_no": 95, "cluster": {"id": 25, "label": "text", "bbox": {"l": 141.973876953125, "t": 336.4569396972656, "r": 541.237, "b": 383.3992919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9816816449165344, "cells": [{"id": 62, "text": "Important:", "bbox": {"l": 142.8, "t": 337.60873, "r": 192.41673, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": " This potential runtime error places a heavy emphasis on a comprehensive ", "bbox": {"l": 192.41974, "t": 337.60873, "r": 524.8606, "b": 346.8217200000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "testing plan to ensure that all programs are tested. If testing uncovers an unsupported ", "bbox": {"l": 142.80002, "t": 349.60855, "r": 524.34381, "b": 358.82153, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "interface, then you must investigate whether the application can be rewritten to use a data ", "bbox": {"l": 142.80002, "t": 361.60837, "r": 541.237, "b": 370.82134999999994, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "access interface that is supported by RCAC.", "bbox": {"l": 142.80002, "t": 373.60818000000006, "r": 338.13461, "b": 382.82117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Important: This potential runtime error places a heavy emphasis on a comprehensive testing plan to ensure that all programs are tested. If testing uncovers an unsupported interface, then you must investigate whether the application can be rewritten to use a data access interface that is supported by RCAC."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 95, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.1874008178711, "t": 754.3892211914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9252743721008301, "cells": [{"id": 0, "text": "80 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "80"}, {"label": "page_footer", "id": 1, "page_no": 95, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2634048461914, "t": 754.6898193359375, "r": 334.42142, "b": 763.9056396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9558761715888977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 96, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 353.64373779296875, "t": 754.87646484375, "r": 523.63324, "b": 764.1002197265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9528434872627258, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.66748046875, "t": 754.2764282226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146247506141663, "cells": [{"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.42791748046875, "t": 70.61494445800781, "r": 543.05804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9628674387931824, "cells": [{"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.22903442382812, "t": 99.42984008789062, "r": 521.8867797851562, "b": 109.78103637695312, "coord_origin": "TOPLEFT"}, "confidence": 0.8841223120689392, "cells": [{"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.18670654296875, "t": 121.53282165527344, "r": 544.66058, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9777080416679382, "cells": [{"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.66980743408203, "t": 228.1348419189453, "r": 396.82227, "b": 244.21737670898438, "coord_origin": "TOPLEFT"}, "confidence": 0.967221200466156, "cells": [{"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.81739807128906, "t": 260.6902770996094, "r": 547.18481, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9834569096565247, "cells": [{"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.87274169921875, "t": 306.6039123535156, "r": 541.6969, "b": 352.80584716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875996112823486, "cells": [{"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.08998107910156, "t": 364.7171325683594, "r": 547.14398, "b": 422.7193, "coord_origin": "TOPLEFT"}, "confidence": 0.9872422218322754, "cells": [{"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "caption", "bbox": {"l": 136.07180786132812, "t": 722.1818237304688, "r": 374.3499755859375, "b": 731.462898, "coord_origin": "TOPLEFT"}, "confidence": 0.9452338218688965, "cells": [{"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 141.93385314941406, "t": 161.8843994140625, "r": 495.4548, "b": 196.31082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9745184183120728, "cells": [{"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 135.8197021484375, "t": 437.9704895019531, "r": 527.1633911132812, "b": 719.9022827148438, "coord_origin": "TOPLEFT"}, "confidence": 0.980728805065155, "cells": [{"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 96, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.64373779296875, "t": 754.87646484375, "r": 523.63324, "b": 764.1002197265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9528434872627258, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 96, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.66748046875, "t": 754.2764282226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146247506141663, "cells": [{"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "81"}, {"label": "text", "id": 2, "page_no": 96, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.42791748046875, "t": 70.61494445800781, "r": 543.05804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9628674387931824, "cells": [{"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at:"}, {"label": "text", "id": 3, "page_no": 96, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.22903442382812, "t": 99.42984008789062, "r": 521.8867797851562, "b": 109.78103637695312, "coord_origin": "TOPLEFT"}, "confidence": 0.8841223120689392, "cells": [{"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "text", "id": 4, "page_no": 96, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.18670654296875, "t": 121.53282165527344, "r": 544.66058, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9777080416679382, "cells": [{"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance."}, {"label": "section_header", "id": 5, "page_no": 96, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.66980743408203, "t": 228.1348419189453, "r": 396.82227, "b": 244.21737670898438, "coord_origin": "TOPLEFT"}, "confidence": 0.967221200466156, "cells": [{"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "5.3 Accidental updates with masked values"}, {"label": "text", "id": 6, "page_no": 96, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81739807128906, "t": 260.6902770996094, "r": 547.18481, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9834569096565247, "cells": [{"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access."}, {"label": "text", "id": 7, "page_no": 96, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87274169921875, "t": 306.6039123535156, "r": 541.6969, "b": 352.80584716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875996112823486, "cells": [{"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as shown Figure 5-1."}, {"label": "text", "id": 8, "page_no": 96, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08998107910156, "t": 364.7171325683594, "r": 547.14398, "b": 422.7193, "coord_origin": "TOPLEFT"}, "confidence": 0.9872422218322754, "cells": [{"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value."}, {"label": "caption", "id": 9, "page_no": 96, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.07180786132812, "t": 722.1818237304688, "r": 374.3499755859375, "b": 731.462898, "coord_origin": "TOPLEFT"}, "confidence": 0.9452338218688965, "cells": [{"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5-1 Accidental update with masked values scenario"}, {"label": "text", "id": 10, "page_no": 96, "cluster": {"id": 10, "label": "text", "bbox": {"l": 141.93385314941406, "t": 161.8843994140625, "r": 495.4548, "b": 196.31082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9745184183120728, "cells": [{"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces."}, {"label": "picture", "id": 11, "page_no": 96, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 135.8197021484375, "t": 437.9704895019531, "r": 527.1633911132812, "b": 719.9022827148438, "coord_origin": "TOPLEFT"}, "confidence": 0.980728805065155, "cells": [{"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 96, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.42791748046875, "t": 70.61494445800781, "r": 543.05804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9628674387931824, "cells": [{"id": 2, "text": "For a list of the differences and additional details, see the ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 391.62125, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 391.6192, "t": 71.50903000000005, "r": 537.52203, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": ", ", "bbox": {"l": 537.4187, "t": 71.50903000000005, "r": 543.05804, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "found at:", "bbox": {"l": 136.79861, "t": 83.50885000000017, "r": 175.42749, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For a list of the differences and additional details, see the IBM i Memo to Users Version 7.2 , found at:"}, {"label": "text", "id": 3, "page_no": 96, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.22903442382812, "t": 99.42984008789062, "r": 521.8867797851562, "b": 109.78103637695312, "coord_origin": "TOPLEFT"}, "confidence": 0.8841223120689392, "cells": [{"id": 6, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 136.79861, "t": 100.63806, "r": 521.5733, "b": 109.41283999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "text", "id": 4, "page_no": 96, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.18670654296875, "t": 121.53282165527344, "r": 544.66058, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9777080416679382, "cells": [{"id": 7, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a ", "bbox": {"l": 136.79861, "t": 122.50824, "r": 544.66058, "b": 131.72125000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "new index or keyed logical file might need to be created to improve the performance.", "bbox": {"l": 136.79861, "t": 134.50806, "r": 508.98987000000005, "b": 143.72107000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In addition, the performance of a native query with SQE can be different. It is possible that a new index or keyed logical file might need to be created to improve the performance."}, {"label": "section_header", "id": 5, "page_no": 96, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.66980743408203, "t": 228.1348419189453, "r": 396.82227, "b": 244.21737670898438, "coord_origin": "TOPLEFT"}, "confidence": 0.967221200466156, "cells": [{"id": 9, "text": "5.3", "bbox": {"l": 64.800003, "t": 229.20068000000003, "r": 107.0743, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Accidental updates with masked values", "bbox": {"l": 110.99170000000001, "t": 229.20068000000003, "r": 396.82227, "b": 243.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "5.3 Accidental updates with masked values"}, {"label": "text", "id": 6, "page_no": 96, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81739807128906, "t": 260.6902770996094, "r": 547.18481, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9834569096565247, "cells": [{"id": 11, "text": "The masked values that are returned by a column mask can potentially cause the original ", "bbox": {"l": 136.8, "t": 261.52855999999997, "r": 533.76666, "b": 270.74158, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "data value to be accidentally overwritten, especially with applications using native record-level ", "bbox": {"l": 136.8, "t": 273.52837999999997, "r": 547.18481, "b": 282.74139, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access.", "bbox": {"l": 136.79999, "t": 285.52823, "r": 170.50961, "b": 294.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "The masked values that are returned by a column mask can potentially cause the original data value to be accidentally overwritten, especially with applications using native record-level access."}, {"label": "text", "id": 7, "page_no": 96, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87274169921875, "t": 306.6039123535156, "r": 541.6969, "b": 352.80584716796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875996112823486, "cells": [{"id": 14, "text": "For example, consider a table containing three columns of first name, last name, and tax ID ", "bbox": {"l": 136.79999, "t": 307.48804, "r": 541.6969, "b": 316.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "that is read by an RPG program. The user running the program is not authorized to see the ", "bbox": {"l": 136.79999, "t": 319.48785, "r": 540.84137, "b": 328.70084, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as ", "bbox": {"l": 136.79999, "t": 331.48767, "r": 530.73004, "b": 340.70064999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "shown Figure 5-1.", "bbox": {"l": 136.8, "t": 343.48749, "r": 216.65632999999997, "b": 352.70047000000005, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a table containing three columns of first name, last name, and tax ID that is read by an RPG program. The user running the program is not authorized to see the tax ID value, so a masked value (*****3333) is written into the program\u2019s record buffer, as shown Figure 5-1."}, {"label": "text", "id": 8, "page_no": 96, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.08998107910156, "t": 364.7171325683594, "r": 547.14398, "b": 422.7193, "coord_origin": "TOPLEFT"}, "confidence": 0.9872422218322754, "cells": [{"id": 18, "text": "In this example, the application reads the data for an update to correct the misspelling of the ", "bbox": {"l": 136.8, "t": 365.50705, "r": 545.41302, "b": 374.72003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is ", "bbox": {"l": 136.79999, "t": 377.50687, "r": 540.198, "b": 386.71985, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "issued by the program, which uses the contents of the record buffer to update the row in the ", "bbox": {"l": 136.79999, "t": 389.50668, "r": 544.25977, "b": 398.71967, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ", "bbox": {"l": 136.79999, "t": 401.50649999999996, "r": 547.14398, "b": 410.71948, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ID, so the tax ID value in the table is accidentally set to the masked value.", "bbox": {"l": 136.79997, "t": 413.5063200000001, "r": 461.0538, "b": 422.7193, "coord_origin": "TOPLEFT"}}]}, "text": "In this example, the application reads the data for an update to correct the misspelling of the last name. The last name value is changed to Smith in the buffer. Now, a WRITE request is issued by the program, which uses the contents of the record buffer to update the row in the underlying DB2 table. Unfortunately, the record buffer still contains a masked value for the tax ID, so the tax ID value in the table is accidentally set to the masked value."}, {"label": "caption", "id": 9, "page_no": 96, "cluster": {"id": 9, "label": "caption", "bbox": {"l": 136.07180786132812, "t": 722.1818237304688, "r": 374.3499755859375, "b": 731.462898, "coord_origin": "TOPLEFT"}, "confidence": 0.9452338218688965, "cells": [{"id": 23, "text": "Figure 5-1 Accidental update with masked values scenario", "bbox": {"l": 136.8, "t": 723.137901, "r": 373.81857, "b": 731.462898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5-1 Accidental update with masked values scenario"}, {"label": "text", "id": 10, "page_no": 96, "cluster": {"id": 10, "label": "text", "bbox": {"l": 141.93385314941406, "t": 161.8843994140625, "r": 495.4548, "b": 196.31082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9745184183120728, "cells": [{"id": 24, "text": "Important:", "bbox": {"l": 142.8, "t": 162.52868999999998, "r": 192.41673, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": " Based on the potential impacts of query result set and performance ", "bbox": {"l": 192.41974, "t": 162.52868999999998, "r": 495.4548, "b": 171.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "differences, you should perform extensive functional testing and performance ", "bbox": {"l": 142.80002, "t": 174.5285, "r": 485.46099999999996, "b": 183.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "benchmarking of applications and reports that use native query interfaces. ", "bbox": {"l": 142.80002, "t": 186.52832, "r": 473.03167999999994, "b": 195.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Based on the potential impacts of query result set and performance differences, you should perform extensive functional testing and performance benchmarking of applications and reports that use native query interfaces."}, {"label": "picture", "id": 11, "page_no": 96, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 135.8197021484375, "t": 437.9704895019531, "r": 527.1633911132812, "b": 719.9022827148438, "coord_origin": "TOPLEFT"}, "confidence": 0.980728805065155, "cells": [{"id": 28, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 474.24478, "r": 239.71214, "b": 484.23154, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "HLL Program using Native Record-Level Access", "bbox": {"l": 191.36845, "t": 446.30069, "r": 445.35726999999997, "b": 456.56488, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "READ", "bbox": {"l": 233.05431000000002, "t": 487.56049, "r": 259.57025, "b": 497.54724, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Record Buffer-> ", "bbox": {"l": 238.12204000000003, "t": 501.52307, "r": 313.72403, "b": 511.01047, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Joe Smyth *****3333", "bbox": {"l": 313.72516, "t": 501.52307, "r": 413.24988, "b": 511.02158, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "\u2026", "bbox": {"l": 233.05431000000002, "t": 527.65549, "r": 239.71214, "b": 537.64223, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "/* Application logic corrects last name to Smith */", "bbox": {"l": 233.05431000000002, "t": 541.43492, "r": 444.82404, "b": 550.24414, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WRITE", "bbox": {"l": 233.05431000000002, "t": 565.97496, "r": 266.1937, "b": 575.96172, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "df", "bbox": {"l": 266.1586, "t": 579.93794, "r": 304.32135, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "f", "bbox": {"l": 289.75067, "t": 579.93794, "r": 307.61145, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ih", "bbox": {"l": 345.7197, "t": 579.93794, "r": 362.1246, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "*****", "bbox": {"l": 360.73679, "t": 579.93794, "r": 388.33353, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TaxID value changed", "bbox": {"l": 300.70541, "t": 624.36053, "r": 394.25247, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Record Buffer-> ", "bbox": {"l": 240.6368, "t": 579.93794, "r": 313.68628, "b": 589.4253699999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Joe Smith ", "bbox": {"l": 313.72513, "t": 579.93794, "r": 360.76648, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*****3333", "bbox": {"l": 360.73679, "t": 579.93794, "r": 410.82452, "b": 589.43646, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Joe Smyth 111223333", "bbox": {"l": 149.09151, "t": 656.44766, "r": 258.49426, "b": 666.34564, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "TaxID value changed ", "bbox": {"l": 300.70541, "t": 624.36053, "r": 396.71878, "b": 633.85905, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "from 11122333 to *****3333", "bbox": {"l": 305.77271, "t": 637.67621, "r": 440.5318, "b": 647.17473, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 96, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.64373779296875, "t": 754.87646484375, "r": 523.63324, "b": 764.1002197265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9528434872627258, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 96, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.66748046875, "t": 754.2764282226562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9146247506141663, "cells": [{"id": 1, "text": "81", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "81"}]}}, {"page_no": 97, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.22566223144531, "t": 754.41650390625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9210326671600342, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.18901824951172, "t": 754.7184448242188, "r": 334.42142, "b": 763.9121704101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9529549479484558, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.91806030273438, "t": 70.726806640625, "r": 545.14294, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9776225686073303, "cells": [{"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.93345642089844, "t": 104.64000701904297, "r": 547.26752, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9867440462112427, "cells": [{"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.44256591796875, "t": 177.93212890625, "r": 385.58484, "b": 194.52586364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9684726595878601, "cells": [{"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.84999084472656, "t": 210.4622344970703, "r": 547.48962, "b": 269.1277770996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875320792198181, "cells": [{"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.2880630493164, "t": 288.19952392578125, "r": 405.04672, "b": 301.8869323730469, "coord_origin": "TOPLEFT"}, "confidence": 0.9681828022003174, "cells": [{"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.64491271972656, "t": 314.66900634765625, "r": 542.97083, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.987525224685669, "cells": [{"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.95484924316406, "t": 372.71258544921875, "r": 538.55847, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9827100038528442, "cells": [{"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.810791015625, "t": 418.80743408203125, "r": 547.21686, "b": 476.839599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9882908463478088, "cells": [{"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.34564208984375, "t": 495.8337097167969, "r": 270.95599, "b": 509.7830810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9675832390785217, "cells": [{"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.7013702392578, "t": 522.5596313476562, "r": 547.28552, "b": 557.3438110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9865304827690125, "cells": [{"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.7746124267578, "t": 568.5869750976562, "r": 547.32733, "b": 662.71976, "coord_origin": "TOPLEFT"}, "confidence": 0.9887324571609497, "cells": [{"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.0672149658203, "t": 674.6004638671875, "r": 535.8108520507812, "b": 720.9636840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881445169448853, "cells": [{"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 97, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22566223144531, "t": 754.41650390625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9210326671600342, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "82"}, {"label": "page_footer", "id": 1, "page_no": 97, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.18901824951172, "t": 754.7184448242188, "r": 334.42142, "b": 763.9121704101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9529549479484558, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 97, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91806030273438, "t": 70.726806640625, "r": 545.14294, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9776225686073303, "cells": [{"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values."}, {"label": "text", "id": 3, "page_no": 97, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93345642089844, "t": 104.64000701904297, "r": 547.26752, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9867440462112427, "cells": [{"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, \u201cCheck constraint solution\u201d on page 108."}, {"label": "section_header", "id": 4, "page_no": 97, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44256591796875, "t": 177.93212890625, "r": 385.58484, "b": 194.52586364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9684726595878601, "cells": [{"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}]}, "text": "5.4 System CL commands considerations"}, {"label": "text", "id": 5, "page_no": 97, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84999084472656, "t": 210.4622344970703, "r": 547.48962, "b": 269.1277770996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875320792198181, "cells": [{"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC."}, {"label": "section_header", "id": 6, "page_no": 97, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.2880630493164, "t": 288.19952392578125, "r": 405.04672, "b": 301.8869323730469, "coord_origin": "TOPLEFT"}, "confidence": 0.9681828022003174, "cells": [{"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command"}, {"label": "text", "id": 7, "page_no": 97, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.64491271972656, "t": 314.66900634765625, "r": 542.97083, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.987525224685669, "cells": [{"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL ."}, {"label": "text", "id": 8, "page_no": 97, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.95484924316406, "t": 372.71258544921875, "r": 538.55847, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9827100038528442, "cells": [{"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error."}, {"label": "text", "id": 9, "page_no": 97, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.810791015625, "t": 418.80743408203125, "r": 547.21686, "b": 476.839599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9882908463478088, "cells": [{"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}]}, "text": "When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object."}, {"label": "section_header", "id": 10, "page_no": 97, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.34564208984375, "t": 495.8337097167969, "r": 270.95599, "b": 509.7830810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9675832390785217, "cells": [{"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.2 Copy File (CPYF) command"}, {"label": "text", "id": 11, "page_no": 97, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.7013702392578, "t": 522.5596313476562, "r": 547.28552, "b": 557.3438110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9865304827690125, "cells": [{"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table."}, {"label": "text", "id": 12, "page_no": 97, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.7746124267578, "t": 568.5869750976562, "r": 547.32733, "b": 662.71976, "coord_origin": "TOPLEFT"}, "confidence": 0.9887324571609497, "cells": [{"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}]}, "text": "When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command."}, {"label": "text", "id": 13, "page_no": 97, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.0672149658203, "t": 674.6004638671875, "r": 535.8108520507812, "b": 720.9636840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881445169448853, "cells": [{"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}]}, "text": "If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received."}], "body": [{"label": "text", "id": 2, "page_no": 97, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91806030273438, "t": 70.726806640625, "r": 545.14294, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9776225686073303, "cells": [{"id": 2, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 545.14294, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked values.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 205.66844, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Obviously, careful planning and testing should be exercised to avoid accidental updates with masked values."}, {"label": "text", "id": 3, "page_no": 97, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93345642089844, "t": 104.64000701904297, "r": 547.26752, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9867440462112427, "cells": [{"id": 4, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ", "bbox": {"l": 136.8, "t": 105.52808000000005, "r": 524.7757, "b": 114.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ON ", "bbox": {"l": 524.7002, "t": 105.67749000000003, "r": 539.69995, "b": 114.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "UPDATE", "bbox": {"l": 136.80002, "t": 117.67731000000003, "r": 166.73978, "b": 126.50189, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause that allows the existing value to be preserved when a masked value is detected ", "bbox": {"l": 166.79955, "t": 117.52788999999996, "r": 547.26752, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "by a check constraint. Details about how to employ this new check constraint support can be ", "bbox": {"l": 136.80002, "t": 129.52770999999996, "r": 546.92078, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "found in 6.8.1, \u201cCheck constraint solution\u201d on page 108.", "bbox": {"l": 136.80002, "t": 141.52752999999996, "r": 381.83194, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i also enhanced its check constraint support in the IBM i 7.2 release with a new ON UPDATE clause that allows the existing value to be preserved when a masked value is detected by a check constraint. Details about how to employ this new check constraint support can be found in 6.8.1, \u201cCheck constraint solution\u201d on page 108."}, {"label": "section_header", "id": 4, "page_no": 97, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44256591796875, "t": 177.93212890625, "r": 385.58484, "b": 194.52586364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9684726595878601, "cells": [{"id": 10, "text": "5.4", "bbox": {"l": 64.800003, "t": 179.22069999999997, "r": 87.337959, "b": 193.9837, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "System CL commands considerations", "bbox": {"l": 91.845535, "t": 179.22069999999997, "r": 385.58484, "b": 193.9837, "coord_origin": "TOPLEFT"}}]}, "text": "5.4 System CL commands considerations"}, {"label": "text", "id": 5, "page_no": 97, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.84999084472656, "t": 210.4622344970703, "r": 547.48962, "b": 269.1277770996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875320792198181, "cells": [{"id": 12, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement ", "bbox": {"l": 136.8, "t": 211.48870999999997, "r": 547.26038, "b": 220.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is not limited to programmatic interfaces; it also includes system CL commands that read and ", "bbox": {"l": 136.8, "t": 223.48852999999997, "r": 547.17889, "b": 232.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "insert data, such as the Create Duplicate Object (", "bbox": {"l": 136.80002, "t": 235.48834, "r": 355.65302, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CRTDUPOBJ", "bbox": {"l": 355.49969, "t": 235.63775999999996, "r": 400.43921, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ") and Start DFU (", "bbox": {"l": 400.49997, "t": 235.48834, "r": 476.93701, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "STRDFU", "bbox": {"l": 476.99976, "t": 235.63775999999996, "r": 506.9395099999999, "b": 244.46234000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ") CL ", "bbox": {"l": 506.9395099999999, "t": 235.48834, "r": 528.60651, "b": 244.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "commands. This section documents the behavior of the Create Duplicate Object (", "bbox": {"l": 136.79901, "t": 247.48816, "r": 493.72556, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CRTDUPOBJ", "bbox": {"l": 493.61899, "t": 247.63756999999998, "r": 538.55853, "b": 256.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "), ", "bbox": {"l": 538.55853, "t": 247.48816, "r": 547.48962, "b": 256.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Copy File (", "bbox": {"l": 136.79904, "t": 259.48798, "r": 184.84109, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CPYF", "bbox": {"l": 184.79927, "t": 259.63739, "r": 204.77904, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "), and Copy Library (", "bbox": {"l": 204.77904, "t": 259.48798, "r": 295.79846, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CPYLIB", "bbox": {"l": 295.7995, "t": 259.63739, "r": 325.73926, "b": 268.46198000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ") CL commands with RCAC.", "bbox": {"l": 325.80002, "t": 259.48798, "r": 450.0838600000001, "b": 268.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As stated earlier, RCAC controls are enforced on all data access interfaces. This enforcement is not limited to programmatic interfaces; it also includes system CL commands that read and insert data, such as the Create Duplicate Object ( CRTDUPOBJ ) and Start DFU ( STRDFU ) CL commands. This section documents the behavior of the Create Duplicate Object ( CRTDUPOBJ ), Copy File ( CPYF ), and Copy Library ( CPYLIB ) CL commands with RCAC."}, {"label": "section_header", "id": 6, "page_no": 97, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.2880630493164, "t": 288.19952392578125, "r": 405.04672, "b": 301.8869323730469, "coord_origin": "TOPLEFT"}, "confidence": 0.9681828022003174, "cells": [{"id": 27, "text": "5.4.1", "bbox": {"l": 64.800003, "t": 289.37473, "r": 93.960258, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Create Duplicate Object (CRTDUPOBJ) command", "bbox": {"l": 97.605309, "t": 289.37473, "r": 405.04672, "b": 301.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.1 Create Duplicate Object (CRTDUPOBJ) command"}, {"label": "text", "id": 7, "page_no": 97, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.64491271972656, "t": 314.66900634765625, "r": 542.97083, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.987525224685669, "cells": [{"id": 29, "text": "The ", "bbox": {"l": 136.8, "t": 315.52872, "r": 156.82855, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CRTDUPOBJ", "bbox": {"l": 156.77977, "t": 315.67810000000003, "r": 201.77904, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " command is enhanced with a new Access Control (", "bbox": {"l": 201.78004, "t": 315.52872, "r": 430.97162, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ACCCTL", "bbox": {"l": 430.97955, "t": 315.67810000000003, "r": 460.91931, "b": 324.50269, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ") parameter in the ", "bbox": {"l": 460.97906, "t": 315.52872, "r": 542.51752, "b": 324.7417, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions ", "bbox": {"l": 136.79901, "t": 327.52853, "r": 541.07751, "b": 336.74152, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "and column masks are copied to the new object by default because the default value for the ", "bbox": {"l": 136.79901, "t": 339.52835, "r": 542.97083, "b": 348.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ACCCTL", "bbox": {"l": 136.799, "t": 351.67755, "r": 166.73875, "b": 360.50214000000005, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": " parameter is ", "bbox": {"l": 166.79852, "t": 351.52817, "r": 227.73976, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "*ALL", "bbox": {"l": 227.75870000000003, "t": 351.67755, "r": 247.73845, "b": 360.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": ".", "bbox": {"l": 247.73846, "t": 351.52817, "r": 250.50734, "b": 360.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "The CRTDUPOBJ command is enhanced with a new Access Control ( ACCCTL ) parameter in the IBM i 7.2 release to copy RCAC controls to the new object being created. Row permissions and column masks are copied to the new object by default because the default value for the ACCCTL parameter is *ALL ."}, {"label": "text", "id": 8, "page_no": 97, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.95484924316406, "t": 372.71258544921875, "r": 538.55847, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9827100038528442, "cells": [{"id": 40, "text": "If the invoker of the ", "bbox": {"l": 136.798, "t": 373.48798, "r": 223.97386, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CRTDUPOBJ", "bbox": {"l": 223.91812, "t": 373.63735999999994, "r": 268.85764, "b": 382.46194, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": " command asks for data to be copied with a value of ", "bbox": {"l": 268.9184, "t": 373.48798, "r": 501.69666, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "*YES", "bbox": {"l": 501.65869, "t": 373.63735999999994, "r": 521.63843, "b": 382.41214, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " for ", "bbox": {"l": 521.69922, "t": 373.48798, "r": 538.55847, "b": 382.70096, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "the ", "bbox": {"l": 136.79901, "t": 385.48779, "r": 153.41228, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DATA", "bbox": {"l": 153.47902, "t": 385.63718, "r": 173.45877, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " parameter, the value of the ", "bbox": {"l": 173.45879, "t": 385.48779, "r": 297.59729, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCCTL", "bbox": {"l": 297.59924, "t": 385.63718, "r": 327.59875, "b": 394.46176, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " parameter must be ", "bbox": {"l": 327.59875, "t": 385.48779, "r": 416.82043, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "*ALL", "bbox": {"l": 416.81845, "t": 385.63718, "r": 436.79819000000003, "b": 394.41195999999997, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": ". If not, the command ", "bbox": {"l": 436.79822, "t": 385.48779, "r": 533.45392, "b": 394.70078, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "invocation receives an error.", "bbox": {"l": 136.79803, "t": 397.48761, "r": 261.15759, "b": 406.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "If the invoker of the CRTDUPOBJ command asks for data to be copied with a value of *YES for the DATA parameter, the value of the ACCCTL parameter must be *ALL . If not, the command invocation receives an error."}, {"label": "text", "id": 9, "page_no": 97, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.810791015625, "t": 418.80743408203125, "r": 547.21686, "b": 476.839599609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9882908463478088, "cells": [{"id": 53, "text": "When data is copied to the duplicated object with the ", "bbox": {"l": 136.79803, "t": 419.50717, "r": 370.7355, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "DATA", "bbox": {"l": 370.67773, "t": 419.65656, "r": 390.59775, "b": 428.48114, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " parameter, all rows and unmasked ", "bbox": {"l": 390.6575, "t": 419.50717, "r": 547.21686, "b": 428.72015, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "column values are copied into the new object, even if the command invoker is not authorized ", "bbox": {"l": 136.79701, "t": 431.50699, "r": 546.87817, "b": 440.71997, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "to view all rows or certain column values. This behavior occurs because the RCAC controls ", "bbox": {"l": 136.79701, "t": 443.50681, "r": 541.51062, "b": 452.71979, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "also are copied to the new object. The copied RCAC controls enforce that only authorized ", "bbox": {"l": 136.79701, "t": 455.50661999999994, "r": 535.04083, "b": 464.7196, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "users are allowed to view row and column values in the newly duplicated object.", "bbox": {"l": 136.79701, "t": 467.50644, "r": 489.0842599999999, "b": 476.71942, "coord_origin": "TOPLEFT"}}]}, "text": "When data is copied to the duplicated object with the DATA parameter, all rows and unmasked column values are copied into the new object, even if the command invoker is not authorized to view all rows or certain column values. This behavior occurs because the RCAC controls also are copied to the new object. The copied RCAC controls enforce that only authorized users are allowed to view row and column values in the newly duplicated object."}, {"label": "section_header", "id": 10, "page_no": 97, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.34564208984375, "t": 495.8337097167969, "r": 270.95599, "b": 509.7830810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9675832390785217, "cells": [{"id": 60, "text": "5.4.2", "bbox": {"l": 64.800003, "t": 497.39474, "r": 94.162216, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Copy File (CPYF) command", "bbox": {"l": 97.832489, "t": 497.39474, "r": 270.95599, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.2 Copy File (CPYF) command"}, {"label": "text", "id": 11, "page_no": 97, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.7013702392578, "t": 522.5596313476562, "r": 547.28552, "b": 557.3438110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9865304827690125, "cells": [{"id": 62, "text": "The ", "bbox": {"l": 136.8, "t": 523.54874, "r": 156.82855, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CPYF", "bbox": {"l": 156.60048, "t": 523.69812, "r": 176.58025, "b": 532.52271, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": " command copies only data, so there is no new parameter to copy RCAC controls to ", "bbox": {"l": 176.58025, "t": 523.54874, "r": 547.28552, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "the target table. Therefore, if ", "bbox": {"l": 136.8, "t": 535.54852, "r": 263.37762, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "CPYF", "bbox": {"l": 263.39957, "t": 535.69794, "r": 283.3793, "b": 544.5224900000001, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": " is used to create a target table, there are no RCAC controls ", "bbox": {"l": 283.37933, "t": 535.54852, "r": 547.23456, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "placed on the target table.", "bbox": {"l": 136.79901, "t": 547.54834, "r": 252.06812, "b": 556.76134, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYF command copies only data, so there is no new parameter to copy RCAC controls to the target table. Therefore, if CPYF is used to create a target table, there are no RCAC controls placed on the target table."}, {"label": "text", "id": 12, "page_no": 97, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.7746124267578, "t": 568.5869750976562, "r": 547.32733, "b": 662.71976, "coord_origin": "TOPLEFT"}, "confidence": 0.9887324571609497, "cells": [{"id": 69, "text": "When RCAC controls are in place on the source table, the ", "bbox": {"l": 136.79901, "t": 569.50815, "r": 391.27509, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "CPYF", "bbox": {"l": 391.25909, "t": 569.65755, "r": 411.23883, "b": 578.4821000000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " command is limited to reading ", "bbox": {"l": 411.23886, "t": 569.50815, "r": 547.17792, "b": 578.72115, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "rows and column values that are based on the invoker of the ", "bbox": {"l": 136.79904, "t": 581.5079499999999, "r": 405.7749, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "CPYF", "bbox": {"l": 405.71906, "t": 581.65735, "r": 425.69882, "b": 590.4819, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": " command. If a user is ", "bbox": {"l": 425.75858, "t": 581.5079499999999, "r": 526.83667, "b": 590.72095, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "authorized to see all rows and column values, then all rows and unmasked column values are ", "bbox": {"l": 136.79907, "t": 593.50775, "r": 547.32733, "b": 602.72075, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "copied to the target table (assuming no RCAC controls are on the target table). If a user ", "bbox": {"l": 136.79907, "t": 605.50755, "r": 526.13843, "b": 614.72055, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "without full access runs the ", "bbox": {"l": 136.79907, "t": 617.50735, "r": 258.86984, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "CPYF", "bbox": {"l": 258.89871, "t": 617.65675, "r": 278.87845, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": " command, the ", "bbox": {"l": 278.87848, "t": 617.50735, "r": 347.34949, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "CPYF", "bbox": {"l": 347.27878, "t": 617.65675, "r": 367.25854, "b": 626.48131, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": " command can copy only a subset of the ", "bbox": {"l": 367.25854, "t": 617.50735, "r": 547.17291, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "rows into the target table. In addition, if that user can view only masked column values, then ", "bbox": {"l": 136.7981, "t": 629.50716, "r": 543.80835, "b": 638.72015, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "masked values are copied into the target table. This also applies to the Copy to Import File ", "bbox": {"l": 136.7981, "t": 641.5069599999999, "r": 538.44824, "b": 650.71996, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "(", "bbox": {"l": 136.7981, "t": 653.50676, "r": 140.11478, "b": 662.71976, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "CPYTOIMPF", "bbox": {"l": 140.09784, "t": 653.65616, "r": 185.09709, "b": 662.48071, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": ") command.", "bbox": {"l": 185.09811, "t": 653.50676, "r": 237.83435000000003, "b": 662.71976, "coord_origin": "TOPLEFT"}}]}, "text": "When RCAC controls are in place on the source table, the CPYF command is limited to reading rows and column values that are based on the invoker of the CPYF command. If a user is authorized to see all rows and column values, then all rows and unmasked column values are copied to the target table (assuming no RCAC controls are on the target table). If a user without full access runs the CPYF command, the CPYF command can copy only a subset of the rows into the target table. In addition, if that user can view only masked column values, then masked values are copied into the target table. This also applies to the Copy to Import File ( CPYTOIMPF ) command."}, {"label": "text", "id": 13, "page_no": 97, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.0672149658203, "t": 674.6004638671875, "r": 535.8108520507812, "b": 720.9636840820312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881445169448853, "cells": [{"id": 87, "text": "If the target table has RCAC controls defined and activated, then the ", "bbox": {"l": 136.7981, "t": 675.52632, "r": 441.13778999999994, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "CPYF", "bbox": {"l": 441.05816999999996, "t": 675.67573, "r": 461.0379, "b": 684.50028, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": " command is ", "bbox": {"l": 461.03792999999996, "t": 675.52632, "r": 520.46222, "b": 684.73933, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "allowed only to add or replace rows in the target table based on the RCAC controls. If ", "bbox": {"l": 136.7981, "t": 687.52613, "r": 515.72437, "b": 696.739136, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "CPYF", "bbox": {"l": 515.75818, "t": 687.67554, "r": 535.73792, "b": 696.500092, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "tries to add a row to the target table that the command invoker is not allowed to view ", "bbox": {"l": 136.7981, "t": 699.52594, "r": 510.53024, "b": 708.738945, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "according to the target RCAC controls, then an error is received.", "bbox": {"l": 136.7981, "t": 711.525749, "r": 420.63605, "b": 720.738754, "coord_origin": "TOPLEFT"}}]}, "text": "If the target table has RCAC controls defined and activated, then the CPYF command is allowed only to add or replace rows in the target table based on the RCAC controls. If CPYF tries to add a row to the target table that the command invoker is not allowed to view according to the target RCAC controls, then an error is received."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 97, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22566223144531, "t": 754.41650390625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9210326671600342, "cells": [{"id": 0, "text": "82 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "82"}, {"label": "page_footer", "id": 1, "page_no": 97, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.18901824951172, "t": 754.7184448242188, "r": 334.42142, "b": 763.9121704101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9529549479484558, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 98, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 353.7088317871094, "t": 754.8579711914062, "r": 523.63324, "b": 764.1048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9495401382446289, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.67578125, "t": 754.3722534179688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9193902611732483, "cells": [{"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.39531707763672, "t": 70.02782440185547, "r": 305.67719, "b": 83.7774429321289, "coord_origin": "TOPLEFT"}, "confidence": 0.968555748462677, "cells": [{"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.95230102539062, "t": 96.7219467163086, "r": 544.97375, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9855459928512573, "cells": [{"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 98, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.7088317871094, "t": 754.8579711914062, "r": 523.63324, "b": 764.1048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9495401382446289, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 98, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.67578125, "t": 754.3722534179688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9193902611732483, "cells": [{"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "83"}, {"label": "section_header", "id": 2, "page_no": 98, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39531707763672, "t": 70.02782440185547, "r": 305.67719, "b": 83.7774429321289, "coord_origin": "TOPLEFT"}, "confidence": 0.968555748462677, "cells": [{"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.3 Copy Library (CPYLIB) command"}, {"label": "text", "id": 3, "page_no": 98, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.95230102539062, "t": 96.7219467163086, "r": 544.97375, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9855459928512573, "cells": [{"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object (CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL ."}], "body": [{"label": "section_header", "id": 2, "page_no": 98, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39531707763672, "t": 70.02782440185547, "r": 305.67719, "b": 83.7774429321289, "coord_origin": "TOPLEFT"}, "confidence": 0.968555748462677, "cells": [{"id": 2, "text": "5.4.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.102646, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Copy Library (CPYLIB) command", "bbox": {"l": 97.765472, "t": 71.33471999999995, "r": 305.67719, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "5.4.3 Copy Library (CPYLIB) command"}, {"label": "text", "id": 3, "page_no": 98, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.95230102539062, "t": 96.7219467163086, "r": 544.97375, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9855459928512573, "cells": [{"id": 4, "text": "The ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 156.82855, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CPYLIB", "bbox": {"l": 156.77977, "t": 97.63812000000007, "r": 186.77928, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": " command is enhanced with the same Access Control (", "bbox": {"l": 186.7793, "t": 97.48870999999997, "r": 430.68668, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ACCCTL", "bbox": {"l": 430.61902, "t": 97.63812000000007, "r": 460.61852999999996, "b": 106.46271000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ") parameter as the ", "bbox": {"l": 460.61954, "t": 97.48870999999997, "r": 544.97375, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CRTDUPOBJ", "bbox": {"l": 136.79901, "t": 109.63793999999996, "r": 181.73853, "b": 118.46252000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": " command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object ", "bbox": {"l": 181.79929, "t": 109.48852999999997, "r": 498.45456, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to ", "bbox": {"l": 136.79901, "t": 121.48834000000011, "r": 541.4729, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the new object in the new library by default because the default value for the ", "bbox": {"l": 136.79903, "t": 133.48816, "r": 474.6371500000001, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCCTL", "bbox": {"l": 474.71892999999994, "t": 133.63756999999998, "r": 504.65869, "b": 142.46216000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "parameter is ", "bbox": {"l": 136.79904, "t": 145.48798, "r": 195.04218, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "*ALL", "bbox": {"l": 194.9993, "t": 145.63738999999998, "r": 214.97905999999998, "b": 154.41216999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". ", "bbox": {"l": 214.97905999999998, "t": 145.48798, "r": 220.61841999999996, "b": 154.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "The CPYLIB command is enhanced with the same Access Control ( ACCCTL ) parameter as the CRTDUPOBJ command in the IBM i 7.2 release (see 5.4.1, \u201cCreate Duplicate Object (CRTDUPOBJ) command\u201d on page 82). Row permissions and column masks are copied to the new object in the new library by default because the default value for the ACCCTL parameter is *ALL ."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 98, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 353.7088317871094, "t": 754.8579711914062, "r": 523.63324, "b": 764.1048583984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9495401382446289, "cells": [{"id": 0, "text": "Chapter 5. RCAC and non-SQL interfaces ", "bbox": {"l": 354.29999, "t": 755.538002, "r": 523.63324, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 5. RCAC and non-SQL interfaces"}, {"label": "page_footer", "id": 1, "page_no": 98, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.67578125, "t": 754.3722534179688, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9193902611732483, "cells": [{"id": 1, "text": "83", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "83"}]}}, {"page_no": 99, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.472412109375, "t": 754.2569580078125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9049738645553589, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35282135009766, "t": 754.5419311523438, "r": 334.50579833984375, "b": 764.05126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411050081253052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 99, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.472412109375, "t": 754.2569580078125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9049738645553589, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "84"}, {"label": "page_footer", "id": 1, "page_no": 99, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35282135009766, "t": 754.5419311523438, "r": 334.50579833984375, "b": 764.05126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411050081253052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 99, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.472412109375, "t": 754.2569580078125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9049738645553589, "cells": [{"id": 0, "text": "84 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "84"}, {"label": "page_footer", "id": 1, "page_no": 99, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35282135009766, "t": 754.5419311523438, "r": 334.50579833984375, "b": 764.05126953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9411050081253052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 100, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.789581298828125, "t": 754.7017822265625, "r": 257.24335, "b": 764.1205444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9495893716812134, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6629028320312, "t": 754.3357543945312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917849063873291, "cells": [{"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.34396362304688, "t": 253.19119262695312, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9567626714706421, "cells": [{"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.87008666992188, "t": 316.7393493652344, "r": 531.34546, "b": 339.10498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9598965644836426, "cells": [{"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.8069610595703, "t": 346.03759765625, "r": 267.31885, "b": 356.3053283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.9453163743019104, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6639404296875, "t": 358.057373046875, "r": 221.46388244628906, "b": 367.94092, "coord_origin": "TOPLEFT"}, "confidence": 0.9263733625411987, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.80430603027344, "t": 370.3742370605469, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}, "confidence": 0.909616231918335, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.77816772460938, "t": 382.2833251953125, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9085867404937744, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.9530487060547, "t": 394.1155090332031, "r": 262.43051, "b": 404.1868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477983713150024, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.72091674804688, "t": 406.3046569824219, "r": 210.3322296142578, "b": 415.94019, "coord_origin": "TOPLEFT"}, "confidence": 0.9171162247657776, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.53468322753906, "t": 418.32232666015625, "r": 310.97345, "b": 428.54669189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9497132301330566, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.64329528808594, "t": 429.8523864746094, "r": 273.34265, "b": 440.3828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9438368082046509, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.005859375, "t": 451.9608154296875, "r": 347.41214, "b": 462.3204650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.875919759273529, "cells": [{"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.94393920898438, "t": 468.6572265625, "r": 267.31885, "b": 479.11810302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9442504644393921, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.8094024658203, "t": 480.9632568359375, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}, "confidence": 0.9341280460357666, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.80313110351562, "t": 492.80511474609375, "r": 248.5316162109375, "b": 502.96875, "coord_origin": "TOPLEFT"}, "confidence": 0.9282206892967224, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 135.69058227539062, "t": 504.4717712402344, "r": 368.62, "b": 515.00390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455210566520691, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.53225708007812, "t": 516.2424926757812, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}, "confidence": 0.9446545243263245, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.63209533691406, "t": 528.7277221679688, "r": 349.38428, "b": 539.08544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.68804931640625, "t": 540.8400268554688, "r": 390.44034, "b": 551.35888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9479876160621643, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.8003692626953, "t": 552.6859741210938, "r": 315.37079, "b": 563.0116577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9349662661552429, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.62815856933594, "t": 564.294189453125, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}, "confidence": 0.9371550679206848, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 135.61077880859375, "t": 576.708740234375, "r": 315.14774, "b": 587.1307983398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9537895917892456, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "text", "bbox": {"l": 500.39999, "t": 93.05345916748047, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7402352690696716, "cells": [{"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 32.03302764892578, "t": 70.35401916503906, "r": 238.4545135498047, "b": 238.00796508789062, "coord_origin": "TOPLEFT"}, "confidence": 0.6230185627937317, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 100, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.789581298828125, "t": 754.7017822265625, "r": 257.24335, "b": 764.1205444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9495893716812134, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 100, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6629028320312, "t": 754.3357543945312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917849063873291, "cells": [{"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "85"}, {"label": "text", "id": 2, "page_no": 100, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6."}, {"label": "section_header", "id": 3, "page_no": 100, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.34396362304688, "t": 253.19119262695312, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9567626714706421, "cells": [{"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Additional considerations"}, {"label": "text", "id": 4, "page_no": 100, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.87008666992188, "t": 316.7393493652344, "r": 531.34546, "b": 339.10498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9598965644836426, "cells": [{"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions:"}, {"label": "list_item", "id": 5, "page_no": 100, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.8069610595703, "t": 346.03759765625, "r": 267.31885, "b": 356.3053283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.9453163743019104, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 6, "page_no": 100, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6639404296875, "t": 358.057373046875, "r": 221.46388244628906, "b": 367.94092, "coord_origin": "TOPLEFT"}, "confidence": 0.9263733625411987, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Data movement"}, {"label": "list_item", "id": 7, "page_no": 100, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.80430603027344, "t": 370.3742370605469, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}, "confidence": 0.909616231918335, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Joins"}, {"label": "list_item", "id": 8, "page_no": 100, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77816772460938, "t": 382.2833251953125, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9085867404937744, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views"}, {"label": "list_item", "id": 9, "page_no": 100, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.9530487060547, "t": 394.1155090332031, "r": 262.43051, "b": 404.1868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477983713150024, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Materialized query tables"}, {"label": "list_item", "id": 10, "page_no": 100, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72091674804688, "t": 406.3046569824219, "r": 210.3322296142578, "b": 415.94019, "coord_origin": "TOPLEFT"}, "confidence": 0.9171162247657776, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Index advisor"}, {"label": "list_item", "id": 11, "page_no": 100, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53468322753906, "t": 418.32232666015625, "r": 310.97345, "b": 428.54669189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9497132301330566, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analysis, and debugging"}, {"label": "list_item", "id": 12, "page_no": 100, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64329528808594, "t": 429.8523864746094, "r": 273.34265, "b": 440.3828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9438368082046509, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and scalability"}, {"label": "text", "id": 13, "page_no": 100, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.005859375, "t": 451.9608154296875, "r": 347.41214, "b": 462.3204650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.875919759273529, "cells": [{"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 14, "page_no": 100, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.94393920898438, "t": 468.6572265625, "r": 267.31885, "b": 479.11810302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9442504644393921, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 15, "page_no": 100, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8094024658203, "t": 480.9632568359375, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}, "confidence": 0.9341280460357666, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on data movement"}, {"label": "list_item", "id": 16, "page_no": 100, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.80313110351562, "t": 492.80511474609375, "r": 248.5316162109375, "b": 502.96875, "coord_origin": "TOPLEFT"}, "confidence": 0.9282206892967224, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on joins"}, {"label": "list_item", "id": 17, "page_no": 100, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.69058227539062, "t": 504.4717712402344, "r": 368.62, "b": 515.00390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455210566520691, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analyzing, and debugging with RCAC"}, {"label": "list_item", "id": 18, "page_no": 100, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.53225708007812, "t": 516.2424926757812, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}, "confidence": 0.9446545243263245, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views, materialized query tables, and query rewrite with RCAC"}, {"label": "list_item", "id": 19, "page_no": 100, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.63209533691406, "t": 528.7277221679688, "r": 349.38428, "b": 539.08544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on performance and scalability"}, {"label": "list_item", "id": 20, "page_no": 100, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68804931640625, "t": 540.8400268554688, "r": 390.44034, "b": 551.35888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9479876160621643, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Exclusive lock to implement RCAC (availability issues)"}, {"label": "list_item", "id": 21, "page_no": 100, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.8003692626953, "t": 552.6859741210938, "r": 315.37079, "b": 563.0116577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9349662661552429, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Avoiding propagation of masked data"}, {"label": "list_item", "id": 22, "page_no": 100, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62815856933594, "t": 564.294189453125, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}, "confidence": 0.9371550679206848, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Triggers and functions (SECURED)"}, {"label": "list_item", "id": 23, "page_no": 100, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.61077880859375, "t": 576.708740234375, "r": 315.14774, "b": 587.1307983398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9537895917892456, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC is only one part of the solution"}, {"label": "text", "id": 24, "page_no": 100, "cluster": {"id": 24, "label": "text", "bbox": {"l": 500.39999, "t": 93.05345916748047, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7402352690696716, "cells": [{"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "picture", "id": 25, "page_no": 100, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 32.03302764892578, "t": 70.35401916503906, "r": 238.4545135498047, "b": 238.00796508789062, "coord_origin": "TOPLEFT"}, "confidence": 0.6230185627937317, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 100, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 6.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6."}, {"label": "section_header", "id": 3, "page_no": 100, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.34396362304688, "t": 253.19119262695312, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9567626714706421, "cells": [{"id": 3, "text": "Additional considerations", "bbox": {"l": 136.8, "t": 254.88635, "r": 455.59796, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Additional considerations"}, {"label": "text", "id": 4, "page_no": 100, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.87008666992188, "t": 316.7393493652344, "r": 531.34546, "b": 339.10498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9598965644836426, "cells": [{"id": 4, "text": "This chapter covers additional considerations that must be taken into account when ", "bbox": {"l": 136.8, "t": 317.68872, "r": 507.11765, "b": 326.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "implementing Row and Column Access Control (RCAC), including the following functions:", "bbox": {"l": 136.8, "t": 329.68854, "r": 531.34546, "b": 338.90152, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter covers additional considerations that must be taken into account when implementing Row and Column Access Control (RCAC), including the following functions:"}, {"label": "list_item", "id": 5, "page_no": 100, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.8069610595703, "t": 346.03759765625, "r": 267.31885, "b": 356.3053283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.9453163743019104, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 346.8775, "r": 141.78, "b": 355.65228, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 346.72812, "r": 267.31885, "b": 355.94110000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 6, "page_no": 100, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6639404296875, "t": 358.057373046875, "r": 221.46388244628906, "b": 367.94092, "coord_origin": "TOPLEFT"}, "confidence": 0.9263733625411987, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 358.87731999999994, "r": 141.78, "b": 367.6521, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Data movement", "bbox": {"l": 151.20016, "t": 358.72794, "r": 221.34749999999997, "b": 367.94092, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Data movement"}, {"label": "list_item", "id": 7, "page_no": 100, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.80430603027344, "t": 370.3742370605469, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}, "confidence": 0.909616231918335, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 370.87714000000005, "r": 141.78, "b": 379.65191999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Joins", "bbox": {"l": 151.20016, "t": 370.72775, "r": 174.48665, "b": 379.94073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Joins"}, {"label": "list_item", "id": 8, "page_no": 100, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.77816772460938, "t": 382.2833251953125, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9085867404937744, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 382.87695, "r": 141.78, "b": 391.65173, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Views", "bbox": {"l": 151.20016, "t": 382.72757, "r": 177.67285, "b": 391.94055000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views"}, {"label": "list_item", "id": 9, "page_no": 100, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.9530487060547, "t": 394.1155090332031, "r": 262.43051, "b": 404.1868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9477983713150024, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 394.87677, "r": 141.78, "b": 403.65155, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Materialized query tables", "bbox": {"l": 151.20016, "t": 394.72739, "r": 262.43051, "b": 403.94037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Materialized query tables"}, {"label": "list_item", "id": 10, "page_no": 100, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.72091674804688, "t": 406.3046569824219, "r": 210.3322296142578, "b": 415.94019, "coord_origin": "TOPLEFT"}, "confidence": 0.9171162247657776, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 406.87659, "r": 141.78, "b": 415.65136999999993, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Index advisor", "bbox": {"l": 151.20016, "t": 406.7272, "r": 210.29085, "b": 415.94019, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Index advisor"}, {"label": "list_item", "id": 11, "page_no": 100, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53468322753906, "t": 418.32232666015625, "r": 310.97345, "b": 428.54669189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9497132301330566, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 418.8764, "r": 141.78, "b": 427.65118, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Monitoring, analysis, and debugging", "bbox": {"l": 151.20016, "t": 418.72702, "r": 310.97345, "b": 427.94, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analysis, and debugging"}, {"label": "list_item", "id": 12, "page_no": 100, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.64329528808594, "t": 429.8523864746094, "r": 273.34265, "b": 440.3828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9438368082046509, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 430.87622, "r": 141.78, "b": 439.651, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Performance and scalability", "bbox": {"l": 151.20016, "t": 430.72684, "r": 273.34265, "b": 439.93981999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and scalability"}, {"label": "text", "id": 13, "page_no": 100, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.005859375, "t": 451.9608154296875, "r": 347.41214, "b": 462.3204650878906, "coord_origin": "TOPLEFT"}, "confidence": 0.875919759273529, "cells": [{"id": 22, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 452.68665, "r": 347.41214, "b": 461.89963, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 14, "page_no": 100, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.94393920898438, "t": 468.6572265625, "r": 267.31885, "b": 479.11810302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9442504644393921, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.87561, "r": 141.78, "b": 478.65039, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Timing of column masking", "bbox": {"l": 151.20016, "t": 469.72623, "r": 267.31885, "b": 478.93921, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Timing of column masking"}, {"label": "list_item", "id": 15, "page_no": 100, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.8094024658203, "t": 480.9632568359375, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}, "confidence": 0.9341280460357666, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.87543, "r": 141.78, "b": 490.65021, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC effects on data movement", "bbox": {"l": 151.20016, "t": 481.72604, "r": 296.34232, "b": 490.93903, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on data movement"}, {"label": "list_item", "id": 16, "page_no": 100, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.80313110351562, "t": 492.80511474609375, "r": 248.5316162109375, "b": 502.96875, "coord_origin": "TOPLEFT"}, "confidence": 0.9282206892967224, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.87524, "r": 141.78, "b": 502.65002, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on joins", "bbox": {"l": 151.20016, "t": 493.72586, "r": 248.37093, "b": 502.93884, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on joins"}, {"label": "list_item", "id": 17, "page_no": 100, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.69058227539062, "t": 504.4717712402344, "r": 368.62, "b": 515.00390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9455210566520691, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.87506, "r": 141.78, "b": 514.64984, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 151.20016, "t": 505.72568, "r": 368.62, "b": 514.93866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring, analyzing, and debugging with RCAC"}, {"label": "list_item", "id": 18, "page_no": 100, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.53225708007812, "t": 516.2424926757812, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}, "confidence": 0.9446545243263245, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.8748800000001, "r": 141.78, "b": 526.64966, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Views, materialized query tables, and query rewrite with RCAC", "bbox": {"l": 151.20016, "t": 517.72549, "r": 428.50857999999994, "b": 526.93848, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Views, materialized query tables, and query rewrite with RCAC"}, {"label": "list_item", "id": 19, "page_no": 100, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.63209533691406, "t": 528.7277221679688, "r": 349.38428, "b": 539.08544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 529.87469, "r": 141.78, "b": 538.64944, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RCAC effects on performance and scalability", "bbox": {"l": 151.20016, "t": 529.72528, "r": 349.38428, "b": 538.93829, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC effects on performance and scalability"}, {"label": "list_item", "id": 20, "page_no": 100, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.68804931640625, "t": 540.8400268554688, "r": 390.44034, "b": 551.35888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9479876160621643, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 541.8745, "r": 141.78, "b": 550.6492499999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 151.20016, "t": 541.7251, "r": 390.44034, "b": 550.9381, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Exclusive lock to implement RCAC (availability issues)"}, {"label": "list_item", "id": 21, "page_no": 100, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.8003692626953, "t": 552.6859741210938, "r": 315.37079, "b": 563.0116577148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9349662661552429, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 553.8743, "r": 141.77998, "b": 562.64905, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Avoiding propagation of masked data", "bbox": {"l": 151.20015, "t": 553.7249, "r": 315.37079, "b": 562.9379, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Avoiding propagation of masked data"}, {"label": "list_item", "id": 22, "page_no": 100, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.62815856933594, "t": 564.294189453125, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}, "confidence": 0.9371550679206848, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 565.8741, "r": 141.77998, "b": 574.64885, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers and functions (SECURED)", "bbox": {"l": 151.20015, "t": 565.7247, "r": 307.30423, "b": 574.9377, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Triggers and functions (SECURED)"}, {"label": "list_item", "id": 23, "page_no": 100, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.61077880859375, "t": 576.708740234375, "r": 315.14774, "b": 587.1307983398438, "coord_origin": "TOPLEFT"}, "confidence": 0.9537895917892456, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 577.8739, "r": 141.77998, "b": 586.64865, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "RCAC is only one part of the solution", "bbox": {"l": 151.20015, "t": 577.7245, "r": 315.14774, "b": 586.9375, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC is only one part of the solution"}, {"label": "text", "id": 24, "page_no": 100, "cluster": {"id": 24, "label": "text", "bbox": {"l": 500.39999, "t": 93.05345916748047, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7402352690696716, "cells": [{"id": 43, "text": "6", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "picture", "id": 25, "page_no": 100, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 32.03302764892578, "t": 70.35401916503906, "r": 238.4545135498047, "b": 238.00796508789062, "coord_origin": "TOPLEFT"}, "confidence": 0.6230185627937317, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 100, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.789581298828125, "t": 754.7017822265625, "r": 257.24335, "b": 764.1205444335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9495893716812134, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 100, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6629028320312, "t": 754.3357543945312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.917849063873291, "cells": [{"id": 1, "text": "85", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "85"}]}}, {"page_no": 101, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.28016662597656, "t": 754.42529296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138955473899841, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.40719604492188, "t": 754.6533813476562, "r": 334.42142, "b": 763.9609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9498723745346069, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.63821411132812, "t": 73.412353515625, "r": 298.45441, "b": 89.93876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9695685505867004, "cells": [{"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9453887939453, "t": 105.85498046875, "r": 547.24963, "b": 164.5647430419922, "coord_origin": "TOPLEFT"}, "confidence": 0.9870750308036804, "cells": [{"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.015625, "t": 176.0285186767578, "r": 547.23254, "b": 198.28158569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9749656319618225, "cells": [{"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.17198181152344, "t": 472.1231689453125, "r": 290.1625061035156, "b": 481.7851867675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9372553825378418, "cells": [{"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 222.81260681152344, "t": 223.79876708984375, "r": 250.3378143310547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6529437899589539, "cells": [{"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 289.8625183105469, "t": 223.75645446777344, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6274991631507874, "cells": [{"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 223.27870178222656, "t": 245.79042053222656, "r": 247.33633422851562, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": 0.7264513373374939, "cells": [{"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 223.30404663085938, "t": 256.77313232421875, "r": 264.05712890625, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.739473283290863, "cells": [{"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 289.9476623535156, "t": 256.7027893066406, "r": 384.1680908203125, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.727581799030304, "cells": [{"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 223.270263671875, "t": 268.14324951171875, "r": 262.7109680175781, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.74038165807724, "cells": [{"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 290.0070495605469, "t": 267.8889465332031, "r": 386.24557, "b": 277.3880920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.754478394985199, "cells": [{"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 160.457, "t": 297.8916931152344, "r": 285.01361083984375, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8418190479278564, "cells": [{"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "section_header", "bbox": {"l": 341.02625, "t": 297.97357177734375, "r": 447.76593017578125, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8612884283065796, "cells": [{"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 101, "cluster": {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, "15": {"label": "table", "id": 15, "page_no": 101, "cluster": {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 101, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.28016662597656, "t": 754.42529296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138955473899841, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "86"}, {"label": "page_footer", "id": 1, "page_no": 101, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40719604492188, "t": 754.6533813476562, "r": 334.42142, "b": 763.9609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9498723745346069, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 101, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.63821411132812, "t": 73.412353515625, "r": 298.45441, "b": 89.93876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9695685505867004, "cells": [{"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "6.1 Timing of column masking"}, {"label": "text", "id": 3, "page_no": 101, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9453887939453, "t": 105.85498046875, "r": 547.24963, "b": 164.5647430419922, "coord_origin": "TOPLEFT"}, "confidence": 0.9870750308036804, "cells": [{"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking."}, {"label": "text", "id": 4, "page_no": 101, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.015625, "t": 176.0285186767578, "r": 547.23254, "b": 198.28158569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9749656319618225, "cells": [{"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values."}, {"label": "caption", "id": 5, "page_no": 101, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17198181152344, "t": 472.1231689453125, "r": 290.1625061035156, "b": 481.7851867675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9372553825378418, "cells": [{"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-1 Timing of column masking"}, {"label": "text", "id": 6, "page_no": 101, "cluster": {"id": 6, "label": "text", "bbox": {"l": 222.81260681152344, "t": 223.79876708984375, "r": 250.3378143310547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6529437899589539, "cells": [{"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT"}, {"label": "text", "id": 7, "page_no": 101, "cluster": {"id": 7, "label": "text", "bbox": {"l": 289.8625183105469, "t": 223.75645446777344, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6274991631507874, "cells": [{"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER,"}, {"label": "text", "id": 8, "page_no": 101, "cluster": {"id": 8, "label": "text", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "SUM(AMOUNT) AS TOTAL TRANSACTIONS"}, {"label": "text", "id": 9, "page_no": 101, "cluster": {"id": 9, "label": "text", "bbox": {"l": 223.27870178222656, "t": 245.79042053222656, "r": 247.33633422851562, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": 0.7264513373374939, "cells": [{"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 10, "page_no": 101, "cluster": {"id": 10, "label": "text", "bbox": {"l": 223.30404663085938, "t": 256.77313232421875, "r": 264.05712890625, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.739473283290863, "cells": [{"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "GROUP BY"}, {"label": "text", "id": 11, "page_no": 101, "cluster": {"id": 11, "label": "text", "bbox": {"l": 289.9476623535156, "t": 256.7027893066406, "r": 384.1680908203125, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.727581799030304, "cells": [{"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER"}, {"label": "text", "id": 12, "page_no": 101, "cluster": {"id": 12, "label": "text", "bbox": {"l": 223.270263671875, "t": 268.14324951171875, "r": 262.7109680175781, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.74038165807724, "cells": [{"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "ORDER BY"}, {"label": "text", "id": 13, "page_no": 101, "cluster": {"id": 13, "label": "text", "bbox": {"l": 290.0070495605469, "t": 267.8889465332031, "r": 386.24557, "b": 277.3880920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.754478394985199, "cells": [{"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER;"}, {"label": "table", "id": 14, "page_no": 101, "cluster": {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "table", "id": 15, "page_no": 101, "cluster": {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "section_header", "id": 16, "page_no": 101, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 160.457, "t": 297.8916931152344, "r": 285.01361083984375, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8418190479278564, "cells": [{"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "Without RCAC Masking"}, {"label": "section_header", "id": 17, "page_no": 101, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 341.02625, "t": 297.97357177734375, "r": 447.76593017578125, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8612884283065796, "cells": [{"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "With RCAC Masking"}], "body": [{"label": "section_header", "id": 2, "page_no": 101, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.63821411132812, "t": 73.412353515625, "r": 298.45441, "b": 89.93876647949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9695685505867004, "cells": [{"id": 2, "text": "6.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.453255, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Timing of column masking", "bbox": {"l": 91.983902, "t": 74.34069999999997, "r": 298.45441, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "6.1 Timing of column masking"}, {"label": "text", "id": 3, "page_no": 101, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9453887939453, "t": 105.85498046875, "r": 547.24963, "b": 164.5647430419922, "coord_origin": "TOPLEFT"}, "confidence": 0.9870750308036804, "cells": [{"id": 4, "text": "An important design and implementation consideration is the fact that RCAC column masking ", "bbox": {"l": 136.8, "t": 106.6087, "r": 547.24963, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "occurs after all of the query processing is complete, which means that the query results are ", "bbox": {"l": 136.8, "t": 118.60852, "r": 542.35236, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "not at all based on the masked values. Any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.8, "t": 130.60834, "r": 527.76294, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "operations are based on the unmasked column values. Only the final result set is the target of ", "bbox": {"l": 136.8, "t": 142.60815000000002, "r": 547.23962, "b": 151.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the masking. ", "bbox": {"l": 136.8, "t": 154.60797000000002, "r": 196.23331, "b": 163.82097999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An important design and implementation consideration is the fact that RCAC column masking occurs after all of the query processing is complete, which means that the query results are not at all based on the masked values. Any local selection, joining, grouping, or ordering operations are based on the unmasked column values. Only the final result set is the target of the masking."}, {"label": "text", "id": 4, "page_no": 101, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.015625, "t": 176.0285186767578, "r": 547.23254, "b": 198.28158569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9749656319618225, "cells": [{"id": 9, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a ", "bbox": {"l": 136.8, "t": 176.62756000000002, "r": 547.23254, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "form of grouping) are based on masked values.", "bbox": {"l": 136.8, "t": 188.62738000000002, "r": 345.5368, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "An example of this situation is shown in Figure 6-1. However, note that aggregate functions (a form of grouping) are based on masked values."}, {"label": "caption", "id": 5, "page_no": 101, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.17198181152344, "t": 472.1231689453125, "r": 290.1625061035156, "b": 481.7851867675781, "coord_origin": "TOPLEFT"}, "confidence": 0.9372553825378418, "cells": [{"id": 11, "text": "Figure 6-1 Timing of column masking", "bbox": {"l": 136.8, "t": 472.578, "r": 289.59567, "b": 480.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-1 Timing of column masking"}, {"label": "text", "id": 6, "page_no": 101, "cluster": {"id": 6, "label": "text", "bbox": {"l": 222.81260681152344, "t": 223.79876708984375, "r": 250.3378143310547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6529437899589539, "cells": [{"id": 12, "text": "SELECT", "bbox": {"l": 223.54629999999997, "t": 224.41350999999997, "r": 250.22076000000004, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT"}, {"label": "text", "id": 7, "page_no": 101, "cluster": {"id": 7, "label": "text", "bbox": {"l": 289.8625183105469, "t": 223.75645446777344, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}, "confidence": 0.6274991631507874, "cells": [{"id": 13, "text": "CREDIT_CARD_NUMBER,", "bbox": {"l": 290.24081, "t": 224.41350999999997, "r": 386.13547, "b": 232.33582, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER,"}, {"label": "text", "id": 8, "page_no": 101, "cluster": {"id": 8, "label": "text", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 14, "text": "SUM(AMOUNT) AS TOTAL", "bbox": {"l": 290.2482, "t": 235.53063999999995, "r": 389.2164, "b": 243.45294, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "TRANSACTIONS", "bbox": {"l": 290.24869, "t": 246.64757999999995, "r": 350.20563, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "SUM(AMOUNT) AS TOTAL TRANSACTIONS"}, {"label": "text", "id": 9, "page_no": 101, "cluster": {"id": 9, "label": "text", "bbox": {"l": 223.27870178222656, "t": 245.79042053222656, "r": 247.33633422851562, "b": 254.56989, "coord_origin": "TOPLEFT"}, "confidence": 0.7264513373374939, "cells": [{"id": 15, "text": "FROM", "bbox": {"l": 223.54629999999997, "t": 246.64757999999995, "r": 247.25089, "b": 254.56989, "coord_origin": "TOPLEFT"}}]}, "text": "FROM"}, {"label": "text", "id": 10, "page_no": 101, "cluster": {"id": 10, "label": "text", "bbox": {"l": 223.30404663085938, "t": 256.77313232421875, "r": 264.05712890625, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.739473283290863, "cells": [{"id": 17, "text": "GROUP BY", "bbox": {"l": 223.54629999999997, "t": 257.76471000000004, "r": 263.57651, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "GROUP BY"}, {"label": "text", "id": 11, "page_no": 101, "cluster": {"id": 11, "label": "text", "bbox": {"l": 289.9476623535156, "t": 256.7027893066406, "r": 384.1680908203125, "b": 265.68701, "coord_origin": "TOPLEFT"}, "confidence": 0.727581799030304, "cells": [{"id": 18, "text": "CREDIT_CARD_NUMBER", "bbox": {"l": 290.2843, "t": 257.76471000000004, "r": 383.71991, "b": 265.68701, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER"}, {"label": "text", "id": 12, "page_no": 101, "cluster": {"id": 12, "label": "text", "bbox": {"l": 223.270263671875, "t": 268.14324951171875, "r": 262.7109680175781, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.74038165807724, "cells": [{"id": 19, "text": "ORDER BY", "bbox": {"l": 223.54629999999997, "t": 268.88184, "r": 262.38541, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "ORDER BY"}, {"label": "text", "id": 13, "page_no": 101, "cluster": {"id": 13, "label": "text", "bbox": {"l": 290.0070495605469, "t": 267.8889465332031, "r": 386.24557, "b": 277.3880920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.754478394985199, "cells": [{"id": 20, "text": "CREDIT_CARD_NUMBER;", "bbox": {"l": 290.28986, "t": 268.88184, "r": 386.24557, "b": 276.80413999999996, "coord_origin": "TOPLEFT"}}]}, "text": "CREDIT_CARD_NUMBER;"}, {"label": "table", "id": 14, "page_no": 101, "cluster": {"id": 14, "label": "table", "bbox": {"l": 143.16891479492188, "t": 312.9064636230469, "r": 300.13482666015625, "b": 464.53564453125, "coord_origin": "TOPLEFT"}, "confidence": 0.938347578048706, "cells": [{"id": 21, "text": "CREDIT CARD NUMBER", "bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TOTAL", "bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "_", "bbox": {"l": 174.2422, "t": 317.02898999999996, "r": 178.39442, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "_", "bbox": {"l": 197.80983, "t": 317.02898999999996, "r": 201.96205, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "3785 0000 0000 1234", "bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "233.50", "bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "3785 1111 1111 1234", "bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "105.10", "bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "3785 2222 2222 1234", "bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "300 00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "300.00", "bbox": {"l": 272.40579, "t": 357.60629, "r": 295.6427, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "3785 3333 3333 1234", "bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1,775.00", "bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "5466 4444 4444 1234", "bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "601.70", "bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "5466 5555 5555 1234", "bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "37.80", "bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "5466 6666 6666 1234", "bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "490.45", "bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "6011 7777 7777 1234", "bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "1005.00", "bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "6011 8888 8888 1234", "bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "750.33", "bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "6011 9999 9999 0001", "bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "10.00", "bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 149.4512, "t": 317.02898999999996, "r": 233.62379, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 257.74921, "t": 317.02898999999996, "r": 279.16821, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 330.5637500000001, "r": 221.83939, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 0000 0000 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.4223, "t": 330.5637500000001, "r": 295.64975, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.50592, "t": 344.07098, "r": 221.83853, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 1111 1111 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42145, "t": 344.07098, "r": 295.6489, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 357.60629, "r": 221.84132000000002, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 2222 2222 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.40579, "t": 357.60629, "r": 295.64658, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 371.1413, "r": 221.85214, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3785 3333 3333 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 266.12503, "t": 371.1413, "r": 295.66751, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 384.64853, "r": 221.83881000000002, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 4444 4444 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 384.64853, "r": 295.6492, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 398.18347, "r": 221.83881000000002, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 5555 5555 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 398.18347, "r": 295.64832, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 411.71823, "r": 221.83881000000002, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "5466 6666 6666 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 411.71823, "r": 295.6492, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 425.2258, "r": 221.84132000000002, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 7777 7777 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 268.1813, "t": 425.2258, "r": 295.64603, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 438.76077, "r": 221.83881000000002, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 8888 8888 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 272.42175, "t": 438.76077, "r": 295.6492, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 148.5062, "t": 452.29553, "r": 221.83881000000002, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "6011 9999 9999 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 276.64648, "t": 452.29553, "r": 295.64832, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "table", "id": 15, "page_no": 101, "cluster": {"id": 15, "label": "table", "bbox": {"l": 313.3494567871094, "t": 312.5643005371094, "r": 470.7187805175781, "b": 464.93182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9333541393280029, "cells": [{"id": 23, "text": "CREDIT CARD NUMBER", "bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "TOTAL", "bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "_", "bbox": {"l": 343.77731, "t": 317.02898999999996, "r": 347.92953, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "_", "bbox": {"l": 367.34494, "t": 317.02898999999996, "r": 371.49716, "b": 324.16614, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "233.50", "bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "**** **** **** 1234", "bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "105.10", "bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "300 00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "300.00", "bbox": {"l": 441.94089, "t": 357.60629, "r": 465.1777, "b": 364.73511, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "1,775.00", "bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "601.70", "bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "37.80", "bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "490.45", "bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35428, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "1005.00", "bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": " 1234", "bbox": {"l": 371.76227, "t": 425.2258, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "**** **** **** 1234", "bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "750.33", "bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "**** **** **** 0001", "bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "10.00", "bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 11, "num_cols": 2, "table_cells": [{"bbox": {"l": 318.98621, "t": 317.02898999999996, "r": 403.15881, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CREDIT CARD NUMBER _ _", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 427.28424, "t": 317.02898999999996, "r": 448.70325, "b": 324.16614, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "TOTAL", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 330.5637500000001, "r": 390.68494, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 330.5637500000001, "r": 465.16064, "b": 337.69257, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "233.50", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04102, "t": 344.07098, "r": 390.68494, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96823, "t": 344.07098, "r": 465.16064, "b": 351.19980000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "105.10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 357.60629, "r": 390.65433, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.94089, "t": 357.60629, "r": 465.18167, "b": 364.73511, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "300 00 300.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 371.1413, "r": 390.69855, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 435.67264000000006, "t": 371.1413, "r": 465.16843000000006, "b": 378.27011, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1,775.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 384.64853, "r": 390.68521, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 384.64853, "r": 465.1609199999999, "b": 391.77734, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "601.70", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 398.18347, "r": 390.68521, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 398.18347, "r": 465.16595, "b": 405.3122900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "37.80", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 411.71823, "r": 390.68521, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 411.71823, "r": 465.1609199999999, "b": 418.84705, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "490.45", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 425.22546, "r": 390.66788, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 437.7164, "t": 425.2258, "r": 465.18112, "b": 432.35461000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1005.00", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 438.76077, "r": 390.68521, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 1234", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 441.96851, "t": 438.76077, "r": 465.1609199999999, "b": 445.88958999999994, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "750.33", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 318.04129, "t": 452.29553, "r": 390.68521, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "**** **** **** 0001", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 446.1933, "t": 452.29553, "r": 465.16595, "b": 459.42435000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10.00", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "section_header", "id": 16, "page_no": 101, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 160.457, "t": 297.8916931152344, "r": 285.01361083984375, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8418190479278564, "cells": [{"id": 25, "text": "Without ", "bbox": {"l": 160.457, "t": 298.77588, "r": 207.85185, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC Masking", "bbox": {"l": 207.84406, "t": 298.76291, "r": 284.9068, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "Without RCAC Masking"}, {"label": "section_header", "id": 17, "page_no": 101, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 341.02625, "t": 297.97357177734375, "r": 447.76593017578125, "b": 310.3793, "coord_origin": "TOPLEFT"}, "confidence": 0.8612884283065796, "cells": [{"id": 27, "text": "With ", "bbox": {"l": 341.02625, "t": 298.77588, "r": 370.2554, "b": 310.3793, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC Masking", "bbox": {"l": 370.23593, "t": 298.76291, "r": 447.29868000000005, "b": 309.87311, "coord_origin": "TOPLEFT"}}]}, "text": "With RCAC Masking"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 101, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.28016662597656, "t": 754.42529296875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9138955473899841, "cells": [{"id": 0, "text": "86 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "86"}, {"label": "page_footer", "id": 1, "page_no": 101, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.40719604492188, "t": 754.6533813476562, "r": 334.42142, "b": 763.9609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9498723745346069, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 102, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.0430603027344, "t": 754.8911743164062, "r": 523.62878, "b": 764.1041870117188, "coord_origin": "TOPLEFT"}, "confidence": 0.951887309551239, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6262817382812, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9136953949928284, "cells": [{"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.76144409179688, "t": 70.67374420166016, "r": 547.14746, "b": 164.8749542236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9858981370925903, "cells": [{"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.22874450683594, "t": 531.9801025390625, "r": 386.6689758300781, "b": 541.701416015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9406759738922119, "cells": [{"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 142.0433349609375, "t": 182.4264373779297, "r": 540.74689, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9510505199432373, "cells": [{"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.07940673828125, "t": 255.5457000732422, "r": 412.541015625, "b": 529.3939819335938, "coord_origin": "TOPLEFT"}, "confidence": 0.984312891960144, "cells": [{"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 102, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0430603027344, "t": 754.8911743164062, "r": 523.62878, "b": 764.1041870117188, "coord_origin": "TOPLEFT"}, "confidence": 0.951887309551239, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 102, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6262817382812, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9136953949928284, "cells": [{"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "87"}, {"label": "text", "id": 2, "page_no": 102, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.76144409179688, "t": 70.67374420166016, "r": 547.14746, "b": 164.8749542236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9858981370925903, "cells": [{"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query\u2019s final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2."}, {"label": "caption", "id": 3, "page_no": 102, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.22874450683594, "t": 531.9801025390625, "r": 386.6689758300781, "b": 541.701416015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9406759738922119, "cells": [{"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC"}, {"label": "text", "id": 4, "page_no": 102, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.0433349609375, "t": 182.4264373779297, "r": 540.74689, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9510505199432373, "cells": [{"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask."}, {"label": "picture", "id": 5, "page_no": 102, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.07940673828125, "t": 255.5457000732422, "r": 412.541015625, "b": 529.3939819335938, "coord_origin": "TOPLEFT"}, "confidence": 0.984312891960144, "cells": [{"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 102, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.76144409179688, "t": 70.67374420166016, "r": 547.14746, "b": 164.8749542236328, "coord_origin": "TOPLEFT"}, "confidence": 0.9858981370925903, "cells": [{"id": 2, "text": "Conversely, field procedure masking causes the column values to be changed (that is, ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 518.83441, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "masked) and stored in the row. When the table is queried and the masked columns are ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 522.90308, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "referenced, the masked data is used for any local selection, joining, grouping, or ordering ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.92255, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "operations. This situation can have a profound effect on the query\u2019s final result set and not ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 536.70471, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "just on the column values that are returned. Field procedure masking occurs when the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 519.66205, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "column values are read from disk before any query processing. RCAC masking occurs when ", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 547.14746, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the column values are returned to the application after query processing. This difference in ", "bbox": {"l": 136.79959, "t": 143.50793, "r": 538.93219, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "behavior is shown in Figure 6-2.", "bbox": {"l": 136.79959, "t": 155.50775, "r": 278.22067, "b": 164.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Conversely, field procedure masking causes the column values to be changed (that is, masked) and stored in the row. When the table is queried and the masked columns are referenced, the masked data is used for any local selection, joining, grouping, or ordering operations. This situation can have a profound effect on the query\u2019s final result set and not just on the column values that are returned. Field procedure masking occurs when the column values are read from disk before any query processing. RCAC masking occurs when the column values are returned to the application after query processing. This difference in behavior is shown in Figure 6-2."}, {"label": "caption", "id": 3, "page_no": 102, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.22874450683594, "t": 531.9801025390625, "r": 386.6689758300781, "b": 541.701416015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9406759738922119, "cells": [{"id": 10, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC", "bbox": {"l": 136.8, "t": 532.9379, "r": 385.92093, "b": 541.26291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-2 Masking differences between Fieldproc and RCAC"}, {"label": "text", "id": 4, "page_no": 102, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.0433349609375, "t": 182.4264373779297, "r": 540.74689, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9510505199432373, "cells": [{"id": 11, "text": "Note:", "bbox": {"l": 142.8, "t": 183.52868999999998, "r": 168.33246, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " Column masks can influence an SQL ", "bbox": {"l": 168.36035, "t": 183.52868999999998, "r": 338.26401, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "INSERT", "bbox": {"l": 338.3407, "t": 183.67809999999997, "r": 368.28046, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " or ", "bbox": {"l": 368.28046, "t": 183.52868999999998, "r": 382.79913, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "UPDATE", "bbox": {"l": 382.74039, "t": 183.67809999999997, "r": 412.68015, "b": 192.50269000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ". For example, you cannot ", "bbox": {"l": 412.7399, "t": 183.52868999999998, "r": 530.08759, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "insert or update a table with column access control activated with masked data generated ", "bbox": {"l": 142.79999, "t": 195.5285, "r": 540.74689, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "from an expression within the same statement that is based on a column with a column ", "bbox": {"l": 142.79999, "t": 207.52832, "r": 529.61914, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "mask.", "bbox": {"l": 142.79999, "t": 219.52814, "r": 169.49278, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Column masks can influence an SQL INSERT or UPDATE . For example, you cannot insert or update a table with column access control activated with masked data generated from an expression within the same statement that is based on a column with a column mask."}, {"label": "picture", "id": 5, "page_no": 102, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.07940673828125, "t": 255.5457000732422, "r": 412.541015625, "b": 529.3939819335938, "coord_origin": "TOPLEFT"}, "confidence": 0.984312891960144, "cells": [{"id": 20, "text": "RCAC", "bbox": {"l": 342.6669, "t": 353.21677, "r": 363.56644, "b": 361.33936000000006, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "SQE S l", "bbox": {"l": 196.25211, "t": 403.55573, "r": 232.60068, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ti", "bbox": {"l": 242.64763, "t": 403.55573, "r": 247.37315, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "P", "bbox": {"l": 260.52017, "t": 403.55573, "r": 266.83984, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "i", "bbox": {"l": 294.80676, "t": 403.55573, "r": 296.90384, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Column mask", "bbox": {"l": 347.00021, "t": 364.60345, "r": 399.17926, "b": 372.71655000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "processing", "bbox": {"l": 349.15137, "t": 375.99026, "r": 390.10114, "b": 384.10336, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "SQE Selecti", "bbox": {"l": 196.25211, "t": 403.55573, "r": 247.37483, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "on", "bbox": {"l": 247.3976, "t": 403.55573, "r": 257.95886, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Processing", "bbox": {"l": 260.52399, "t": 403.55573, "r": 307.49136, "b": 412.01993, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r3vS#45zt!J9*m$p6", "bbox": {"l": 212.0354, "t": 475.92493, "r": 294.86868, "b": 484.38913, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FieldProc", "bbox": {"l": 336.34091, "t": 451.58566, "r": 372.53864, "b": 459.70825, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Decode and mask", "bbox": {"l": 338.87164, "t": 462.97247, "r": 407.23135, "b": 471.08557, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "processing", "bbox": {"l": 338.4921, "t": 474.35928, "r": 379.44186, "b": 482.47238, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 102, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0430603027344, "t": 754.8911743164062, "r": 523.62878, "b": 764.1041870117188, "coord_origin": "TOPLEFT"}, "confidence": 0.951887309551239, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 102, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6262817382812, "t": 754.2442016601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9136953949928284, "cells": [{"id": 1, "text": "87", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "87"}]}}, {"page_no": 103, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.2040786743164, "t": 754.5180053710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170101284980774, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31021881103516, "t": 754.7303466796875, "r": 334.42142, "b": 763.929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9497126936912537, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.4045181274414, "t": 70.29792785644531, "r": 342.9945068359375, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9599847793579102, "cells": [{"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.77244567871094, "t": 102.67330932617188, "r": 547.2276, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9856138825416565, "cells": [{"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 135.88336181640625, "t": 291.65277099609375, "r": 292.6585693359375, "b": 300.9308776855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9376186728477478, "cells": [{"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.75350952148438, "t": 317.5677185058594, "r": 547.27454, "b": 399.9143371582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9871634244918823, "cells": [{"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.97303771972656, "t": 494.7318115234375, "r": 390.66049, "b": 504.98223876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8897727131843567, "cells": [{"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.6826171875, "t": 511.1615905761719, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}, "confidence": 0.9416220784187317, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.69775390625, "t": 523.0594482421875, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}, "confidence": 0.9410248398780823, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.60743713378906, "t": 535.3680419921875, "r": 430.46753000000007, "b": 545.6080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507178664207458, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.18472290039062, "t": 565.0562133789062, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}, "confidence": 0.9600307941436768, "cells": [{"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.2682647705078, "t": 591.3966064453125, "r": 536.16815, "b": 613.52142, "coord_origin": "TOPLEFT"}, "confidence": 0.97333163022995, "cells": [{"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 136.156005859375, "t": 625.2975463867188, "r": 331.8805847167969, "b": 634.7236938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.7500959634780884, "cells": [{"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.8, "t": 642.6497802734375, "r": 346.67709, "b": 652.3346557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.719869077205658, "cells": [{"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 141.819091796875, "t": 417.33447265625, "r": 536.52759, "b": 475.52097, "coord_origin": "TOPLEFT"}, "confidence": 0.9828086495399475, "cells": [{"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.86012268066406, "t": 175.29827880859375, "r": 497.2643127441406, "b": 289.20782470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9842056035995483, "cells": [{"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 103, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2040786743164, "t": 754.5180053710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170101284980774, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "88"}, {"label": "page_footer", "id": 1, "page_no": 103, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31021881103516, "t": 754.7303466796875, "r": 334.42142, "b": 763.929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9497126936912537, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 103, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4045181274414, "t": 70.29792785644531, "r": 342.9945068359375, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9599847793579102, "cells": [{"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.2 RCAC effects on data movement"}, {"label": "text", "id": 3, "page_no": 103, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77244567871094, "t": 102.67330932617188, "r": 547.2276, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9856138825416565, "cells": [{"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss."}, {"label": "caption", "id": 4, "page_no": 103, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.88336181640625, "t": 291.65277099609375, "r": 292.6585693359375, "b": 300.9308776855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9376186728477478, "cells": [{"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-3 RCAC and data movement"}, {"label": "text", "id": 5, "page_no": 103, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.75350952148438, "t": 317.5677185058594, "r": 547.27454, "b": 399.9143371582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9871634244918823, "cells": [{"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}]}, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization\u2019s object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC."}, {"label": "text", "id": 6, "page_no": 103, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.97303771972656, "t": 494.7318115234375, "r": 390.66049, "b": 504.98223876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8897727131843567, "cells": [{"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers in detail the following three examples:"}, {"label": "list_item", "id": 7, "page_no": 103, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6826171875, "t": 511.1615905761719, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}, "confidence": 0.9416220784187317, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the source table"}, {"label": "list_item", "id": 8, "page_no": 103, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.69775390625, "t": 523.0594482421875, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}, "confidence": 0.9410248398780823, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the target table"}, {"label": "list_item", "id": 9, "page_no": 103, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.60743713378906, "t": 535.3680419921875, "r": 430.46753000000007, "b": 545.6080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507178664207458, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on both source and target tables"}, {"label": "section_header", "id": 10, "page_no": 103, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.18472290039062, "t": 565.0562133789062, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}, "confidence": 0.9600307941436768, "cells": [{"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.1 Effects when RCAC is defined on the source table"}, {"label": "text", "id": 11, "page_no": 103, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.2682647705078, "t": 591.3966064453125, "r": 536.16815, "b": 613.52142, "coord_origin": "TOPLEFT"}, "confidence": 0.97333163022995, "cells": [{"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table."}, {"label": "caption", "id": 12, "page_no": 103, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.156005859375, "t": 625.2975463867188, "r": 331.8805847167969, "b": 634.7236938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.7500959634780884, "cells": [{"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 INSERT INTO TARGET statement"}, {"label": "text", "id": 13, "page_no": 103, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.8, "t": 642.6497802734375, "r": 346.67709, "b": 652.3346557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.719869077205658, "cells": [{"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 14, "page_no": 103, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.819091796875, "t": 417.33447265625, "r": 536.52759, "b": 475.52097, "coord_origin": "TOPLEFT"}, "confidence": 0.9828086495399475, "cells": [{"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}]}, "text": "Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data."}, {"label": "picture", "id": 15, "page_no": 103, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.86012268066406, "t": 175.29827880859375, "r": 497.2643127441406, "b": 289.20782470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9842056035995483, "cells": [{"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 103, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4045181274414, "t": 70.29792785644531, "r": 342.9945068359375, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9599847793579102, "cells": [{"id": 2, "text": "6.2", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.295662, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "RCAC effects on data movement", "bbox": {"l": 91.794777, "t": 71.22069999999997, "r": 342.67798, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.2 RCAC effects on data movement"}, {"label": "text", "id": 3, "page_no": 103, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.77244567871094, "t": 102.67330932617188, "r": 547.2276, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9856138825416565, "cells": [{"id": 4, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 546.47467, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "data access programming interface, SQL statement, or IBM i command. The effects of RCAC ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.2276, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "on data movement scenarios can be profound and possibly problematic. It is important to ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 531.81549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "understand these effects and make the appropriate adjustments to avoid incorrect results or ", "bbox": {"l": 136.8, "t": 139.48816, "r": 544.49969, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data loss.", "bbox": {"l": 136.8, "t": 151.48798, "r": 179.40094, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "As described earlier and shown in Figure 6-3, RCAC is applied pervasively regardless of the data access programming interface, SQL statement, or IBM i command. The effects of RCAC on data movement scenarios can be profound and possibly problematic. It is important to understand these effects and make the appropriate adjustments to avoid incorrect results or data loss."}, {"label": "caption", "id": 4, "page_no": 103, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.88336181640625, "t": 291.65277099609375, "r": 292.6585693359375, "b": 300.9308776855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9376186728477478, "cells": [{"id": 9, "text": "Figure 6-3 RCAC and data movement", "bbox": {"l": 136.8, "t": 292.33797999999996, "r": 291.97351, "b": 300.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-3 RCAC and data movement"}, {"label": "text", "id": 5, "page_no": 103, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.75350952148438, "t": 317.5677185058594, "r": 547.27454, "b": 399.9143371582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9871634244918823, "cells": [{"id": 10, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high ", "bbox": {"l": 136.8, "t": 318.34872, "r": 532.05664, "b": 327.56171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from ", "bbox": {"l": 136.8, "t": 330.34854, "r": 547.16595, "b": 339.56152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "one file or table to another one, must have permission to all the source rows without masking, ", "bbox": {"l": 136.79999, "t": 342.34836, "r": 547.27454, "b": 351.56134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and not be restricted from putting rows into the target. Allowing the data movement ", "bbox": {"l": 136.79999, "t": 354.34817999999996, "r": 504.48126, "b": 363.56116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "application or process to bypass the RCAC rules must be based on a clear and concise ", "bbox": {"l": 136.79999, "t": 366.34799, "r": 525.23895, "b": 375.56097000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "understanding of the organization\u2019s object security and data access policy. Proper design, ", "bbox": {"l": 136.79999, "t": 378.34781, "r": 535.10541, "b": 387.56079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "implementation, and testing are critical success factors when applying RCAC.", "bbox": {"l": 136.79999, "t": 390.3476299999999, "r": 478.83932, "b": 399.56061, "coord_origin": "TOPLEFT"}}]}, "text": "The \u201cuser\u201d that is running the data movement application or process, whether it be a high availability (HA) scenario, an extract, transform, load (ETL) scenario, or just copying data from one file or table to another one, must have permission to all the source rows without masking, and not be restricted from putting rows into the target. Allowing the data movement application or process to bypass the RCAC rules must be based on a clear and concise understanding of the organization\u2019s object security and data access policy. Proper design, implementation, and testing are critical success factors when applying RCAC."}, {"label": "text", "id": 6, "page_no": 103, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.97303771972656, "t": 494.7318115234375, "r": 390.66049, "b": 504.98223876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8897727131843567, "cells": [{"id": 17, "text": "This section covers in detail the following three examples:", "bbox": {"l": 136.79999, "t": 495.34793, "r": 390.66049, "b": 504.56091, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers in detail the following three examples:"}, {"label": "list_item", "id": 7, "page_no": 103, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6826171875, "t": 511.1615905761719, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}, "confidence": 0.9416220784187317, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 512.47711, "r": 141.77998, "b": 521.25189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 151.20015, "t": 512.32773, "r": 372.08902, "b": 521.54071, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the source table"}, {"label": "list_item", "id": 8, "page_no": 103, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.69775390625, "t": 523.0594482421875, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}, "confidence": 0.9410248398780823, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 524.47693, "r": 141.77998, "b": 533.25171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 151.20015, "t": 524.32755, "r": 367.63791, "b": 533.54053, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on the target table"}, {"label": "list_item", "id": 9, "page_no": 103, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.60743713378906, "t": 535.3680419921875, "r": 430.46753000000007, "b": 545.6080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9507178664207458, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 536.47675, "r": 141.77998, "b": 545.2515, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 151.20015, "t": 536.32735, "r": 430.46753000000007, "b": 545.54034, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Effects when RCAC is defined on both source and target tables"}, {"label": "section_header", "id": 10, "page_no": 103, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.18472290039062, "t": 565.0562133789062, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}, "confidence": 0.9600307941436768, "cells": [{"id": 24, "text": "6.2.1", "bbox": {"l": 64.800003, "t": 566.15462, "r": 93.897987, "b": 578.14262, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Effects when RCAC is defined on the source table", "bbox": {"l": 97.535255, "t": 566.15462, "r": 407.97049, "b": 578.14262, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.1 Effects when RCAC is defined on the source table"}, {"label": "text", "id": 11, "page_no": 103, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.2682647705078, "t": 591.3966064453125, "r": 536.16815, "b": 613.52142, "coord_origin": "TOPLEFT"}, "confidence": 0.97333163022995, "cells": [{"id": 26, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 592.30862, "r": 536.16815, "b": 601.52162, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "source table.", "bbox": {"l": 136.80002, "t": 604.30843, "r": 193.61981, "b": 613.52142, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 shows a simple example that illustrates the effect of RCAC as defined on the source table."}, {"label": "caption", "id": 12, "page_no": 103, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 136.156005859375, "t": 625.2975463867188, "r": 331.8805847167969, "b": 634.7236938476562, "coord_origin": "TOPLEFT"}, "confidence": 0.7500959634780884, "cells": [{"id": 28, "text": "Example 6-1 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 626.35789, "r": 330.92816, "b": 634.68291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-1 INSERT INTO TARGET statement"}, {"label": "text", "id": 13, "page_no": 103, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.8, "t": 642.6497802734375, "r": 346.67709, "b": 652.3346557617188, "coord_origin": "TOPLEFT"}, "confidence": 0.719869077205658, "cells": [{"id": 29, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 643.51813, "r": 346.67709, "b": 652.29288, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 14, "page_no": 103, "cluster": {"id": 14, "label": "text", "bbox": {"l": 141.819091796875, "t": 417.33447265625, "r": 536.52759, "b": 475.52097, "coord_origin": "TOPLEFT"}, "confidence": 0.9828086495399475, "cells": [{"id": 30, "text": "Important:", "bbox": {"l": 142.8, "t": 418.30872, "r": 192.41673, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " RCAC is applied to the table or physical file access. It is not applied to the ", "bbox": {"l": 192.41974, "t": 418.30872, "r": 523.17328, "b": 427.5217, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "journal receiver access. Any and all database transactions are represented in the journal ", "bbox": {"l": 142.80002, "t": 430.30853, "r": 536.52759, "b": 439.52151, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "regardless of RCAC row permissions and column masks. This makes it essential that", "bbox": {"l": 142.80002, "t": 442.30835, "r": 518.3606, "b": 451.52133, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "IBM i security is used to ensure that only authorized personnel have access to the ", "bbox": {"l": 142.80002, "t": 454.30816999999996, "r": 506.91161999999997, "b": 463.52115, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "journaled data.", "bbox": {"l": 142.80002, "t": 466.30798, "r": 209.20135, "b": 475.52097, "coord_origin": "TOPLEFT"}}]}, "text": "Important: RCAC is applied to the table or physical file access. It is not applied to the journal receiver access. Any and all database transactions are represented in the journal regardless of RCAC row permissions and column masks. This makes it essential that IBM i security is used to ensure that only authorized personnel have access to the journaled data."}, {"label": "picture", "id": 15, "page_no": 103, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.86012268066406, "t": 175.29827880859375, "r": 497.2643127441406, "b": 289.20782470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9842056035995483, "cells": [{"id": 36, "text": "Source", "bbox": {"l": 159.0775, "t": 225.34418000000005, "r": 204.37405, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Table", "bbox": {"l": 164.21069, "t": 245.01648, "r": 197.96193, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Target", "bbox": {"l": 434.70389000000006, "t": 225.34418000000005, "r": 474.6087, "b": 239.35186999999996, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Table", "bbox": {"l": 437.77770999999996, "t": 245.01648, "r": 471.52896, "b": 259.02417, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "RCAC", "bbox": {"l": 294.07819, "t": 220.35155999999995, "r": 334.01767, "b": 236.12005999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Permissions", "bbox": {"l": 291.86511, "t": 240.09747000000004, "r": 336.3851, "b": 247.98181, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "k", "bbox": {"l": 318.2381, "t": 251.16314999999997, "r": 322.43384, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "SELECT", "bbox": {"l": 236.414, "t": 236.34747000000004, "r": 263.0611, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INSERT", "bbox": {"l": 363.76089, "t": 236.34747000000004, "r": 390.84229, "b": 244.24103000000002, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Masks", "bbox": {"l": 302.31589, "t": 251.16314999999997, "r": 325.93185, "b": 259.04749000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 103, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2040786743164, "t": 754.5180053710938, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9170101284980774, "cells": [{"id": 0, "text": "88 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "88"}, {"label": "page_footer", "id": 1, "page_no": 103, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31021881103516, "t": 754.7303466796875, "r": 334.42142, "b": 763.929931640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9497126936912537, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 104, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.070556640625, "t": 754.9903564453125, "r": 523.62878, "b": 764.04638671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9512802362442017, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6676635742188, "t": 754.3189697265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9165906310081482, "cells": [{"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.09054565429688, "t": 70.63800048828125, "r": 547.29004, "b": 141.22569274902344, "coord_origin": "TOPLEFT"}, "confidence": 0.9863300919532776, "cells": [{"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.06468200683594, "t": 407.373046875, "r": 377.7413635253906, "b": 416.83404541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9107280969619751, "cells": [{"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.16183471679688, "t": 435.82305908203125, "r": 401.65768, "b": 449.0105895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9636408090591431, "cells": [{"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.28038024902344, "t": 462.0472412109375, "r": 536.16815, "b": 484.10153, "coord_origin": "TOPLEFT"}, "confidence": 0.9741792678833008, "cells": [{"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.6165771484375, "t": 495.8085632324219, "r": 331.8912658691406, "b": 505.41259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.6991708874702454, "cells": [{"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 513.3344116210938, "r": 346.67709, "b": 522.9288940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.6854607462882996, "cells": [{"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.99375915527344, "t": 155.52529907226562, "r": 491.57470703125, "b": 403.7139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9803420901298523, "cells": [{"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 104, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.070556640625, "t": 754.9903564453125, "r": 523.62878, "b": 764.04638671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9512802362442017, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 104, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6676635742188, "t": 754.3189697265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9165906310081482, "cells": [{"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "89"}, {"label": "text", "id": 2, "page_no": 104, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.09054565429688, "t": 70.63800048828125, "r": 547.29004, "b": 141.22569274902344, "coord_origin": "TOPLEFT"}, "confidence": 0.9863300919532776, "cells": [{"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, given a \u201csource\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4."}, {"label": "caption", "id": 3, "page_no": 104, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06468200683594, "t": 407.373046875, "r": 377.7413635253906, "b": 416.83404541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9107280969619751, "cells": [{"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-4 RCAC effects on data movement from SOURCE"}, {"label": "section_header", "id": 4, "page_no": 104, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.16183471679688, "t": 435.82305908203125, "r": 401.65768, "b": 449.0105895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9636408090591431, "cells": [{"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.2 Effects when RCAC is defined on the target table"}, {"label": "text", "id": 5, "page_no": 104, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.28038024902344, "t": 462.0472412109375, "r": 536.16815, "b": 484.10153, "coord_origin": "TOPLEFT"}, "confidence": 0.9741792678833008, "cells": [{"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table."}, {"label": "caption", "id": 6, "page_no": 104, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.6165771484375, "t": 495.8085632324219, "r": 331.8912658691406, "b": 505.41259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.6991708874702454, "cells": [{"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 104, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 513.3344116210938, "r": 346.67709, "b": 522.9288940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.6854607462882996, "cells": [{"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "picture", "id": 8, "page_no": 104, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.99375915527344, "t": 155.52529907226562, "r": 491.57470703125, "b": 403.7139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9803420901298523, "cells": [{"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 104, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.09054565429688, "t": 70.63800048828125, "r": 547.29004, "b": 141.22569274902344, "coord_origin": "TOPLEFT"}, "confidence": 0.9863300919532776, "cells": [{"id": 2, "text": "For example, given a \u201csource\u201d table with a row permission defined as ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 443.44409, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 443.39925999999997, "t": 71.65845000000002, "r": 513.35828, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a ", "bbox": {"l": 513.41907, "t": 71.50903000000005, "r": 544.08289, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 462.2626, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 462.23958999999996, "t": 83.65826000000004, "r": 492.23911000000004, "b": 92.48284999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement ", "bbox": {"l": 492.23911000000004, "t": 83.50885000000017, "r": 541.67755, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "produces a result set that has the RCAC rules applied. This reduced and modified result set is ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 547.29004, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 542.46948, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "columns. Instead of seven rows that are selected from the source, only three rows are ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 517.87115, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "returned and placed into the target, as shown in Figure 6-4.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 399.19583, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, given a \u201csource\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned and placed into the target, as shown in Figure 6-4."}, {"label": "caption", "id": 3, "page_no": 104, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.06468200683594, "t": 407.373046875, "r": 377.7413635253906, "b": 416.83404541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9107280969619751, "cells": [{"id": 12, "text": "Figure 6-4 RCAC effects on data movement from SOURCE", "bbox": {"l": 136.8, "t": 407.89798, "r": 377.21973, "b": 416.22299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-4 RCAC effects on data movement from SOURCE"}, {"label": "section_header", "id": 4, "page_no": 104, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.16183471679688, "t": 435.82305908203125, "r": 401.65768, "b": 449.0105895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9636408090591431, "cells": [{"id": 13, "text": "6.2.2", "bbox": {"l": 64.800003, "t": 436.73474000000004, "r": 93.918915, "b": 448.72272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Effects when RCAC is defined on the target table", "bbox": {"l": 97.5588, "t": 436.73474000000004, "r": 401.65768, "b": 448.72272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.2 Effects when RCAC is defined on the target table"}, {"label": "text", "id": 5, "page_no": 104, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.28038024902344, "t": 462.0472412109375, "r": 536.16815, "b": 484.10153, "coord_origin": "TOPLEFT"}, "confidence": 0.9741792678833008, "cells": [{"id": 15, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the ", "bbox": {"l": 136.8, "t": 462.88873, "r": 536.16815, "b": 472.10172, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "target table.", "bbox": {"l": 136.80002, "t": 474.88855, "r": 189.17468, "b": 484.10153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 shows a simple example that illustrates the effect of RCAC as defined on the target table."}, {"label": "caption", "id": 6, "page_no": 104, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.6165771484375, "t": 495.8085632324219, "r": 331.8912658691406, "b": 505.41259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.6991708874702454, "cells": [{"id": 17, "text": "Example 6-2 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 496.8779, "r": 330.92816, "b": 505.20291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-2 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 104, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 513.3344116210938, "r": 346.67709, "b": 522.9288940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.6854607462882996, "cells": [{"id": 18, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 514.03799, "r": 346.67709, "b": 522.81277, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "picture", "id": 8, "page_no": 104, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.99375915527344, "t": 155.52529907226562, "r": 491.57470703125, "b": 403.7139892578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9803420901298523, "cells": [{"id": 19, "text": "RCAC Effects on Data Movement", "bbox": {"l": 206.3309, "t": 162.62329, "r": 422.9632, "b": 176.68286, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "RCAC Rule Text", "bbox": {"l": 274.85211, "t": 205.28314, "r": 362.21695, "b": 217.60175000000004, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Source", "bbox": {"l": 154.65469, "t": 230.24994000000004, "r": 200.11852, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Table", "bbox": {"l": 159.80653, "t": 249.99414000000002, "r": 193.6824, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Target", "bbox": {"l": 431.29999, "t": 230.24994000000004, "r": 471.35211, "b": 244.30951000000005, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table", "bbox": {"l": 434.38485999999995, "t": 249.99414000000002, "r": 468.26074, "b": 264.05371, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 238.9718, "t": 233.84717, "r": 390.40936, "b": 242.63109999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Mask: AMOUNT", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 306.32385, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 308.66531, "t": 258.56964000000005, "r": 318.72308, "b": 267.81586000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "999 99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.76877, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Mask: AMOUNT ", "bbox": {"l": 238.9718, "t": 258.62097000000006, "r": 308.6116, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "999.99", "bbox": {"l": 321.09851, "t": 258.62097000000006, "r": 349.7634, "b": 267.40491, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "PKey", "bbox": {"l": 149.4408, "t": 310.95052999999996, "r": 161.93875, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Name", "bbox": {"l": 173.33221, "t": 310.95052999999996, "r": 188.56422, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Amount", "bbox": {"l": 199.92807, "t": 310.95052999999996, "r": 220.69669, "b": 316.23233, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "0001", "bbox": {"l": 150.24294, "t": 322.05707, "r": 162.72176, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CAIN", "bbox": {"l": 170.12364, "t": 322.05707, "r": 182.49139, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "10.00", "bbox": {"l": 207.42496, "t": 322.05707, "r": 221.45003999999997, "b": 327.33267000000006, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "0002", "bbox": {"l": 150.24294, "t": 333.16360000000003, "r": 162.72916, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "BEDOYA", "bbox": {"l": 170.1292, "t": 333.16360000000003, "r": 190.28262, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "25.50", "bbox": {"l": 207.42062, "t": 333.16360000000003, "r": 221.45497, "b": 338.43921, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "PKey", "bbox": {"l": 408.655, "t": 328.22742000000005, "r": 421.15295, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Name", "bbox": {"l": 432.54642, "t": 328.22742000000005, "r": 447.77841, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Amount", "bbox": {"l": 459.14224, "t": 328.22742000000005, "r": 479.91085999999996, "b": 333.5092200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "0002", "bbox": {"l": 409.45721, "t": 339.33392, "r": 421.92615, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "BEDOYA", "bbox": {"l": 429.3255899999999, "t": 339.33392, "r": 449.5209699999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "999 99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.66864, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "0003", "bbox": {"l": 150.2429, "t": 344.27022999999997, "r": 162.72173, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "CAIN", "bbox": {"l": 170.12361, "t": 344.27022999999997, "r": 182.49136, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "333.00", "bbox": {"l": 204.30893, "t": 344.27022999999997, "r": 221.45371999999998, "b": 349.54583999999994, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "0004", "bbox": {"l": 150.2429, "t": 355.37677, "r": 162.72913, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "BEDOYA", "bbox": {"l": 170.12917, "t": 355.37677, "r": 190.28259, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "75.25", "bbox": {"l": 207.42059, "t": 355.37677, "r": 221.45494, "b": 360.6523700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "0005", "bbox": {"l": 150.2429, "t": 366.48331, "r": 162.72173, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 170.12361, "t": 366.48331, "r": 182.49136, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "987.65", "bbox": {"l": 204.30893, "t": 366.48331, "r": 221.45371999999998, "b": 371.75891, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "0006", "bbox": {"l": 150.2429, "t": 377.58984, "r": 162.72665, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "BEDOYA", "bbox": {"l": 170.12732, "t": 377.58984, "r": 190.27829, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "123.45", "bbox": {"l": 204.30092, "t": 377.58984, "r": 221.45312, "b": 382.86545, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "999.99", "bbox": {"l": 463.53989, "t": 339.33392, "r": 480.6648599999999, "b": 344.60953, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 409.45721, "t": 350.44052, "r": 421.94098, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 350.44052, "r": 449.49254999999994, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "999.99", "bbox": {"l": 463.51517, "t": 350.44052, "r": 480.66736, "b": 355.71613, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0006", "bbox": {"l": 409.45721, "t": 361.54706, "r": 421.94098, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "BEDOYA", "bbox": {"l": 429.34164, "t": 361.54706, "r": 449.49254999999994, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "999.99", "bbox": {"l": 463.51517, "t": 361.54706, "r": 480.66736, "b": 366.82266, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "INSERT", "bbox": {"l": 358.05859, "t": 344.44214, "r": 382.19501, "b": 351.49335, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "RCAC", "bbox": {"l": 303.63651, "t": 343.49350000000004, "r": 325.92178, "b": 352.27744, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SELECT", "bbox": {"l": 244.12399, "t": 345.18253, "r": 267.87735, "b": 352.23373, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "0007", "bbox": {"l": 150.2429, "t": 388.69644, "r": 162.72418, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "CAIN", "bbox": {"l": 170.12546, "t": 388.69644, "r": 182.49568, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "1.00", "bbox": {"l": 210.54463, "t": 388.69644, "r": 221.45248, "b": 393.97205, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 235.08450000000002, "t": 383.49487, "r": 474.7415199999999, "b": 394.04608, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 104, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.070556640625, "t": 754.9903564453125, "r": 523.62878, "b": 764.04638671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9512802362442017, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 104, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6676635742188, "t": 754.3189697265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9165906310081482, "cells": [{"id": 1, "text": "89", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "89"}]}}, {"page_no": 105, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.0672378540039, "t": 754.3772583007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143837690353394, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31163787841797, "t": 754.7432861328125, "r": 334.42142, "b": 763.88671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527189135551453, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.84625244140625, "t": 70.61248779296875, "r": 547.26459, "b": 141.04803466796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9829095602035522, "cells": [{"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.212646484375, "t": 414.0885009765625, "r": 367.2479248046875, "b": 423.6403503417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9330379962921143, "cells": [{"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.19894409179688, "t": 442.4447326660156, "r": 490.12787, "b": 455.5812683105469, "coord_origin": "TOPLEFT"}, "confidence": 0.958083987236023, "cells": [{"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.13351440429688, "t": 468.7479248046875, "r": 541.63324, "b": 490.82153, "coord_origin": "TOPLEFT"}, "confidence": 0.971232533454895, "cells": [{"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.3226776123047, "t": 502.52581787109375, "r": 332.0595703125, "b": 512.0237426757812, "coord_origin": "TOPLEFT"}, "confidence": 0.7299772500991821, "cells": [{"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.995849609375, "t": 548.8137817382812, "r": 547.2467, "b": 618.80023, "coord_origin": "TOPLEFT"}, "confidence": 0.9855359196662903, "cells": [{"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 136.0791015625, "t": 155.57220458984375, "r": 499.302978515625, "b": 410.439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9825493097305298, "cells": [{"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 105, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0672378540039, "t": 754.3772583007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143837690353394, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "90"}, {"label": "page_footer", "id": 1, "page_no": 105, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31163787841797, "t": 754.7432861328125, "r": 334.42142, "b": 763.88671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527189135551453, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 105, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.84625244140625, "t": 70.61248779296875, "r": 547.26459, "b": 141.04803466796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9829095602035522, "cells": [{"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table\u2019s permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read."}, {"label": "caption", "id": 3, "page_no": 105, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.212646484375, "t": 414.0885009765625, "r": 367.2479248046875, "b": 423.6403503417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9330379962921143, "cells": [{"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-5 RCAC effects on data movement on TARGET"}, {"label": "section_header", "id": 4, "page_no": 105, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19894409179688, "t": 442.4447326660156, "r": 490.12787, "b": 455.5812683105469, "coord_origin": "TOPLEFT"}, "confidence": 0.958083987236023, "cells": [{"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.3 Effects when RCAC is defined on both source and target tables"}, {"label": "text", "id": 5, "page_no": 105, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13351440429688, "t": 468.7479248046875, "r": 541.63324, "b": 490.82153, "coord_origin": "TOPLEFT"}, "confidence": 0.971232533454895, "cells": [{"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables."}, {"label": "caption", "id": 6, "page_no": 105, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.3226776123047, "t": 502.52581787109375, "r": 332.0595703125, "b": 512.0237426757812, "coord_origin": "TOPLEFT"}, "confidence": 0.7299772500991821, "cells": [{"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 105, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 8, "page_no": 105, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.995849609375, "t": 548.8137817382812, "r": 547.2467, "b": 618.80023, "coord_origin": "TOPLEFT"}, "confidence": 0.9855359196662903, "cells": [{"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned."}, {"label": "picture", "id": 9, "page_no": 105, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.0791015625, "t": 155.57220458984375, "r": 499.302978515625, "b": 410.439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9825493097305298, "cells": [{"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 105, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.84625244140625, "t": 70.61248779296875, "r": 547.26459, "b": 141.04803466796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9829095602035522, "cells": [{"id": 2, "text": "Given a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 380.89371, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "NAME <> 'CAIN'", "bbox": {"l": 380.87976, "t": 71.65808000000015, "r": 450.7790499999999, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " and a column mask ", "bbox": {"l": 450.83978, "t": 71.50867000000005, "r": 543.01062, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 400.68625, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT", "bbox": {"l": 400.62048, "t": 83.65790000000004, "r": 430.56023999999996, "b": 92.48248000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " statement produces a ", "bbox": {"l": 430.56023999999996, "t": 83.50847999999996, "r": 532.24695, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "result set that represents all the rows and columns. The seven row result set is inserted into ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 543.31641, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 523.92529, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-5. The source rows where ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 292.3653, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "NAME = 'CAIN'", "bbox": {"l": 292.32043, "t": 119.65734999999995, "r": 355.79947, "b": 128.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": " do not satisfy the target table\u2019s permission, ", "bbox": {"l": 355.80051, "t": 119.50792999999999, "r": 547.26459, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and therefore cannot be inserted. In other words, you are inserting data that you cannot read.", "bbox": {"l": 136.80002, "t": 131.50775, "r": 547.2417, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that represents all the rows and columns. The seven row result set is inserted into the \u201ctarget\u201d, and the RCAC row permission causes an error to be returned, as shown in Figure 6-5. The source rows where NAME = 'CAIN' do not satisfy the target table\u2019s permission, and therefore cannot be inserted. In other words, you are inserting data that you cannot read."}, {"label": "caption", "id": 3, "page_no": 105, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.212646484375, "t": 414.0885009765625, "r": 367.2479248046875, "b": 423.6403503417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9330379962921143, "cells": [{"id": 14, "text": "Figure 6-5 RCAC effects on data movement on TARGET", "bbox": {"l": 136.8, "t": 414.61798, "r": 366.09122, "b": 422.94299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-5 RCAC effects on data movement on TARGET"}, {"label": "section_header", "id": 4, "page_no": 105, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19894409179688, "t": 442.4447326660156, "r": 490.12787, "b": 455.5812683105469, "coord_origin": "TOPLEFT"}, "confidence": 0.958083987236023, "cells": [{"id": 15, "text": "6.2.3", "bbox": {"l": 64.800003, "t": 443.45474, "r": 93.849205, "b": 455.44272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Effects when RCAC is defined on both source and target tables", "bbox": {"l": 97.480339, "t": 443.45474, "r": 490.12787, "b": 455.44272, "coord_origin": "TOPLEFT"}}]}, "text": "6.2.3 Effects when RCAC is defined on both source and target tables"}, {"label": "text", "id": 5, "page_no": 105, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13351440429688, "t": 468.7479248046875, "r": 541.63324, "b": 490.82153, "coord_origin": "TOPLEFT"}, "confidence": 0.971232533454895, "cells": [{"id": 17, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both ", "bbox": {"l": 136.8, "t": 469.60873, "r": 541.63324, "b": 478.82172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the source and the target tables.", "bbox": {"l": 136.80002, "t": 481.60855, "r": 279.84653, "b": 490.82153, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 shows a simple example that illustrates the effect of RCAC as defined on both the source and the target tables."}, {"label": "caption", "id": 6, "page_no": 105, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.3226776123047, "t": 502.52581787109375, "r": 332.0595703125, "b": 512.0237426757812, "coord_origin": "TOPLEFT"}, "confidence": 0.7299772500991821, "cells": [{"id": 19, "text": "Example 6-3 INSERT INTO TARGET statement", "bbox": {"l": 136.8, "t": 503.5979, "r": 330.92816, "b": 511.92291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-3 INSERT INTO TARGET statement"}, {"label": "text", "id": 7, "page_no": 105, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 20, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 136.8, "t": 520.758, "r": 346.67709, "b": 529.53278, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);"}, {"label": "text", "id": 8, "page_no": 105, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.995849609375, "t": 548.8137817382812, "r": 547.2467, "b": 618.80023, "coord_origin": "TOPLEFT"}, "confidence": 0.9855359196662903, "cells": [{"id": 21, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as ", "bbox": {"l": 136.8, "t": 549.5882300000001, "r": 472.36234, "b": 558.8012200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NAME <> 'CAIN'", "bbox": {"l": 472.31952, "t": 549.73763, "r": 542.2785, "b": 558.51237, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and a column mask that is defined to project the value 999.99 for AMOUNT, the ", "bbox": {"l": 136.79996, "t": 561.58803, "r": 490.08017000000007, "b": 570.80103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "SELECT", "bbox": {"l": 490.02042, "t": 561.73743, "r": 520.0199, "b": 570.56198, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "statement produces a result set that has the RCAC rules applied. This reduced and modified ", "bbox": {"l": 136.80099, "t": 573.5878299999999, "r": 547.2467, "b": 582.80083, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all ", "bbox": {"l": 136.80099, "t": 585.58763, "r": 539.85034, "b": 594.80063, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "rows and all columns. Instead of seven rows that are selected from the source, only three ", "bbox": {"l": 136.80099, "t": 597.58743, "r": 532.92114, "b": 606.80043, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "rows are returned.", "bbox": {"l": 136.80099, "t": 609.58723, "r": 218.03972000000002, "b": 618.80023, "coord_origin": "TOPLEFT"}}]}, "text": "Given a \u201csource\u201d table and a \u201ctarget\u201d table with a row permission defined as NAME <> 'CAIN' and a column mask that is defined to project the value 999.99 for AMOUNT, the SELECT statement produces a result set that has the RCAC rules applied. This reduced and modified result set is inserted into the \u201ctarget\u201d table even though the query is defined as returning all rows and all columns. Instead of seven rows that are selected from the source, only three rows are returned."}, {"label": "picture", "id": 9, "page_no": 105, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.0791015625, "t": 155.57220458984375, "r": 499.302978515625, "b": 410.439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9825493097305298, "cells": [{"id": 29, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.3886, "t": 165.44983000000002, "r": 424.4899, "b": 179.47484999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC Rule Text", "bbox": {"l": 276.74149, "t": 208.00494000000003, "r": 363.89221, "b": 220.29327, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Source", "bbox": {"l": 156.83929, "t": 232.91034000000002, "r": 202.1917, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Table", "bbox": {"l": 161.97852, "t": 252.60601999999994, "r": 195.77136, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Target", "bbox": {"l": 432.80521, "t": 232.91034000000002, "r": 472.75925, "b": 246.93535999999995, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Table", "bbox": {"l": 435.88251, "t": 252.60601999999994, "r": 469.67538, "b": 266.63104, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 240.9493, "t": 236.49872000000005, "r": 392.01541, "b": 245.26104999999995, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Mask: AMOUNT", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 308.13611, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 310.47171, "t": 261.1604, "r": 320.50479, "b": 270.38385000000005, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "999 99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.47424, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Mask: AMOUNT ", "bbox": {"l": 240.9493, "t": 261.21160999999995, "r": 310.41809, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "999.99", "bbox": {"l": 322.8743, "t": 261.21160999999995, "r": 351.46893, "b": 269.97393999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PKey", "bbox": {"l": 151.6382, "t": 313.41269000000005, "r": 164.10535, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Name", "bbox": {"l": 175.47073, "t": 313.41269000000005, "r": 190.66521, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Amount", "bbox": {"l": 202.00105, "t": 313.41269000000005, "r": 222.71851000000004, "b": 318.68152, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0001", "bbox": {"l": 152.43835, "t": 324.49203, "r": 164.88643, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "CAIN", "bbox": {"l": 172.27008, "t": 324.49203, "r": 184.60736, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "10.00", "bbox": {"l": 209.47951, "t": 324.49203, "r": 223.47005, "b": 329.75473, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0002", "bbox": {"l": 152.43835, "t": 335.57138, "r": 164.89381, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "BEDOYA", "bbox": {"l": 172.27562, "t": 335.57138, "r": 192.37941, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "25.50", "bbox": {"l": 209.4752, "t": 335.57138, "r": 223.47498, "b": 340.83408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "PKey", "bbox": {"l": 410.21579, "t": 330.64709, "r": 422.68292, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "Name", "bbox": {"l": 434.04831, "t": 330.64709, "r": 449.24280000000005, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Amount", "bbox": {"l": 460.57863999999995, "t": 330.64709, "r": 481.29610999999994, "b": 335.91592, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ERR", "bbox": {"l": 435.85199000000006, "t": 336.77774, "r": 450.38702, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "OR", "bbox": {"l": 450.29745, "t": 336.77774, "r": 461.42471000000006, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": ":", "bbox": {"l": 461.42661000000004, "t": 336.77774, "r": 463.9009699999999, "b": 344.67169, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "0003", "bbox": {"l": 152.43829, "t": 346.65057, "r": 164.88637, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 172.27002, "t": 346.65057, "r": 184.6073, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "333.00", "bbox": {"l": 206.37112, "t": 346.65057, "r": 223.47367999999997, "b": 351.91327, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "0004", "bbox": {"l": 152.43829, "t": 357.72992, "r": 164.89375, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "BEDOYA", "bbox": {"l": 172.27556, "t": 357.72992, "r": 192.37935, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "75.25", "bbox": {"l": 209.47514, "t": 357.72992, "r": 223.47491, "b": 362.99261000000007, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "0005", "bbox": {"l": 152.43829, "t": 368.80927, "r": 164.88637, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "CAIN", "bbox": {"l": 172.27002, "t": 368.80927, "r": 184.6073, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "987.65", "bbox": {"l": 206.37112, "t": 368.80927, "r": 223.47367999999997, "b": 374.07196000000005, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "0006", "bbox": {"l": 152.43829, "t": 379.88861, "r": 164.8913, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "BEDOYA", "bbox": {"l": 172.27373, "t": 379.88861, "r": 192.37505, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "123.45", "bbox": {"l": 206.36313, "t": 379.88861, "r": 223.47307, "b": 385.15131, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "INSERT", "bbox": {"l": 359.74359, "t": 346.82211, "r": 383.82053, "b": 353.85596, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "RCAC", "bbox": {"l": 305.4552, "t": 345.87585, "r": 327.68582, "b": 354.63812, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "SELECT", "bbox": {"l": 246.0889, "t": 347.5607, "r": 269.78372, "b": 354.59454, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "INSER", "bbox": {"l": 415.60159, "t": 347.85703, "r": 437.65851000000004, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "T or ", "bbox": {"l": 437.56802, "t": 347.85703, "r": 454.15735, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "UPD", "bbox": {"l": 454.28015, "t": 347.85703, "r": 470.66449000000006, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ATE", "bbox": {"l": 470.55276, "t": 347.85703, "r": 484.20978, "b": 355.75098, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "does", "bbox": {"l": 420.52539, "t": 358.93628, "r": 434.21057, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "not", "bbox": {"l": 445.9407, "t": 358.93628, "r": 453.2720299999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "sa", "bbox": {"l": 453.2720299999999, "t": 358.93628, "r": 463.5359199999999, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "tisfy", "bbox": {"l": 463.4556, "t": 358.93628, "r": 479.23618000000005, "b": 366.8302299999999, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "row permissions.", "bbox": {"l": 418.00211, "t": 370.01553, "r": 481.72345, "b": 377.90948, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "0007", "bbox": {"l": 152.43829, "t": 390.96759, "r": 164.88882, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 172.27187, "t": 390.96759, "r": 184.6116, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "1.00", "bbox": {"l": 212.59146, "t": 390.96759, "r": 223.47244, "b": 396.23029, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.07159, "t": 385.77884, "r": 476.14007999999995, "b": 396.30414, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 105, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0672378540039, "t": 754.3772583007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9143837690353394, "cells": [{"id": 0, "text": "90 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "90"}, {"label": "page_footer", "id": 1, "page_no": 105, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31163787841797, "t": 754.7432861328125, "r": 334.42142, "b": 763.88671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9527189135551453, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 106, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.1033630371094, "t": 754.9728393554688, "r": 523.62878, "b": 764.0504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9539369940757751, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6055297851562, "t": 754.2470092773438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9151113629341125, "cells": [{"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.59042358398438, "t": 70.5692138671875, "r": 547.25018, "b": 116.77182006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9812178611755371, "cells": [{"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.80810546875, "t": 387.26177978515625, "r": 425.63427734375, "b": 396.8255920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9390740990638733, "cells": [{"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.44702911376953, "t": 424.1014404296875, "r": 263.02802, "b": 440.4540100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9687318205833435, "cells": [{"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9691619873047, "t": 456.65673828125, "r": 546.7406, "b": 490.82232666015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842352867126465, "cells": [{"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.0598907470703, "t": 131.39212036132812, "r": 501.41558837890625, "b": 384.4598083496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9831688404083252, "cells": [{"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 142.4822540283203, "t": 508.5616760253906, "r": 541.38123, "b": 530.8720092773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9712533354759216, "cells": [{"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 106, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.1033630371094, "t": 754.9728393554688, "r": 523.62878, "b": 764.0504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9539369940757751, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 106, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6055297851562, "t": 754.2470092773438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9151113629341125, "cells": [{"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "91"}, {"label": "text", "id": 2, "page_no": 106, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.59042358398438, "t": 70.5692138671875, "r": 547.25018, "b": 116.77182006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9812178611755371, "cells": [{"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Although the source rows where NAME <> 'CAIN' do satisfy the target table\u2019s permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data."}, {"label": "caption", "id": 3, "page_no": 106, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.80810546875, "t": 387.26177978515625, "r": 425.63427734375, "b": 396.8255920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9390740990638733, "cells": [{"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET"}, {"label": "section_header", "id": 4, "page_no": 106, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44702911376953, "t": 424.1014404296875, "r": 263.02802, "b": 440.4540100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9687318205833435, "cells": [{"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}]}, "text": "6.3 RCAC effects on joins"}, {"label": "text", "id": 5, "page_no": 106, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9691619873047, "t": 456.65673828125, "r": 546.7406, "b": 490.82232666015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842352867126465, "cells": [{"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}]}, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled."}, {"label": "picture", "id": 6, "page_no": 106, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.0598907470703, "t": 131.39212036132812, "r": 501.41558837890625, "b": 384.4598083496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9831688404083252, "cells": [{"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 7, "page_no": 106, "cluster": {"id": 7, "label": "text", "bbox": {"l": 142.4822540283203, "t": 508.5616760253906, "r": 541.38123, "b": 530.8720092773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9712533354759216, "cells": [{"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation."}], "body": [{"label": "text", "id": 2, "page_no": 106, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.59042358398438, "t": 70.5692138671875, "r": 547.25018, "b": 116.77182006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9812178611755371, "cells": [{"id": 2, "text": "Although the source rows where", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 278.92981, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": " NAME <> 'CAIN'", "bbox": {"l": 278.99951, "t": 71.65845000000002, "r": 353.33795, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " do satisfy the target table\u2019s permission, the ", "bbox": {"l": 353.33997, "t": 71.50903000000005, "r": 547.24823, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 547.25018, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is ", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 531.00842, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protecting against an overt attempt to insert masked data.", "bbox": {"l": 136.79961, "t": 107.50847999999996, "r": 391.95767, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Although the source rows where NAME <> 'CAIN' do satisfy the target table\u2019s permission, the AMOUNT column value of 999.99 represents masked data and therefore cannot be inserted. An error is returned indicating the failure, as shown in Figure 6-6. In this scenario, DB2 is protecting against an overt attempt to insert masked data."}, {"label": "caption", "id": 3, "page_no": 106, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.80810546875, "t": 387.26177978515625, "r": 425.63427734375, "b": 396.8255920410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9390740990638733, "cells": [{"id": 8, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET", "bbox": {"l": 136.8, "t": 388.45801, "r": 424.51382, "b": 396.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-6 RCAC effects on data movement on SOURCE and TARGET"}, {"label": "section_header", "id": 4, "page_no": 106, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.44702911376953, "t": 424.1014404296875, "r": 263.02802, "b": 440.4540100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9687318205833435, "cells": [{"id": 9, "text": "6.3", "bbox": {"l": 64.800003, "t": 425.10071, "r": 87.442535, "b": 439.86371, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "RCAC effects on joins", "bbox": {"l": 91.971039, "t": 425.10071, "r": 263.02802, "b": 439.86371, "coord_origin": "TOPLEFT"}}]}, "text": "6.3 RCAC effects on joins"}, {"label": "text", "id": 5, "page_no": 106, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9691619873047, "t": 456.65673828125, "r": 546.7406, "b": 490.82232666015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842352867126465, "cells": [{"id": 11, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical ", "bbox": {"l": 136.8, "t": 457.42870999999997, "r": 546.7406, "b": 466.64169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "subset of rows that a user or group of users is permitted to access and use. This subset ", "bbox": {"l": 136.8, "t": 469.42853, "r": 526.64325, "b": 478.64151, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "becomes the new basis of any query against the table that has RCAC enabled. ", "bbox": {"l": 136.79901, "t": 481.42834, "r": 487.7705700000001, "b": 490.64133, "coord_origin": "TOPLEFT"}}]}, "text": "As mentioned previously, a fundamental concept of row permission is that it defines a logical subset of rows that a user or group of users is permitted to access and use. This subset becomes the new basis of any query against the table that has RCAC enabled."}, {"label": "picture", "id": 6, "page_no": 106, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.0598907470703, "t": 131.39212036132812, "r": 501.41558837890625, "b": 384.4598083496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9831688404083252, "cells": [{"id": 14, "text": "RCAC Effects on Data Movement", "bbox": {"l": 208.8893, "t": 142.60357999999997, "r": 425.65588, "b": 156.67174999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "RCAC Rule Text", "bbox": {"l": 277.45261, "t": 185.28967, "r": 364.87134, "b": 197.61577999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Source", "bbox": {"l": 157.1814, "t": 210.27166999999997, "r": 202.67342, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Table", "bbox": {"l": 162.33644, "t": 230.02801999999997, "r": 196.23332, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Target", "bbox": {"l": 433.9967, "t": 210.27166999999997, "r": 474.07373, "b": 224.33983999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Table", "bbox": {"l": 437.0834699999999, "t": 230.02801999999997, "r": 470.98035, "b": 244.09618999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Permission: WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 241.55029, "t": 213.87108999999998, "r": 393.08215, "b": 222.66039999999998, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Mask: AMOUNT", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 308.94427, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 311.28659, "t": 238.6087, "r": 321.35062, "b": 247.86059999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "999 99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4155, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Mask: AMOUNT ", "bbox": {"l": 241.55029, "t": 238.66010000000006, "r": 311.23285, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "999.99", "bbox": {"l": 323.72739, "t": 238.66010000000006, "r": 352.4101, "b": 247.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "PKey", "bbox": {"l": 151.9642, "t": 291.02185000000003, "r": 164.46983, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Name", "bbox": {"l": 175.87032, "t": 291.02185000000003, "r": 191.11169, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Amount", "bbox": {"l": 202.48253, "t": 291.02185000000003, "r": 223.26395, "b": 296.30688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "0001", "bbox": {"l": 152.76683, "t": 302.13522, "r": 165.25333, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CAIN", "bbox": {"l": 172.65977, "t": 302.13522, "r": 185.03514, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "10.00", "bbox": {"l": 209.98405, "t": 302.13522, "r": 224.01779000000002, "b": 307.41406, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "0002", "bbox": {"l": 152.76683, "t": 313.2486, "r": 165.26074, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "BEDOYA", "bbox": {"l": 172.66534, "t": 313.2486, "r": 192.83121, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "25.50", "bbox": {"l": 209.97977, "t": 313.2486, "r": 224.02275, "b": 318.52744, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "PKey", "bbox": {"l": 411.3378, "t": 308.30936, "r": 423.84344, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Name", "bbox": {"l": 435.24393, "t": 308.30936, "r": 450.48532, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Amount", "bbox": {"l": 461.8561700000001, "t": 308.30936, "r": 482.63754, "b": 313.59439, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ERR", "bbox": {"l": 437.05289000000005, "t": 314.45877, "r": 451.63263, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "OR", "bbox": {"l": 451.54279, "t": 314.45877, "r": 462.70425, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": ":", "bbox": {"l": 462.70621, "t": 314.45877, "r": 465.18816999999996, "b": 322.37701, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "0003", "bbox": {"l": 152.76691, "t": 324.36197000000004, "r": 165.2534, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 172.65985, "t": 324.36197000000004, "r": 185.03522, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "333.00", "bbox": {"l": 206.86621, "t": 324.36197000000004, "r": 224.02156, "b": 329.64081, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "0004", "bbox": {"l": 152.76691, "t": 335.47534, "r": 165.26082, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BEDOYA", "bbox": {"l": 172.66542, "t": 335.47534, "r": 192.83128, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "75.25", "bbox": {"l": 209.97984, "t": 335.47534, "r": 224.02283, "b": 340.75418, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "0005", "bbox": {"l": 152.76691, "t": 346.58871000000005, "r": 165.2534, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CAIN", "bbox": {"l": 172.65985, "t": 346.58871000000005, "r": 185.03522, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "987.65", "bbox": {"l": 206.86621, "t": 346.58871000000005, "r": 224.02156, "b": 351.86755, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "0006", "bbox": {"l": 152.76691, "t": 357.70208999999994, "r": 165.25835, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "BEDOYA", "bbox": {"l": 172.66356, "t": 357.70208999999994, "r": 192.82693, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123.45", "bbox": {"l": 206.8582, "t": 357.70208999999994, "r": 224.02097, "b": 362.98093, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "INSERT", "bbox": {"l": 360.71021, "t": 324.53406000000007, "r": 384.86127, "b": 331.58953999999994, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "RCAC", "bbox": {"l": 306.2547, "t": 323.58484, "r": 328.55386, "b": 332.37415, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "SELECT", "bbox": {"l": 246.7057, "t": 325.27496, "r": 270.47351, "b": 332.33044, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Ro", "bbox": {"l": 422.82159, "t": 325.57208, "r": 432.36795, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "w or c", "bbox": {"l": 432.5124200000001, "t": 325.57208, "r": 455.17249, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "o", "bbox": {"l": 455.26602, "t": 325.57208, "r": 459.96512, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "lumn ", "bbox": {"l": 460.14017, "t": 325.57208, "r": 481.52313, "b": 333.49033, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "access", "bbox": {"l": 413.25211, "t": 336.68539, "r": 433.96523999999994, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "c", "bbox": {"l": 418.90115, "t": 336.68539, "r": 443.38031, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ont", "bbox": {"l": 443.29419000000007, "t": 336.68539, "r": 456.05045, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "r", "bbox": {"l": 456.03748, "t": 336.68539, "r": 459.26775999999995, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ol is", "bbox": {"l": 459.12793, "t": 336.68539, "r": 473.1619299999999, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "not", "bbox": {"l": 482.9226100000001, "t": 336.68539, "r": 488.00629, "b": 344.60364, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "valid.", "bbox": {"l": 441.12802000000005, "t": 347.79871, "r": 461.11813, "b": 355.71695, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "0007", "bbox": {"l": 152.76691, "t": 368.81546, "r": 165.25587, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "CAIN", "bbox": {"l": 172.66171, "t": 368.81546, "r": 185.03955, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "1.00", "bbox": {"l": 213.10577, "t": 368.81546, "r": 224.02036, "b": 374.0943, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "INSERT INTO TARGET (SELECT * FROM SOURCE);", "bbox": {"l": 237.6606, "t": 363.61063, "r": 477.46509, "b": 374.1683300000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 7, "page_no": 106, "cluster": {"id": 7, "label": "text", "bbox": {"l": 142.4822540283203, "t": 508.5616760253906, "r": 541.38123, "b": 530.8720092773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9712533354759216, "cells": [{"id": 71, "text": "Note:", "bbox": {"l": 142.8, "t": 509.44864, "r": 168.33246, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": " Thinking of the row permission as defining a virtual set of rows that can be operated ", "bbox": {"l": 168.36035, "t": 509.44864, "r": 541.38123, "b": 518.6616200000001, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "on is the secret to understanding the effect of RCAC on any join operation.", "bbox": {"l": 142.79997, "t": 521.4484600000001, "r": 471.47884999999997, "b": 530.6614400000001, "coord_origin": "TOPLEFT"}}]}, "text": "Note: Thinking of the row permission as defining a virtual set of rows that can be operated on is the secret to understanding the effect of RCAC on any join operation."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 106, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.1033630371094, "t": 754.9728393554688, "r": 523.62878, "b": 764.0504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9539369940757751, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 106, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6055297851562, "t": 754.2470092773438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9151113629341125, "cells": [{"id": 1, "text": "91", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "91"}]}}, {"page_no": 107, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.16549682617188, "t": 754.3916625976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147290587425232, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.34784698486328, "t": 754.6744995117188, "r": 334.42142, "b": 763.9275512695312, "coord_origin": "TOPLEFT"}, "confidence": 0.951833963394165, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.05355834960938, "t": 70.50668334960938, "r": 537.42993, "b": 92.82316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9440383911132812, "cells": [{"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.143310546875, "t": 319.539306640625, "r": 334.12286376953125, "b": 328.9681701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9443629384040833, "cells": [{"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.19314575195312, "t": 348.505126953125, "r": 166.59303, "b": 361.54974365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9613147974014282, "cells": [{"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.13674926757812, "t": 374.5938415527344, "r": 547.21875, "b": 397.1634216308594, "coord_origin": "TOPLEFT"}, "confidence": 0.965448260307312, "cells": [{"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.0211181640625, "t": 624.7966918945312, "r": 327.359130859375, "b": 634.3587036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9452580213546753, "cells": [{"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.11366271972656, "t": 107.33206176757812, "r": 502.8105773925781, "b": 316.0246887207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9822977781295776, "cells": [{"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.9275665283203, "t": 410.61224365234375, "r": 464.8796691894531, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9838927984237671, "cells": [{"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 107, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16549682617188, "t": 754.3916625976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147290587425232, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "92"}, {"label": "page_footer", "id": 1, "page_no": 107, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34784698486328, "t": 754.6744995117188, "r": 334.42142, "b": 763.9275512695312, "coord_origin": "TOPLEFT"}, "confidence": 0.951833963394165, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 107, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.05355834960938, "t": 70.50668334960938, "r": 537.42993, "b": 92.82316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9440383911132812, "cells": [{"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see."}, {"label": "caption", "id": 3, "page_no": 107, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.143310546875, "t": 319.539306640625, "r": 334.12286376953125, "b": 328.9681701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9443629384040833, "cells": [{"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-7 Set A and set B with row permissions"}, {"label": "section_header", "id": 4, "page_no": 107, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19314575195312, "t": 348.505126953125, "r": 166.59303, "b": 361.54974365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9613147974014282, "cells": [{"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.1 Inner joins"}, {"label": "text", "id": 5, "page_no": 107, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13674926757812, "t": 374.5938415527344, "r": 547.21875, "b": 397.1634216308594, "coord_origin": "TOPLEFT"}, "confidence": 0.965448260307312, "cells": [{"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8."}, {"label": "caption", "id": 6, "page_no": 107, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.0211181640625, "t": 624.7966918945312, "r": 327.359130859375, "b": 634.3587036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9452580213546753, "cells": [{"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-8 Inner join without RCAC permission"}, {"label": "picture", "id": 7, "page_no": 107, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.11366271972656, "t": 107.33206176757812, "r": 502.8105773925781, "b": 316.0246887207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9822977781295776, "cells": [{"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 107, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.9275665283203, "t": 410.61224365234375, "r": 464.8796691894531, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9838927984237671, "cells": [{"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 107, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.05355834960938, "t": 70.50668334960938, "r": 537.42993, "b": 92.82316589355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9440383911132812, "cells": [{"id": 2, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.42993, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "row permission that subsets the rows that a user can see.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 391.50604, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "As shown in Figure 6-7, there are two different sets, set A and set B. However, set B has a row permission that subsets the rows that a user can see."}, {"label": "caption", "id": 3, "page_no": 107, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.143310546875, "t": 319.539306640625, "r": 334.12286376953125, "b": 328.9681701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9443629384040833, "cells": [{"id": 4, "text": "Figure 6-7 Set A and set B with row permissions", "bbox": {"l": 136.8, "t": 320.298, "r": 333.67859, "b": 328.62302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-7 Set A and set B with row permissions"}, {"label": "section_header", "id": 4, "page_no": 107, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.19314575195312, "t": 348.505126953125, "r": 166.59303, "b": 361.54974365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9613147974014282, "cells": [{"id": 5, "text": "6.3.1", "bbox": {"l": 64.800003, "t": 349.13474, "r": 94.749428, "b": 361.12271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Inner joins", "bbox": {"l": 98.493103, "t": 349.13474, "r": 166.59303, "b": 361.12271, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.1 Inner joins"}, {"label": "text", "id": 5, "page_no": 107, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.13674926757812, "t": 374.5938415527344, "r": 547.21875, "b": 397.1634216308594, "coord_origin": "TOPLEFT"}, "confidence": 0.965448260307312, "cells": [{"id": 7, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join ", "bbox": {"l": 136.8, "t": 375.28873, "r": 547.21875, "b": 384.50171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query, it must appear in both sets, as shown in Figure 6-8.", "bbox": {"l": 136.8, "t": 387.28853999999995, "r": 392.98315, "b": 396.50152999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Inner join defines the intersection of two data sets. For a row to be returned from the inner join query, it must appear in both sets, as shown in Figure 6-8."}, {"label": "caption", "id": 6, "page_no": 107, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.0211181640625, "t": 624.7966918945312, "r": 327.359130859375, "b": 634.3587036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9452580213546753, "cells": [{"id": 9, "text": "Figure 6-8", "bbox": {"l": 136.8, "t": 625.63789, "r": 177.73784, "b": 633.96291, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Inner join without RCAC permission", "bbox": {"l": 185.23007, "t": 625.63789, "r": 327.00775, "b": 633.96291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-8 Inner join without RCAC permission"}, {"label": "picture", "id": 7, "page_no": 107, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.11366271972656, "t": 107.33206176757812, "r": 502.8105773925781, "b": 316.0246887207031, "coord_origin": "TOPLEFT"}, "confidence": 0.9822977781295776, "cells": [{"id": 11, "text": "Permitted", "bbox": {"l": 354.46219, "t": 172.28998, "r": 430.1011700000001, "b": 188.77050999999994, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "by", "bbox": {"l": 383.15869, "t": 194.41150000000005, "r": 401.3905, "b": 210.89202999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "RCAC", "bbox": {"l": 372.22079, "t": 216.53308000000004, "r": 412.28287, "b": 233.01360999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 210.7952, "t": 292.03516, "r": 250.37243999999998, "b": 307.81519, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 386.354, "t": 292.03516, "r": 425.10168, "b": 307.81519, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 107, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.9275665283203, "t": 410.61224365234375, "r": 464.8796691894531, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9838927984237671, "cells": [{"id": 16, "text": "Result of Intersection", "bbox": {"l": 171.8576, "t": 505.00116, "r": 277.11508, "b": 515.18533, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Set A", "bbox": {"l": 232.8615, "t": 607.4495400000001, "r": 271.10748, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Set B", "bbox": {"l": 343.29138, "t": 607.4495400000001, "r": 380.77533, "b": 622.7257999999999, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 107, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16549682617188, "t": 754.3916625976562, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9147290587425232, "cells": [{"id": 0, "text": "92 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "92"}, {"label": "page_footer", "id": 1, "page_no": 107, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34784698486328, "t": 754.6744995117188, "r": 334.42142, "b": 763.9275512695312, "coord_origin": "TOPLEFT"}, "confidence": 0.951833963394165, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 108, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.04339599609375, "t": 754.8524169921875, "r": 523.62878, "b": 764.1233520507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9509537220001221, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5010375976562, "t": 754.3138427734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9208362102508545, "cells": [{"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92884826660156, "t": 70.47429656982422, "r": 547.32196, "b": 116.84603881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9856703877449036, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.20010375976562, "t": 423.43145751953125, "r": 314.9713439941406, "b": 432.9030456542969, "coord_origin": "TOPLEFT"}, "confidence": 0.943959653377533, "cells": [{"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 142.26942443847656, "t": 134.60061645507812, "r": 537.63239, "b": 169.2606201171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9708845019340515, "cells": [{"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.01123046875, "t": 187.63684, "r": 470.03668212890625, "b": 420.47430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9833499193191528, "cells": [{"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 108, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.04339599609375, "t": 754.8524169921875, "r": 523.62878, "b": 764.1233520507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9509537220001221, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 108, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5010375976562, "t": 754.3138427734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9208362102508545, "cells": [{"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "93"}, {"label": "text", "id": 2, "page_no": 108, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92884826660156, "t": 70.47429656982422, "r": 547.32196, "b": 116.84603881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9856703877449036, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9."}, {"label": "caption", "id": 3, "page_no": 108, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.20010375976562, "t": 423.43145751953125, "r": 314.9713439941406, "b": 432.9030456542969, "coord_origin": "TOPLEFT"}, "confidence": 0.943959653377533, "cells": [{"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-9 Inner join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 108, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.26942443847656, "t": 134.60061645507812, "r": 537.63239, "b": 169.2606201171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9708845019340515, "cells": [{"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 108, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01123046875, "t": 187.63684, "r": 470.03668212890625, "b": 420.47430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9833499193191528, "cells": [{"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 108, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92884826660156, "t": 70.47429656982422, "r": 547.32196, "b": 116.84603881835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9856703877449036, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 547.32196, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 537.83099, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "reduce the number of rows that are permitted to be accessed by the join, as shown in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 515.98468, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-9. ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 187.91333, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, the result set from an inner join (and a subquery) can be different when RCAC is applied. RCAC can reduce the number of rows that are permitted to be accessed by the join, as shown in Figure 6-9."}, {"label": "caption", "id": 3, "page_no": 108, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.20010375976562, "t": 423.43145751953125, "r": 314.9713439941406, "b": 432.9030456542969, "coord_origin": "TOPLEFT"}, "confidence": 0.943959653377533, "cells": [{"id": 6, "text": "Figure 6-9 Inner join with RCAC permission", "bbox": {"l": 136.8, "t": 424.27798, "r": 314.49866, "b": 432.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-9 Inner join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 108, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.26942443847656, "t": 134.60061645507812, "r": 537.63239, "b": 169.2606201171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9708845019340515, "cells": [{"id": 7, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 135.52855999999997, "r": 326.52615, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 135.52855999999997, "r": 529.25281, "b": 144.74158, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 147.52837999999997, "r": 537.63239, "b": 156.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 159.52819999999997, "r": 299.81543, "b": 168.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 108, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01123046875, "t": 187.63684, "r": 470.03668212890625, "b": 420.47430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9833499193191528, "cells": [{"id": 11, "text": "Inner Join with RCAC Permission", "bbox": {"l": 204.2908, "t": 187.63684, "r": 410.12238, "b": 201.08349999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Permitted", "bbox": {"l": 305.52841, "t": 269.37561000000005, "r": 378.18561, "b": 285.20309, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Result of Intersection", "bbox": {"l": 171.5974, "t": 295.78427, "r": 276.01706, "b": 305.88739, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Set A", "bbox": {"l": 232.11571000000004, "t": 397.4173, "r": 270.05716, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set B", "bbox": {"l": 341.66632, "t": 397.4173, "r": 378.85181, "b": 412.57201999999995, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 108, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.04339599609375, "t": 754.8524169921875, "r": 523.62878, "b": 764.1233520507812, "coord_origin": "TOPLEFT"}, "confidence": 0.9509537220001221, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 108, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5010375976562, "t": 754.3138427734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9208362102508545, "cells": [{"id": 1, "text": "93", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "93"}]}}, {"page_no": 109, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.17929077148438, "t": 754.3489990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131594896316528, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.3522720336914, "t": 754.6829833984375, "r": 334.42142, "b": 763.9155883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9499405026435852, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.229248046875, "t": 70.42779541015625, "r": 169.51583862304688, "b": 83.49371337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9645467400550842, "cells": [{"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7491912841797, "t": 96.71513366699219, "r": 547.22864, "b": 142.9807586669922, "coord_origin": "TOPLEFT"}, "confidence": 0.9866304993629456, "cells": [{"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 136.09414672851562, "t": 375.3983154296875, "r": 334.3742370605469, "b": 384.94317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9473740458488464, "cells": [{"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.0685272216797, "t": 157.57115173339844, "r": 478.2557678222656, "b": 372.21685791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9835702180862427, "cells": [{"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 109, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17929077148438, "t": 754.3489990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131594896316528, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "94"}, {"label": "page_footer", "id": 1, "page_no": 109, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3522720336914, "t": 754.6829833984375, "r": 334.42142, "b": 763.9155883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9499405026435852, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 109, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.229248046875, "t": 70.42779541015625, "r": 169.51583862304688, "b": 83.49371337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9645467400550842, "cells": [{"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.2 Outer joins"}, {"label": "text", "id": 3, "page_no": 109, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7491912841797, "t": 96.71513366699219, "r": 547.22864, "b": 142.9807586669922, "coord_origin": "TOPLEFT"}, "confidence": 0.9866304993629456, "cells": [{"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default."}, {"label": "caption", "id": 4, "page_no": 109, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.09414672851562, "t": 375.3983154296875, "r": 334.3742370605469, "b": 384.94317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9473740458488464, "cells": [{"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-10 Outer join without RCAC permission"}, {"label": "picture", "id": 5, "page_no": 109, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.0685272216797, "t": 157.57115173339844, "r": 478.2557678222656, "b": 372.21685791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9835702180862427, "cells": [{"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 109, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.229248046875, "t": 70.42779541015625, "r": 169.51583862304688, "b": 83.49371337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9645467400550842, "cells": [{"id": 2, "text": "6.3.2", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.717293, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Outer joins", "bbox": {"l": 98.456955, "t": 71.33471999999995, "r": 169.47015, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.2 Outer joins"}, {"label": "text", "id": 3, "page_no": 109, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7491912841797, "t": 96.71513366699219, "r": 547.22864, "b": 142.9807586669922, "coord_origin": "TOPLEFT"}, "confidence": 0.9866304993629456, "cells": [{"id": 4, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.22864, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 527.93719, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "shown in Figure 6-10. Column values from the secondary set are returned if the row has a ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 536.82648, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "match in the primary set. Otherwise, NULL is returned for the column value by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 516.36261, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Outer joins preserve one or both sides of two data sets. A row can be returned from the outer join query if it appears in the primary set (LEFT, RIGHT, or both in the case of FULL), as shown in Figure 6-10. Column values from the secondary set are returned if the row has a match in the primary set. Otherwise, NULL is returned for the column value by default."}, {"label": "caption", "id": 4, "page_no": 109, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 136.09414672851562, "t": 375.3983154296875, "r": 334.3742370605469, "b": 384.94317626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9473740458488464, "cells": [{"id": 8, "text": "Figure 6-10 Outer join without RCAC permission", "bbox": {"l": 136.8, "t": 376.27798, "r": 334.02512, "b": 384.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-10 Outer join without RCAC permission"}, {"label": "picture", "id": 5, "page_no": 109, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.0685272216797, "t": 157.57115173339844, "r": 478.2557678222656, "b": 372.21685791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9835702180862427, "cells": [{"id": 9, "text": "Set A", "bbox": {"l": 245.52909999999997, "t": 356.12268000000006, "r": 283.88458, "b": 371.44269, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Set B", "bbox": {"l": 356.27518, "t": 356.12268000000006, "r": 393.86646, "b": 371.44269, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 109, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.17929077148438, "t": 754.3489990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9131594896316528, "cells": [{"id": 0, "text": "94 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "94"}, {"label": "page_footer", "id": 1, "page_no": 109, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.3522720336914, "t": 754.6829833984375, "r": 334.42142, "b": 763.9155883789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9499405026435852, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 110, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.03192138671875, "t": 754.89306640625, "r": 523.62878, "b": 764.0955810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9518811702728271, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5347900390625, "t": 754.2847900390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9189174175262451, "cells": [{"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9468994140625, "t": 70.65094757080078, "r": 535.29822, "b": 104.91271209716797, "coord_origin": "TOPLEFT"}, "confidence": 0.9831045269966125, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.94920349121094, "t": 424.67193603515625, "r": 321.8890380859375, "b": 434.1568603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9448755383491516, "cells": [{"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 142.19854736328125, "t": 122.269287109375, "r": 537.63239, "b": 157.0519561767578, "coord_origin": "TOPLEFT"}, "confidence": 0.968166708946228, "cells": [{"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 136.01914978027344, "t": 183.2970428466797, "r": 483.0831298828125, "b": 421.65618896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9844624996185303, "cells": [{"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 110, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.03192138671875, "t": 754.89306640625, "r": 523.62878, "b": 764.0955810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9518811702728271, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 110, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5347900390625, "t": 754.2847900390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9189174175262451, "cells": [{"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "95"}, {"label": "text", "id": 2, "page_no": 110, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9468994140625, "t": 70.65094757080078, "r": 535.29822, "b": 104.91271209716797, "coord_origin": "TOPLEFT"}, "confidence": 0.9831045269966125, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11."}, {"label": "caption", "id": 3, "page_no": 110, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94920349121094, "t": 424.67193603515625, "r": 321.8890380859375, "b": 434.1568603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9448755383491516, "cells": [{"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-11 Outer join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 110, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.19854736328125, "t": 122.269287109375, "r": 537.63239, "b": 157.0519561767578, "coord_origin": "TOPLEFT"}, "confidence": 0.968166708946228, "cells": [{"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 110, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01914978027344, "t": 183.2970428466797, "r": 483.0831298828125, "b": 421.65618896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9844624996185303, "cells": [{"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 110, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9468994140625, "t": 70.65094757080078, "r": 535.29822, "b": 104.91271209716797, "coord_origin": "TOPLEFT"}, "confidence": 0.9831045269966125, "cells": [{"id": 2, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 531.78638, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "column values that are returned from the secondary table in outer join can be NULL when ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 535.29822, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC is applied, as shown in Figure 6-11.", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 324.68701, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more column values that are returned from the secondary table in outer join can be NULL when RCAC is applied, as shown in Figure 6-11."}, {"label": "caption", "id": 3, "page_no": 110, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.94920349121094, "t": 424.67193603515625, "r": 321.8890380859375, "b": 434.1568603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9448755383491516, "cells": [{"id": 5, "text": "Figure 6-11 Outer join with RCAC permission", "bbox": {"l": 136.8, "t": 425.478, "r": 321.55734, "b": 433.80301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-11 Outer join with RCAC permission"}, {"label": "text", "id": 4, "page_no": 110, "cluster": {"id": 4, "label": "text", "bbox": {"l": 142.19854736328125, "t": 122.269287109375, "r": 537.63239, "b": 157.0519561767578, "coord_origin": "TOPLEFT"}, "confidence": 0.968166708946228, "cells": [{"id": 6, "text": "Effect of column masks on inner joins:", "bbox": {"l": 142.8, "t": 123.52855999999997, "r": 326.52615, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " Because column masks are applied after the ", "bbox": {"l": 326.52017, "t": 123.52855999999997, "r": 529.25281, "b": 132.74158, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "query final results are determined, the masked value has no effect on the join processing ", "bbox": {"l": 142.8, "t": 135.52837999999997, "r": 537.63239, "b": 144.74139000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and corresponding query result set.", "bbox": {"l": 142.8, "t": 147.52819999999997, "r": 299.81543, "b": 156.74121000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Effect of column masks on inner joins: Because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "picture", "id": 5, "page_no": 110, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 136.01914978027344, "t": 183.2970428466797, "r": 483.0831298828125, "b": 421.65618896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9844624996185303, "cells": [{"id": 10, "text": "Outer Join with RCAC Permission", "bbox": {"l": 217.42469999999997, "t": 186.37725999999998, "r": 429.09708, "b": 199.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Permitted", "bbox": {"l": 321.53659, "t": 269.08660999999995, "r": 395.05688, "b": 285.10199, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Set A", "bbox": {"l": 247.25200000000004, "t": 398.64859, "r": 285.64417, "b": 413.98325, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Set B", "bbox": {"l": 358.10394, "t": 398.64859, "r": 395.73117, "b": 413.98325, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 110, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.03192138671875, "t": 754.89306640625, "r": 523.62878, "b": 764.0955810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9518811702728271, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 110, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5347900390625, "t": 754.2847900390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9189174175262451, "cells": [{"id": 1, "text": "95", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "95"}]}}, {"page_no": 111, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.0777587890625, "t": 754.3192749023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9142870903015137, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31871032714844, "t": 754.6510620117188, "r": 334.42142, "b": 763.94580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9500807523727417, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.29151153564453, "t": 70.38421630859375, "r": 196.83258, "b": 83.45001983642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9660816788673401, "cells": [{"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8982696533203, "t": 96.56317138671875, "r": 547.29144, "b": 143.43101501464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9861393570899963, "cells": [{"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 135.93870544433594, "t": 397.3731689453125, "r": 351.4439392089844, "b": 406.8922424316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9481934905052185, "cells": [{"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.85084533691406, "t": 423.3223876953125, "r": 544.33844, "b": 469.4621276855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9827116131782532, "cells": [{"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.105224609375, "t": 721.96630859375, "r": 339.2431945800781, "b": 731.4581298828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9437704086303711, "cells": [{"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.2607879638672, "t": 156.67548, "r": 484.0173034667969, "b": 394.3146667480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834190607070923, "cells": [{"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.89076232910156, "t": 484.02805, "r": 485.4429931640625, "b": 719.3485717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9840064644813538, "cells": [{"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 111, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0777587890625, "t": 754.3192749023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9142870903015137, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "96"}, {"label": "page_footer", "id": 1, "page_no": 111, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31871032714844, "t": 754.6510620117188, "r": 334.42142, "b": 763.94580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9500807523727417, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 111, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.29151153564453, "t": 70.38421630859375, "r": 196.83258, "b": 83.45001983642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9660816788673401, "cells": [{"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.3 Exception joins"}, {"label": "text", "id": 3, "page_no": 111, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8982696533203, "t": 96.56317138671875, "r": 547.29144, "b": 143.43101501464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9861393570899963, "cells": [{"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default."}, {"label": "caption", "id": 4, "page_no": 111, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.93870544433594, "t": 397.3731689453125, "r": 351.4439392089844, "b": 406.8922424316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9481934905052185, "cells": [{"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-12 Exception join without RCAC permission"}, {"label": "text", "id": 5, "page_no": 111, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85084533691406, "t": 423.3223876953125, "r": 544.33844, "b": 469.4621276855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9827116131782532, "cells": [{"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "caption", "id": 6, "page_no": 111, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.105224609375, "t": 721.96630859375, "r": 339.2431945800781, "b": 731.4581298828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9437704086303711, "cells": [{"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-13 Exception join with RCAC permission"}, {"label": "picture", "id": 7, "page_no": 111, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2607879638672, "t": 156.67548, "r": 484.0173034667969, "b": 394.3146667480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834190607070923, "cells": [{"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 111, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.89076232910156, "t": 484.02805, "r": 485.4429931640625, "b": 719.3485717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9840064644813538, "cells": [{"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 111, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.29151153564453, "t": 70.38421630859375, "r": 196.83258, "b": 83.45001983642578, "coord_origin": "TOPLEFT"}, "confidence": 0.9660816788673401, "cells": [{"id": 2, "text": "6.3.3", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.481644, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Exception joins", "bbox": {"l": 98.191849, "t": 71.33471999999995, "r": 196.83258, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.3.3 Exception joins"}, {"label": "text", "id": 3, "page_no": 111, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8982696533203, "t": 96.56317138671875, "r": 547.29144, "b": 143.43101501464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9861393570899963, "cells": [{"id": 4, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.29144, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 547.1618, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "secondary set, as shown in Figure 6-12. Column values from the secondary set are returned ", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 547.28455, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "as NULL by default.", "bbox": {"l": 136.8, "t": 133.48816, "r": 224.03667, "b": 142.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Exception joins preserve one side of two data sets. A row can be returned from the exception join query if it appears in the primary set (LEFT or RIGHT) and the row does not appear in the secondary set, as shown in Figure 6-12. Column values from the secondary set are returned as NULL by default."}, {"label": "caption", "id": 4, "page_no": 111, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 135.93870544433594, "t": 397.3731689453125, "r": 351.4439392089844, "b": 406.8922424316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9481934905052185, "cells": [{"id": 8, "text": "Figure 6-12 Exception join without RCAC permission", "bbox": {"l": 136.8, "t": 398.23801, "r": 351.00632, "b": 406.56302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-12 Exception join without RCAC permission"}, {"label": "text", "id": 5, "page_no": 111, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85084533691406, "t": 423.3223876953125, "r": 544.33844, "b": 469.4621276855469, "coord_origin": "TOPLEFT"}, "confidence": 0.9827116131782532, "cells": [{"id": 9, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more ", "bbox": {"l": 136.8, "t": 424.24872, "r": 531.78979, "b": 433.4617, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, ", "bbox": {"l": 136.8, "t": 436.24854, "r": 530.54565, "b": 445.46151999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "because column masks are applied after the query final results are determined, the masked ", "bbox": {"l": 136.8, "t": 448.2483500000001, "r": 544.33844, "b": 457.46133, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "value has no effect on the join processing and corresponding query result set.", "bbox": {"l": 136.8, "t": 460.24817, "r": 480.02267000000006, "b": 469.46115, "coord_origin": "TOPLEFT"}}]}, "text": "Given that row permission serves to eliminate logically rows from one or more sets, more rows can appear to be exceptions when RCAC is applied, as shown in Figure 6-13. Also, because column masks are applied after the query final results are determined, the masked value has no effect on the join processing and corresponding query result set."}, {"label": "caption", "id": 6, "page_no": 111, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.105224609375, "t": 721.96630859375, "r": 339.2431945800781, "b": 731.4581298828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9437704086303711, "cells": [{"id": 13, "text": "Figure 6-13 Exception join with RCAC permission", "bbox": {"l": 136.8, "t": 722.958, "r": 338.56827, "b": 731.282997, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-13 Exception join with RCAC permission"}, {"label": "picture", "id": 7, "page_no": 111, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.2607879638672, "t": 156.67548, "r": 484.0173034667969, "b": 394.3146667480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9834190607070923, "cells": [{"id": 14, "text": "Exception Join without RCAC Permission", "bbox": {"l": 191.03551, "t": 156.67548, "r": 450.43784, "b": 170.29900999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Set A", "bbox": {"l": 244.7269, "t": 369.21613, "r": 283.16766, "b": 384.57019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Set B", "bbox": {"l": 355.71924, "t": 369.21613, "r": 393.3941, "b": 384.57019, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 8, "page_no": 111, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.89076232910156, "t": 484.02805, "r": 485.4429931640625, "b": 719.3485717773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9840064644813538, "cells": [{"id": 17, "text": "Exception Join with RCAC Permission", "bbox": {"l": 206.02071, "t": 484.02805, "r": 443.83853, "b": 497.68188, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Permitted", "bbox": {"l": 323.2894, "t": 567.02611, "r": 397.06619, "b": 583.09737, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Set A", "bbox": {"l": 248.74560999999997, "t": 697.040131, "r": 287.2717, "b": 712.428268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Set B", "bbox": {"l": 359.98425, "t": 697.040131, "r": 397.74274, "b": 712.428268, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 111, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.0777587890625, "t": 754.3192749023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9142870903015137, "cells": [{"id": 0, "text": "96 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "96"}, {"label": "page_footer", "id": 1, "page_no": 111, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31871032714844, "t": 754.6510620117188, "r": 334.42142, "b": 763.94580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9500807523727417, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 112, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.0887756347656, "t": 754.9174194335938, "r": 523.62878, "b": 764.0950927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5423583984375, "t": 754.1775512695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9179106950759888, "cells": [{"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.39301300048828, "t": 69.98062896728516, "r": 469.47693, "b": 86.35014343261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9647093415260315, "cells": [{"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.89646911621094, "t": 102.54719543457031, "r": 547.22473, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9837515950202942, "cells": [{"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.66171264648438, "t": 148.67874145507812, "r": 547.19684, "b": 170.99827575683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9781493544578552, "cells": [{"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6549530029297, "t": 177.3022918701172, "r": 534.25262, "b": 199.70038, "coord_origin": "TOPLEFT"}, "confidence": 0.9730353951454163, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5695037841797, "t": 206.69236755371094, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9567621350288391, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.70484924316406, "t": 223.55690002441406, "r": 536.04651, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9668188095092773, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.6377410888672, "t": 252.64540100097656, "r": 547.22461, "b": 275.0115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9790591597557068, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.7350311279297, "t": 286.7269287109375, "r": 547.22968, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9875780940055847, "cells": [{"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.05958557128906, "t": 356.62713623046875, "r": 547.27863, "b": 451.1844177246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875933527946472, "cells": [{"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.9143524169922, "t": 462.9166564941406, "r": 547.32837, "b": 520.765869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875532388687134, "cells": [{"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.94204711914062, "t": 532.7372436523438, "r": 547.25159, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9887582063674927, "cells": [{"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "section_header", "bbox": {"l": 64.17730712890625, "t": 610.3857421875, "r": 325.99066, "b": 623.9208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9681240320205688, "cells": [{"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.0252227783203, "t": 636.5751953125, "r": 543.20374, "b": 682.76114, "coord_origin": "TOPLEFT"}, "confidence": 0.9866449236869812, "cells": [{"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 112, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0887756347656, "t": 754.9174194335938, "r": 523.62878, "b": 764.0950927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 112, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5423583984375, "t": 754.1775512695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9179106950759888, "cells": [{"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "97"}, {"label": "section_header", "id": 2, "page_no": 112, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39301300048828, "t": 69.98062896728516, "r": 469.47693, "b": 86.35014343261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9647093415260315, "cells": [{"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.4 Monitoring, analyzing, and debugging with RCAC"}, {"label": "text", "id": 3, "page_no": 112, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.89646911621094, "t": 102.54719543457031, "r": 547.22473, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9837515950202942, "cells": [{"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques."}, {"label": "text", "id": 4, "page_no": 112, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.66171264648438, "t": 148.67874145507812, "r": 547.19684, "b": 170.99827575683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9781493544578552, "cells": [{"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences:"}, {"label": "list_item", "id": 5, "page_no": 112, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6549530029297, "t": 177.3022918701172, "r": 534.25262, "b": 199.70038, "coord_origin": "TOPLEFT"}, "confidence": 0.9730353951454163, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The underlying data access plan can be different and more complex based on the rule text."}, {"label": "list_item", "id": 6, "page_no": 112, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5695037841797, "t": 206.69236755371094, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9567621350288391, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The database results can be reduced or modified based on the rule text and user profile."}, {"label": "list_item", "id": 7, "page_no": 112, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.70484924316406, "t": 223.55690002441406, "r": 536.04651, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9668188095092773, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The run time of the request can be affected either positively or negatively based on the rule text."}, {"label": "list_item", "id": 8, "page_no": 112, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6377410888672, "t": 252.64540100097656, "r": 547.22461, "b": 275.0115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9790591597557068, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH For high-level language record level access, query plans must be considered, and not just program code."}, {"label": "text", "id": 9, "page_no": 112, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.7350311279297, "t": 286.7269287109375, "r": 547.22968, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9875780940055847, "cells": [{"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}]}, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different."}, {"label": "text", "id": 10, "page_no": 112, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.05958557128906, "t": 356.62713623046875, "r": 547.27863, "b": 451.1844177246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875933527946472, "cells": [{"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user \u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query."}, {"label": "text", "id": 11, "page_no": 112, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9143524169922, "t": 462.9166564941406, "r": 547.32837, "b": 520.765869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875532388687134, "cells": [{"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different."}, {"label": "text", "id": 12, "page_no": 112, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.94204711914062, "t": 532.7372436523438, "r": 547.25159, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9887582063674927, "cells": [{"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}]}, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes even more important."}, {"label": "section_header", "id": 13, "page_no": 112, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.17730712890625, "t": 610.3857421875, "r": 325.99066, "b": 623.9208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9681240320205688, "cells": [{"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.1 Query monitoring and analysis tools"}, {"label": "text", "id": 14, "page_no": 112, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.0252227783203, "t": 636.5751953125, "r": 543.20374, "b": 682.76114, "coord_origin": "TOPLEFT"}, "confidence": 0.9866449236869812, "cells": [{"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor."}], "body": [{"label": "section_header", "id": 2, "page_no": 112, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.39301300048828, "t": 69.98062896728516, "r": 469.47693, "b": 86.35014343261719, "coord_origin": "TOPLEFT"}, "confidence": 0.9647093415260315, "cells": [{"id": 2, "text": "6.4", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.197906, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring, analyzing, and debugging with RCAC", "bbox": {"l": 91.677475, "t": 71.22069999999997, "r": 469.47693, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.4 Monitoring, analyzing, and debugging with RCAC"}, {"label": "text", "id": 3, "page_no": 112, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.89646911621094, "t": 102.54719543457031, "r": 547.22473, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9837515950202942, "cells": [{"id": 4, "text": "It is assumed (and it is a critical success factor) that the database engineer or application ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 532.22595, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 547.22473, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and all the associated tools and techniques.", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 330.59174, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "It is assumed (and it is a critical success factor) that the database engineer or application developer has a thorough understanding of the DB2 for i Query Optimizer, Database Engine, and all the associated tools and techniques."}, {"label": "text", "id": 4, "page_no": 112, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.66171264648438, "t": 148.67874145507812, "r": 547.19684, "b": 170.99827575683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9781493544578552, "cells": [{"id": 7, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row ", "bbox": {"l": 136.8, "t": 149.50793, "r": 547.19684, "b": 158.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "permissions or column masks are in place, with a few important differences:", "bbox": {"l": 136.8, "t": 161.50775, "r": 471.66223, "b": 170.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring, analyzing, and debugging process basically stays the same when RCAC row permissions or column masks are in place, with a few important differences:"}, {"label": "list_item", "id": 5, "page_no": 112, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6549530029297, "t": 177.3022918701172, "r": 534.25262, "b": 199.70038, "coord_origin": "TOPLEFT"}, "confidence": 0.9730353951454163, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63696000000004, "r": 141.78, "b": 187.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The underlying data access plan can be different and more complex based on the rule ", "bbox": {"l": 151.20016, "t": 178.48755000000006, "r": 534.25262, "b": 187.70056, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "text.", "bbox": {"l": 151.20016, "t": 190.48737000000006, "r": 169.73871, "b": 199.70038, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The underlying data access plan can be different and more complex based on the rule text."}, {"label": "list_item", "id": 6, "page_no": 112, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5695037841797, "t": 206.69236755371094, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9567621350288391, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67633, "r": 141.78, "b": 216.45110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The database results can be reduced or modified based on the rule text and user profile.", "bbox": {"l": 151.20016, "t": 207.52692000000002, "r": 541.55432, "b": 216.73992999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The database results can be reduced or modified based on the rule text and user profile."}, {"label": "list_item", "id": 7, "page_no": 112, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.70484924316406, "t": 223.55690002441406, "r": 536.04651, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9668188095092773, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65612999999996, "r": 141.78, "b": 233.43091000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The run time of the request can be affected either positively or negatively based on the ", "bbox": {"l": 151.20016, "t": 224.50671, "r": 536.04651, "b": 233.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rule text.", "bbox": {"l": 151.20016, "t": 236.50653, "r": 189.53125, "b": 245.71954000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The run time of the request can be affected either positively or negatively based on the rule text."}, {"label": "list_item", "id": 8, "page_no": 112, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6377410888672, "t": 252.64540100097656, "r": 547.22461, "b": 275.0115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9790591597557068, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 253.63574000000006, "r": 141.78, "b": 262.41052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For high-level language record level access, query plans must be considered, and not just ", "bbox": {"l": 151.20016, "t": 253.48632999999995, "r": 547.22461, "b": 262.69934, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "program code.", "bbox": {"l": 151.20016, "t": 265.48614999999995, "r": 215.34057999999996, "b": 274.69916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH For high-level language record level access, query plans must be considered, and not just program code."}, {"label": "text", "id": 9, "page_no": 112, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.7350311279297, "t": 286.7269287109375, "r": 547.22968, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9875780940055847, "cells": [{"id": 20, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for ", "bbox": {"l": 136.8, "t": 287.50574, "r": 544.67383, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "each table or file to understand the logic and corresponding work that is associated with ", "bbox": {"l": 136.8, "t": 299.5055500000001, "r": 526.74591, "b": 308.7185400000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "processing the row permissions and column masks. It is also important to realize that, ", "bbox": {"l": 136.8, "t": 311.50537, "r": 517.995, "b": 320.71835, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "depending on the user profile in effect at run time, the database actions and query results can ", "bbox": {"l": 136.8, "t": 323.50519, "r": 547.22968, "b": 332.71816999999993, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "be different.", "bbox": {"l": 136.8, "t": 335.50500000000005, "r": 189.23442, "b": 344.71799000000004, "coord_origin": "TOPLEFT"}}]}, "text": "During analyzing and debugging, it is important to account for all of the RCAC definitions for each table or file to understand the logic and corresponding work that is associated with processing the row permissions and column masks. It is also important to realize that, depending on the user profile in effect at run time, the database actions and query results can be different."}, {"label": "text", "id": 10, "page_no": 112, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.05958557128906, "t": 356.62713623046875, "r": 547.27863, "b": 451.1844177246094, "coord_origin": "TOPLEFT"}, "confidence": 0.9875933527946472, "cells": [{"id": 25, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user ", "bbox": {"l": 136.8, "t": 357.52457, "r": 524.91028, "b": 366.73755, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the ", "bbox": {"l": 136.8, "t": 369.52438, "r": 547.27863, "b": 378.73737, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "exact same system, and get different result sets. There is no error, no warning, and no ", "bbox": {"l": 136.8, "t": 381.5242, "r": 520.1225, "b": 390.73718, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "indication that RCAC reduced or modified the respective answers that are returned. ", "bbox": {"l": 136.8, "t": 393.52401999999995, "r": 507.29110999999995, "b": 402.737, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run ", "bbox": {"l": 136.8, "t": 405.52383, "r": 536.83752, "b": 414.73682, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "times even though it appears that everything is the same for both users. The actual query ", "bbox": {"l": 136.8, "t": 417.52365, "r": 533.12726, "b": 426.73663, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "plan contains the RCAC logic, and this additional code path can alter the amount of work that ", "bbox": {"l": 136.8, "t": 429.5234699999999, "r": 547.22693, "b": 438.73645, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is needed to produce results, based on the user running the query.", "bbox": {"l": 136.80002, "t": 441.52328, "r": 430.67883, "b": 450.73627, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC is designed and implemented to be transparent to the user. It is possible for user \u201cMike\u201d and user \u201cHernando\u201d to run the exact same query, against the exact same data on the exact same system, and get different result sets. There is no error, no warning, and no indication that RCAC reduced or modified the respective answers that are returned. Furthermore, it is also likely that user \u201cMike\u201d and user \u201cHernando\u201d have different query run times even though it appears that everything is the same for both users. The actual query plan contains the RCAC logic, and this additional code path can alter the amount of work that is needed to produce results, based on the user running the query."}, {"label": "text", "id": 11, "page_no": 112, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.9143524169922, "t": 462.9166564941406, "r": 547.32837, "b": 520.765869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875532388687134, "cells": [{"id": 33, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is ", "bbox": {"l": 136.80002, "t": 463.48309, "r": 547.32837, "b": 472.69608, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific ", "bbox": {"l": 136.80002, "t": 475.48291, "r": 514.85553, "b": 484.69589, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "process. For example, when re-creating a problem situation running under the same user ", "bbox": {"l": 136.80002, "t": 487.54248, "r": 532.38837, "b": 496.75546, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "profile with the same data and under the same conditions, it is almost mandatory. Otherwise, ", "bbox": {"l": 136.80002, "t": 499.5423, "r": 547.29474, "b": 508.75528, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "the database behavior and query results can be different.", "bbox": {"l": 136.80002, "t": 511.54211, "r": 389.40143, "b": 520.7551000000001, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring, analyzing, and debugging a database process when RCAC is enabled, it is critical to keep as many of the \u201cvariables\u201d the same as possible. Use a good scientific process. For example, when re-creating a problem situation running under the same user profile with the same data and under the same conditions, it is almost mandatory. Otherwise, the database behavior and query results can be different."}, {"label": "text", "id": 12, "page_no": 112, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.94204711914062, "t": 532.7372436523438, "r": 547.25159, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9887582063674927, "cells": [{"id": 38, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely ", "bbox": {"l": 136.80002, "t": 533.5019199999999, "r": 543.10217, "b": 542.71492, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "involves changes in the security and data access policies of the organization, and require new ", "bbox": {"l": 136.8, "t": 545.50172, "r": 547.25159, "b": 554.71472, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "responsibilities, authority, and oversight within the data-centric application development ", "bbox": {"l": 136.8, "t": 557.50153, "r": 523.1922, "b": 566.71452, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes ", "bbox": {"l": 136.79999, "t": 569.50133, "r": 541.04547, "b": 578.71432, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "even more important.", "bbox": {"l": 136.79999, "t": 581.50113, "r": 231.05352999999997, "b": 590.7141300000001, "coord_origin": "TOPLEFT"}}]}, "text": "To successfully perform monitoring, analyzing, and debugging when RCAC is enabled likely involves changes in the security and data access policies of the organization, and require new responsibilities, authority, and oversight within the data-centric application development community. As such, establishing and staffing the position of \u201cdatabase engineer\u201d becomes even more important."}, {"label": "section_header", "id": 13, "page_no": 112, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.17730712890625, "t": 610.3857421875, "r": 325.99066, "b": 623.9208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9681240320205688, "cells": [{"id": 43, "text": "6.4.1", "bbox": {"l": 64.800003, "t": 611.39471, "r": 94.078636, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Query monitoring and analysis tools", "bbox": {"l": 97.738449, "t": 611.39471, "r": 325.99066, "b": 623.3827200000001, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.1 Query monitoring and analysis tools"}, {"label": "text", "id": 14, "page_no": 112, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.0252227783203, "t": 636.5751953125, "r": 543.20374, "b": 682.76114, "coord_origin": "TOPLEFT"}, "confidence": 0.9866449236869812, "cells": [{"id": 45, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional ", "bbox": {"l": 136.8, "t": 637.54872, "r": 543.20374, "b": 646.76172, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "information that indicates row permissions or column masks are being applied. This ", "bbox": {"l": 136.8, "t": 649.54852, "r": 507.93053999999995, "b": 658.76152, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "information is integrated and part of the standard tools, such as Visual Explain, SQL Plan ", "bbox": {"l": 136.8, "t": 661.54832, "r": 532.96576, "b": 670.76133, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Cache Snapshot, and SQL Performance Monitor.", "bbox": {"l": 136.8, "t": 673.54813, "r": 353.58246, "b": 682.76114, "coord_origin": "TOPLEFT"}}]}, "text": "When monitoring and collecting metrics on database requests, DB2 for i provides additional information that indicates row permissions or column masks are being applied. This information is integrated and part of the standard tools, such as Visual Explain, SQL Plan Cache Snapshot, and SQL Performance Monitor."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 112, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0887756347656, "t": 754.9174194335938, "r": 523.62878, "b": 764.0950927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 112, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5423583984375, "t": 754.1775512695312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9179106950759888, "cells": [{"id": 1, "text": "97", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "97"}]}}, {"page_no": 113, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.10893249511719, "t": 754.4006958007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9148916006088257, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.39404296875, "t": 754.6958618164062, "r": 334.42142, "b": 763.9676513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9504665732383728, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.44447326660156, "t": 70.6107177734375, "r": 394.5509, "b": 81.15087127685547, "coord_origin": "TOPLEFT"}, "confidence": 0.6426960825920105, "cells": [{"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.1352310180664, "t": 351.9909973144531, "r": 301.8788146972656, "b": 361.4986877441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9484913349151611, "cells": [{"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.34783935546875, "t": 378.1083679199219, "r": 529.98889, "b": 388.4996337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7494233846664429, "cells": [{"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.04948425292969, "t": 544.6276245117188, "r": 222.99563598632812, "b": 554.0814208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098349213600159, "cells": [{"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.6471710205078, "t": 570.5686645507812, "r": 524.75702, "b": 593.2821655273438, "coord_origin": "TOPLEFT"}, "confidence": 0.8541293740272522, "cells": [{"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 64.28324127197266, "t": 688.001220703125, "r": 349.08843994140625, "b": 697.662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9500105977058411, "cells": [{"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 64.03382873535156, "t": 402.0129699707031, "r": 546.9832153320312, "b": 542.2274169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835320711135864, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 64.05506134033203, "t": 95.34317016601562, "r": 546.421142578125, "b": 349.3290100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.98197340965271, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 63.78765869140625, "t": 606.9619140625, "r": 546.1412353515625, "b": 685.5827026367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9799405932426453, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 113, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.10893249511719, "t": 754.4006958007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9148916006088257, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "98"}, {"label": "page_footer", "id": 1, "page_no": 113, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.39404296875, "t": 754.6958618164062, "r": 334.42142, "b": 763.9676513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9504665732383728, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 113, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.44447326660156, "t": 70.6107177734375, "r": 394.5509, "b": 81.15087127685547, "coord_origin": "TOPLEFT"}, "confidence": 0.6426960825920105, "cells": [{"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC."}, {"label": "caption", "id": 3, "page_no": 113, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.1352310180664, "t": 351.9909973144531, "r": 301.8788146972656, "b": 361.4986877441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9484913349151611, "cells": [{"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied"}, {"label": "text", "id": 4, "page_no": 113, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.34783935546875, "t": 378.1083679199219, "r": 529.98889, "b": 388.4996337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7494233846664429, "cells": [{"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary ."}, {"label": "caption", "id": 5, "page_no": 113, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.04948425292969, "t": 544.6276245117188, "r": 222.99563598632812, "b": 554.0814208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098349213600159, "cells": [{"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 SQL Performance Monitor"}, {"label": "text", "id": 6, "page_no": 113, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.6471710205078, "t": 570.5686645507812, "r": 524.75702, "b": 593.2821655273438, "coord_origin": "TOPLEFT"}, "confidence": 0.8541293740272522, "cells": [{"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied."}, {"label": "caption", "id": 7, "page_no": 113, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.28324127197266, "t": 688.001220703125, "r": 349.08843994140625, "b": 697.662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9500105977058411, "cells": [{"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied"}, {"label": "picture", "id": 8, "page_no": 113, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.03382873535156, "t": 402.0129699707031, "r": 546.9832153320312, "b": 542.2274169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835320711135864, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 113, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.05506134033203, "t": 95.34317016601562, "r": 546.421142578125, "b": 349.3290100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.98197340965271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 113, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.78765869140625, "t": 606.9619140625, "r": 546.1412353515625, "b": 685.5827026367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9799405932426453, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 113, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.44447326660156, "t": 70.6107177734375, "r": 394.5509, "b": 81.15087127685547, "coord_origin": "TOPLEFT"}, "confidence": 0.6426960825920105, "cells": [{"id": 2, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 394.5509, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 shows how Visual Explain externalizes RCAC."}, {"label": "caption", "id": 3, "page_no": 113, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.1352310180664, "t": 351.9909973144531, "r": 301.8788146972656, "b": 361.4986877441406, "coord_origin": "TOPLEFT"}, "confidence": 0.9484913349151611, "cells": [{"id": 3, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 352.698, "r": 300.70435, "b": 361.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-14 Visual Explain indicating that RCAC is applied"}, {"label": "text", "id": 4, "page_no": 113, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.34783935546875, "t": 378.1083679199219, "r": 529.98889, "b": 388.4996337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7494233846664429, "cells": [{"id": 4, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click ", "bbox": {"l": 136.8, "t": 378.70871, "r": 482.50363, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Summary", "bbox": {"l": 482.5803199999999, "t": 378.70871, "r": 528.22699, "b": 387.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ".", "bbox": {"l": 527.22003, "t": 378.70871, "r": 529.98889, "b": 387.92169, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 shows the main dashboard of an SQL Performance Monitor. Click Summary ."}, {"label": "caption", "id": 5, "page_no": 113, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.04948425292969, "t": 544.6276245117188, "r": 222.99563598632812, "b": 554.0814208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9098349213600159, "cells": [{"id": 7, "text": "Figure 6-15 SQL Performance Monitor", "bbox": {"l": 64.800003, "t": 545.59799, "r": 222.08038, "b": 553.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-15 SQL Performance Monitor"}, {"label": "text", "id": 6, "page_no": 113, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.6471710205078, "t": 570.5686645507812, "r": 524.75702, "b": 593.2821655273438, "coord_origin": "TOPLEFT"}, "confidence": 0.8541293740272522, "cells": [{"id": 8, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that ", "bbox": {"l": 136.8, "t": 571.54872, "r": 524.75702, "b": 580.76172, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "RCAC is applied.", "bbox": {"l": 136.8, "t": 583.54852, "r": 212.66629, "b": 592.76152, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 shows the summary of an SQL Performance Monitor with an indication that RCAC is applied."}, {"label": "caption", "id": 7, "page_no": 113, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 64.28324127197266, "t": 688.001220703125, "r": 349.08843994140625, "b": 697.662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9500105977058411, "cells": [{"id": 10, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied", "bbox": {"l": 64.800003, "t": 689.058, "r": 348.245, "b": 697.382996, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-16 SQL Performance Monitor indicating that RCAC is applied"}, {"label": "picture", "id": 8, "page_no": 113, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 64.03382873535156, "t": 402.0129699707031, "r": 546.9832153320312, "b": 542.2274169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835320711135864, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 113, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 64.05506134033203, "t": 95.34317016601562, "r": 546.421142578125, "b": 349.3290100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.98197340965271, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 113, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.78765869140625, "t": 606.9619140625, "r": 546.1412353515625, "b": 685.5827026367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9799405932426453, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 113, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.10893249511719, "t": 754.4006958007812, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9148916006088257, "cells": [{"id": 0, "text": "98 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "98"}, {"label": "page_footer", "id": 1, "page_no": 113, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.39404296875, "t": 754.6958618164062, "r": 334.42142, "b": 763.9676513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9504665732383728, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 114, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 376.0592956542969, "t": 754.98291015625, "r": 523.62878, "b": 764.048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9528514742851257, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.5274047851562, "t": 754.2946166992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922478199005127, "cells": [{"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.21266174316406, "t": 70.70671844482422, "r": 514.50977, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9165806770324707, "cells": [{"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.27816772460938, "t": 220.06015014648438, "r": 349.6502685546875, "b": 229.44299, "coord_origin": "TOPLEFT"}, "confidence": 0.9448087215423584, "cells": [{"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8977813720703, "t": 245.93429565429688, "r": 547.19598, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9853147268295288, "cells": [{"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05642700195312, "t": 335.3828125, "r": 321.65756, "b": 346.0798034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7673708200454712, "cells": [{"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.81124877929688, "t": 357.3571472167969, "r": 520.11249, "b": 391.33963, "coord_origin": "TOPLEFT"}, "confidence": 0.9725678563117981, "cells": [{"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.4740447998047, "t": 403.30865478515625, "r": 547.2644, "b": 437.394287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9761651754379272, "cells": [{"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.00121307373047, "t": 457.377197265625, "r": 184.5458984375, "b": 469.96271, "coord_origin": "TOPLEFT"}, "confidence": 0.9545406103134155, "cells": [{"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.94943237304688, "t": 483.509033203125, "r": 544.1452, "b": 517.70703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9826521873474121, "cells": [{"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.8879852294922, "t": 529.4095458984375, "r": 543.59814, "b": 587.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9877107739448547, "cells": [{"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 63.79280090332031, "t": 107.09796142578125, "r": 547.32080078125, "b": 217.7356414794922, "coord_origin": "TOPLEFT"}, "confidence": 0.9807502627372742, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 114, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0592956542969, "t": 754.98291015625, "r": 523.62878, "b": 764.048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9528514742851257, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 114, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5274047851562, "t": 754.2946166992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922478199005127, "cells": [{"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "99"}, {"label": "text", "id": 2, "page_no": 114, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.21266174316406, "t": 70.70671844482422, "r": 514.50977, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9165806770324707, "cells": [{"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized."}, {"label": "caption", "id": 3, "page_no": 114, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27816772460938, "t": 220.06015014648438, "r": 349.6502685546875, "b": 229.44299, "coord_origin": "TOPLEFT"}, "confidence": 0.9448087215423584, "cells": [{"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC"}, {"label": "text", "id": 4, "page_no": 114, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8977813720703, "t": 245.93429565429688, "r": 547.19598, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9853147268295288, "cells": [{"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}]}, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer\u2019s policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:"}, {"label": "text", "id": 5, "page_no": 114, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05642700195312, "t": 335.3828125, "r": 321.65756, "b": 346.0798034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7673708200454712, "cells": [{"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'"}, {"label": "text", "id": 6, "page_no": 114, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81124877929688, "t": 357.3571472167969, "r": 520.11249, "b": 391.33963, "coord_origin": "TOPLEFT"}, "confidence": 0.9725678563117981, "cells": [{"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}]}, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure."}, {"label": "text", "id": 7, "page_no": 114, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.4740447998047, "t": 403.30865478515625, "r": 547.2644, "b": 437.394287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9761651754379272, "cells": [{"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}]}, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain."}, {"label": "section_header", "id": 8, "page_no": 114, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.00121307373047, "t": 457.377197265625, "r": 184.5458984375, "b": 469.96271, "coord_origin": "TOPLEFT"}, "confidence": 0.9545406103134155, "cells": [{"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.2 Index advisor"}, {"label": "text", "id": 9, "page_no": 114, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94943237304688, "t": 483.509033203125, "r": 544.1452, "b": 517.70703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9826521873474121, "cells": [{"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}]}, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point."}, {"label": "text", "id": 10, "page_no": 114, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.8879852294922, "t": 529.4095458984375, "r": 543.59814, "b": 587.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9877107739448547, "cells": [{"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}]}, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised."}, {"label": "picture", "id": 11, "page_no": 114, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 63.79280090332031, "t": 107.09796142578125, "r": 547.32080078125, "b": 217.7356414794922, "coord_origin": "TOPLEFT"}, "confidence": 0.9807502627372742, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 114, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.21266174316406, "t": 70.70671844482422, "r": 514.50977, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9165806770324707, "cells": [{"id": 2, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 514.50977, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "externalized.", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 193.28972, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 shows the statements of an SQL Performance Monitor and how RCAC is externalized."}, {"label": "caption", "id": 3, "page_no": 114, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.27816772460938, "t": 220.06015014648438, "r": 349.6502685546875, "b": 229.44299, "coord_origin": "TOPLEFT"}, "confidence": 0.9448087215423584, "cells": [{"id": 4, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC", "bbox": {"l": 64.800003, "t": 221.11803999999995, "r": 349.08563, "b": 229.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-17 SQL Performance Monitor showing statements and RCAC"}, {"label": "text", "id": 4, "page_no": 114, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8977813720703, "t": 245.93429565429688, "r": 547.19598, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9853147268295288, "cells": [{"id": 5, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control ", "bbox": {"l": 136.8, "t": 247.12872000000004, "r": 535.89722, "b": 256.34173999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "initiative, consider that the database monitoring and analysis tools can collect literal values ", "bbox": {"l": 136.8, "t": 259.12854000000004, "r": 538.49878, "b": 268.34155, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "that are passed as part of SQL statements. These literal values can be viewed as part of the ", "bbox": {"l": 136.79999, "t": 271.12836000000004, "r": 546.87805, "b": 280.34137, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "information collected. If any of the literals are based on or are used with masked columns, it is ", "bbox": {"l": 136.79999, "t": 283.1282, "r": 547.19598, "b": 292.34119, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "important to review the database engineer\u2019s policy for viewing these data elements. For ", "bbox": {"l": 136.79999, "t": 295.12802, "r": 524.2348, "b": 304.341, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database ", "bbox": {"l": 136.8, "t": 307.12784, "r": 540.35242, "b": 316.34081999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:", "bbox": {"l": 136.8, "t": 319.12766, "r": 491.99249, "b": 328.34064000000006, "coord_origin": "TOPLEFT"}}]}, "text": "When implementing RCAC as part of a comprehensive and pervasive data access control initiative, consider that the database monitoring and analysis tools can collect literal values that are passed as part of SQL statements. These literal values can be viewed as part of the information collected. If any of the literals are based on or are used with masked columns, it is important to review the database engineer\u2019s policy for viewing these data elements. For example, supposed that column CUSTOMER_TAX_ID is deemed masked for the database engineer and the CUSTOMER_TAX_ID column is used in a predicate as follows:"}, {"label": "text", "id": 5, "page_no": 114, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05642700195312, "t": 335.3828125, "r": 321.65756, "b": 346.0798034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.7673708200454712, "cells": [{"id": 12, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'", "bbox": {"l": 136.8, "t": 336.25684, "r": 321.65756, "b": 345.03162, "coord_origin": "TOPLEFT"}}]}, "text": "WHERE CUSTOMER_TAX_ID = '123-45-7890'"}, {"label": "text", "id": 6, "page_no": 114, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.81124877929688, "t": 357.3571472167969, "r": 520.11249, "b": 391.33963, "coord_origin": "TOPLEFT"}, "confidence": 0.9725678563117981, "cells": [{"id": 13, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive ", "bbox": {"l": 136.8, "t": 358.12701, "r": 520.11249, "b": 367.34, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "information. If this is not acceptable, you must implement the ", "bbox": {"l": 136.8, "t": 370.12683, "r": 407.22797, "b": 379.33981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SYSPROC.SET_COLUMN_ATTRIBUTE procedure.", "bbox": {"l": 136.8, "t": 382.1266499999999, "r": 366.48557, "b": 391.33963, "coord_origin": "TOPLEFT"}}]}, "text": "The literal value of \u2019123-45-7890\u2019 is visible to the analyst, effectively exposing sensitive information. If this is not acceptable, you must implement the SYSPROC.SET_COLUMN_ATTRIBUTE procedure."}, {"label": "text", "id": 7, "page_no": 114, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.4740447998047, "t": 403.30865478515625, "r": 547.2644, "b": 437.394287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9761651754379272, "cells": [{"id": 16, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that ", "bbox": {"l": 136.8, "t": 404.14621, "r": 546.67786, "b": 413.35919, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "variable values that are used for the column cannot be seen in the SQL Performance Monitor, ", "bbox": {"l": 136.79999, "t": 416.14603, "r": 547.2644, "b": 425.35900999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "SQL Plan Cache Snapshot, or Visual Explain.", "bbox": {"l": 136.79999, "t": 428.1458400000001, "r": 338.97601, "b": 437.35883000000007, "coord_origin": "TOPLEFT"}}]}, "text": "The SET_COLUMN_ATTRIBUTE procedure sets the SECURE attribute for a column so that variable values that are used for the column cannot be seen in the SQL Performance Monitor, SQL Plan Cache Snapshot, or Visual Explain."}, {"label": "section_header", "id": 8, "page_no": 114, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.00121307373047, "t": 457.377197265625, "r": 184.5458984375, "b": 469.96271, "coord_origin": "TOPLEFT"}, "confidence": 0.9545406103134155, "cells": [{"id": 19, "text": "6.4.2", "bbox": {"l": 64.800003, "t": 457.97473, "r": 94.474304, "b": 469.96271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Index advisor", "bbox": {"l": 98.183594, "t": 457.97473, "r": 184.20438, "b": 469.96271, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.2 Index advisor"}, {"label": "text", "id": 9, "page_no": 114, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94943237304688, "t": 483.509033203125, "r": 544.1452, "b": 517.70703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9826521873474121, "cells": [{"id": 21, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection ", "bbox": {"l": 136.8, "t": 484.12872, "r": 527.37341, "b": 493.34171, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "predicates, join conditions, and subqueries, the standard query tuning techniques still apply. ", "bbox": {"l": 136.8, "t": 496.12854, "r": 544.1452, "b": 505.34152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Without a doubt, a proper and adequate indexing strategy is a good starting point.", "bbox": {"l": 136.79999, "t": 508.12836, "r": 498.02637000000004, "b": 517.34134, "coord_origin": "TOPLEFT"}}]}, "text": "Because the RCAC rule text can be almost any valid SQL logic, including local selection predicates, join conditions, and subqueries, the standard query tuning techniques still apply. Without a doubt, a proper and adequate indexing strategy is a good starting point."}, {"label": "text", "id": 10, "page_no": 114, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.8879852294922, "t": 529.4095458984375, "r": 543.59814, "b": 587.827880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9877107739448547, "cells": [{"id": 24, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully ", "bbox": {"l": 136.79999, "t": 530.14792, "r": 540.85529, "b": 539.36092, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "integrated part of the query plan, any opportunities for indexing is advised based on the ", "bbox": {"l": 136.79999, "t": 542.1477199999999, "r": 525.34064, "b": 551.36072, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "current Query Optimizer functionality. If an index is advised because of the RCAC rule text ", "bbox": {"l": 136.79999, "t": 554.14752, "r": 536.7569, "b": 563.36052, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule ", "bbox": {"l": 136.79999, "t": 566.14732, "r": 543.59814, "b": 575.36032, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "text provides the understanding as to why the index is being advised.", "bbox": {"l": 136.79999, "t": 578.1471300000001, "r": 440.79403999999994, "b": 587.36012, "coord_origin": "TOPLEFT"}}]}, "text": "The index advisor is not specifically enhanced for RCAC, but because the rule text is a fully integrated part of the query plan, any opportunities for indexing is advised based on the current Query Optimizer functionality. If an index is advised because of the RCAC rule text logic, there is no RCAC reason code provided. Analyzing the query plan and the RCAC rule text provides the understanding as to why the index is being advised."}, {"label": "picture", "id": 11, "page_no": 114, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 63.79280090332031, "t": 107.09796142578125, "r": 547.32080078125, "b": 217.7356414794922, "coord_origin": "TOPLEFT"}, "confidence": 0.9807502627372742, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 114, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 376.0592956542969, "t": 754.98291015625, "r": 523.62878, "b": 764.048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9528514742851257, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 376.79999, "t": 755.538002, "r": 523.62878, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 114, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.5274047851562, "t": 754.2946166992188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922478199005127, "cells": [{"id": 1, "text": "99", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "99"}]}}, {"page_no": 115, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.36641693115234, "t": 754.297607421875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9257708787918091, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.54092407226562, "t": 754.6331787109375, "r": 339.8568115234375, "b": 764.0162353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9520395398139954, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.3820037841797, "t": 70.64859008789062, "r": 529.22491, "b": 92.91596984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9596586227416992, "cells": [{"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.15460205078125, "t": 381.4628601074219, "r": 286.3040466308594, "b": 390.739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9480466842651367, "cells": [{"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.26499938964844, "t": 407.0609130859375, "r": 530.6283, "b": 429.14151, "coord_origin": "TOPLEFT"}, "confidence": 0.9521172642707825, "cells": [{"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.29851531982422, "t": 557.3598022460938, "r": 271.84735107421875, "b": 566.8680419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9459379315376282, "cells": [{"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.3258819580078, "t": 583.20947265625, "r": 545.00952, "b": 605.608154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9606812596321106, "cells": [{"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.258544921875, "t": 612.0850219726562, "r": 546.53442, "b": 634.7529907226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9552512764930725, "cells": [{"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.1768798828125, "t": 653.7276000976562, "r": 251.73373, "b": 667.0787353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9654273390769958, "cells": [{"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.8922119140625, "t": 679.9402465820312, "r": 519.3606, "b": 726.3667602539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9741504192352295, "cells": [{"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 136.10072326660156, "t": 107.46050262451172, "r": 547.119140625, "b": 378.9705810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9820297360420227, "cells": [{"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 64.22953796386719, "t": 443.35888671875, "r": 510.0937805175781, "b": 554.72021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9759700298309326, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 115, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.36641693115234, "t": 754.297607421875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9257708787918091, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "100"}, {"label": "page_footer", "id": 1, "page_no": 115, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.54092407226562, "t": 754.6331787109375, "r": 339.8568115234375, "b": 764.0162353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9520395398139954, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 115, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.3820037841797, "t": 70.64859008789062, "r": 529.22491, "b": 92.91596984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9596586227416992, "cells": [{"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s predicate and the RCAC predicate."}, {"label": "caption", "id": 3, "page_no": 115, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.15460205078125, "t": 381.4628601074219, "r": 286.3040466308594, "b": 390.739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9480466842651367, "cells": [{"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-18 Index advice and RCAC"}, {"label": "text", "id": 4, "page_no": 115, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.26499938964844, "t": 407.0609130859375, "r": 530.6283, "b": 429.14151, "coord_origin": "TOPLEFT"}, "confidence": 0.9521172642707825, "cells": [{"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}]}, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text."}, {"label": "caption", "id": 5, "page_no": 115, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.29851531982422, "t": 557.3598022460938, "r": 271.84735107421875, "b": 566.8680419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9459379315376282, "cells": [{"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-19 Index advisor based on the RCAC rule"}, {"label": "text", "id": 6, "page_no": 115, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.3258819580078, "t": 583.20947265625, "r": 545.00952, "b": 605.608154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9606812596321106, "cells": [{"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at:"}, {"label": "text", "id": 7, "page_no": 115, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.258544921875, "t": 612.0850219726562, "r": 546.53442, "b": 634.7529907226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9552512764930725, "cells": [{"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies"}, {"label": "section_header", "id": 8, "page_no": 115, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.1768798828125, "t": 653.7276000976562, "r": 251.73373, "b": 667.0787353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9654273390769958, "cells": [{"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.3 Metadata using catalogs"}, {"label": "text", "id": 9, "page_no": 115, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8922119140625, "t": 679.9402465820312, "r": 519.3606, "b": 726.3667602539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9741504192352295, "cells": [{"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}]}, "text": "To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively."}, {"label": "picture", "id": 10, "page_no": 115, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.10072326660156, "t": 107.46050262451172, "r": 547.119140625, "b": 378.9705810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9820297360420227, "cells": [{"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 115, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.22953796386719, "t": 443.35888671875, "r": 510.0937805175781, "b": 554.72021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9759700298309326, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 115, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.3820037841797, "t": 70.64859008789062, "r": 529.22491, "b": 92.91596984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9596586227416992, "cells": [{"id": 2, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 529.22491, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "predicate and the RCAC predicate.", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 291.40308, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the query that is shown in Figure 6-18 produces index advice for the user\u2019s predicate and the RCAC predicate."}, {"label": "caption", "id": 3, "page_no": 115, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.15460205078125, "t": 381.4628601074219, "r": 286.3040466308594, "b": 390.739990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9480466842651367, "cells": [{"id": 4, "text": "Figure 6-18 Index advice and RCAC", "bbox": {"l": 136.8, "t": 381.91799999999995, "r": 285.60236, "b": 390.24301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-18 Index advice and RCAC"}, {"label": "text", "id": 4, "page_no": 115, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.26499938964844, "t": 407.0609130859375, "r": 530.6283, "b": 429.14151, "coord_origin": "TOPLEFT"}, "confidence": 0.9521172642707825, "cells": [{"id": 5, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS ", "bbox": {"l": 136.8, "t": 407.92870999999997, "r": 530.6283, "b": 417.14169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables based on the RCAC rule text.", "bbox": {"l": 136.8, "t": 419.9285300000001, "r": 295.63611, "b": 429.14151, "coord_origin": "TOPLEFT"}}]}, "text": "In Figure 6-19, index advisor is showing an index for the ACCOUNTS and CUSTOMERS tables based on the RCAC rule text."}, {"label": "caption", "id": 5, "page_no": 115, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.29851531982422, "t": 557.3598022460938, "r": 271.84735107421875, "b": 566.8680419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9459379315376282, "cells": [{"id": 7, "text": "Figure 6-19 Index advisor based on the RCAC rule", "bbox": {"l": 64.800003, "t": 558.0178999999999, "r": 271.233, "b": 566.34291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-19 Index advisor based on the RCAC rule"}, {"label": "text", "id": 6, "page_no": 115, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.3258819580078, "t": 583.20947265625, "r": 545.00952, "b": 605.608154296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9606812596321106, "cells": [{"id": 8, "text": "For more information about creating and using indexes, see ", "bbox": {"l": 136.8, "t": 584.02863, "r": 402.31378, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM DB2 for i indexing methods ", "bbox": {"l": 402.36047, "t": 584.02863, "r": 545.00952, "b": 593.24162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "and strategies", "bbox": {"l": 136.79999, "t": 596.02843, "r": 199.48126, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": ", found at:", "bbox": {"l": 199.3199, "t": 596.02843, "r": 243.46958999999998, "b": 605.2414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about creating and using indexes, see IBM DB2 for i indexing methods and strategies , found at:"}, {"label": "text", "id": 7, "page_no": 115, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.258544921875, "t": 612.0850219726562, "r": 546.53442, "b": 634.7529907226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9552512764930725, "cells": [{"id": 12, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in", "bbox": {"l": 136.79999, "t": 613.15764, "r": 546.53442, "b": 621.9323899999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "dexing_methods_strategies", "bbox": {"l": 136.79999, "t": 625.15744, "r": 261.71826, "b": 633.93219, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i_in dexing_methods_strategies"}, {"label": "section_header", "id": 8, "page_no": 115, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.1768798828125, "t": 653.7276000976562, "r": 251.73373, "b": 667.0787353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9654273390769958, "cells": [{"id": 14, "text": "6.4.3", "bbox": {"l": 64.800003, "t": 654.8347200000001, "r": 94.251732, "b": 666.82272, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Metadata using catalogs", "bbox": {"l": 97.933197, "t": 654.8347200000001, "r": 251.73373, "b": 666.82272, "coord_origin": "TOPLEFT"}}]}, "text": "6.4.3 Metadata using catalogs"}, {"label": "text", "id": 9, "page_no": 115, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8922119140625, "t": 679.9402465820312, "r": 519.3606, "b": 726.3667602539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9741504192352295, "cells": [{"id": 16, "text": "To make the discovery and identification of RCAC row permissions and column masks ", "bbox": {"l": 136.8, "t": 680.9887200000001, "r": 519.3606, "b": 690.20172, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "programmatically, query the QSYS2.SYSCONTROLS catalog view or the ", "bbox": {"l": 136.8, "t": 692.988525, "r": 461.96115, "b": 702.20153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator ", "bbox": {"l": 136.8, "t": 704.988335, "r": 518.80981, "b": 714.20134, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database graphical interface can be used interactively.", "bbox": {"l": 136.80099, "t": 716.988144, "r": 377.75638, "b": 726.201149, "coord_origin": "TOPLEFT"}}]}, "text": "To make the discovery and identification of RCAC row permissions and column masks programmatically, query the QSYS2.SYSCONTROLS catalog view or the QSYS2.SYSCONTROLSDEP catalog view directly. Otherwise, the System i Navigator Database graphical interface can be used interactively."}, {"label": "picture", "id": 10, "page_no": 115, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 136.10072326660156, "t": 107.46050262451172, "r": 547.119140625, "b": 378.9705810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9820297360420227, "cells": [{"id": 20, "text": "SELECT *", "bbox": {"l": 157.9931, "t": 149.12018, "r": 203.30074, "b": 159.40918, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "FROM ACCOUNTS A", "bbox": {"l": 157.9931, "t": 170.76196000000004, "r": 261.50269, "b": 181.05096000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "WHERE A.", "bbox": {"l": 157.9931, "t": 192.40283, "r": 207.43439, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNT_NUMBER", "bbox": {"l": 207.4079, "t": 192.40283, "r": 308.69241, "b": 202.70385999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "= ?", "bbox": {"l": 311.45059, "t": 192.40283, "r": 325.75049, "b": 202.69182999999998, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AND", "bbox": {"l": 157.99429, "t": 214.04462, "r": 180.14389, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A.CUSTOMER ID IN (", "bbox": {"l": 197.36319, "t": 214.04462, "r": 299.22586, "b": 224.33362, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "_", "bbox": {"l": 262.95361, "t": 214.04418999999996, "r": 268.9465, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "(", "bbox": {"l": 295.57959, "t": 214.04418999999996, "r": 299.22586, "b": 224.33318999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "SELECT C.", "bbox": {"l": 236.68889999999996, "t": 235.68548999999996, "r": 285.47073, "b": 245.97448999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_ID", "bbox": {"l": 285.51285, "t": 235.68548999999996, "r": 359.03998, "b": 245.98650999999995, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM CUSTOMERS C", "bbox": {"l": 236.68889999999996, "t": 257.32678, "r": 346.32556, "b": 267.61578, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "WHERE C.", "bbox": {"l": 236.68889999999996, "t": 278.96813999999995, "r": 285.50443, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_LOGIN_ID", "bbox": {"l": 285.51285, "t": 278.96813999999995, "r": 396.81561, "b": 289.26913, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "= CUSTOMER_LOGIN_ID);", "bbox": {"l": 399.42456, "t": 278.96813999999995, "r": 524.35449, "b": 289.25711000000007, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "A.CUSTOMER_ID has an index (via the foreign key constraint)", "bbox": {"l": 204.2925, "t": 321.07211, "r": 472.9567, "b": 330.41876, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "A ACCOUNT NUMBER d", "bbox": {"l": 204.2925, "t": 347.30402, "r": 311.6994, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "t h", "bbox": {"l": 340.37268, "t": 347.30402, "r": 352.16086, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "i", "bbox": {"l": 383.88382, "t": 347.30402, "r": 387.12537, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "d", "bbox": {"l": 390.32446, "t": 347.30402, "r": 397.60028, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "A.ACCOUNT_NUMBER does not have an index", "bbox": {"l": 204.2925, "t": 347.30402, "r": 407.07541, "b": 356.65067, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "C.CUSTOMER_LOGIN_ID, C.CCUSTOMER_ID does not have an index", "bbox": {"l": 204.29321, "t": 360.41992, "r": 499.13022, "b": 369.76657, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 11, "page_no": 115, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 64.22953796386719, "t": 443.35888671875, "r": 510.0937805175781, "b": 554.72021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9759700298309326, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 115, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.36641693115234, "t": 754.297607421875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9257708787918091, "cells": [{"id": 0, "text": "100 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "100"}, {"label": "page_footer", "id": 1, "page_no": 115, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.54092407226562, "t": 754.6331787109375, "r": 339.8568115234375, "b": 764.0162353515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9520395398139954, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 116, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.6695251464844, "t": 754.8765258789062, "r": 517.96918, "b": 763.8857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.947565495967865, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.2025146484375, "t": 754.233154296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9223108291625977, "cells": [{"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 136.48927307128906, "t": 70.64897155761719, "r": 409.46722, "b": 81.03340148925781, "coord_origin": "TOPLEFT"}, "confidence": 0.6312575936317444, "cells": [{"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.26973724365234, "t": 245.4910888671875, "r": 197.03440856933594, "b": 254.8696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.8850163221359253, "cells": [{"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15829467773438, "t": 271.2189636230469, "r": 430.36699999999996, "b": 281.557861328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8766745924949646, "cells": [{"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.715576171875, "t": 288.5225830078125, "r": 229.52528381347656, "b": 298.40128, "coord_origin": "TOPLEFT"}, "confidence": 0.9187909364700317, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.78355407714844, "t": 300.58892822265625, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}, "confidence": 0.9145805835723877, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8020477294922, "t": 312.4302673339844, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}, "confidence": 0.9202974438667297, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.65097045898438, "t": 324.4266052246094, "r": 190.9705047607422, "b": 334.40073, "coord_origin": "TOPLEFT"}, "confidence": 0.9024768471717834, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.5606231689453, "t": 336.0796813964844, "r": 207.5435791015625, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9086344838142395, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.4138946533203, "t": 348.0664367675781, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}, "confidence": 0.9216498136520386, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.53013610839844, "t": 360.2685852050781, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}, "confidence": 0.908420741558075, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.5832061767578, "t": 372.1552429199219, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}, "confidence": 0.8999857902526855, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 135.9365997314453, "t": 384.15179443359375, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9266810417175293, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.55462646484375, "t": 395.8648376464844, "r": 236.96395874023438, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9251843690872192, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.59799194335938, "t": 408.1325378417969, "r": 213.861328125, "b": 418.39944, "coord_origin": "TOPLEFT"}, "confidence": 0.9111971855163574, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.62445068359375, "t": 419.9839782714844, "r": 223.28578186035156, "b": 430.39926, "coord_origin": "TOPLEFT"}, "confidence": 0.9163252115249634, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 135.59918212890625, "t": 431.9518737792969, "r": 227.91741943359375, "b": 442.39908, "coord_origin": "TOPLEFT"}, "confidence": 0.9221100211143494, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.649658203125, "t": 444.19696044921875, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9048181772232056, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.53004455566406, "t": 456.36712646484375, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}, "confidence": 0.9331137537956238, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.6468963623047, "t": 467.97235107421875, "r": 263.12493896484375, "b": 478.39853, "coord_origin": "TOPLEFT"}, "confidence": 0.9202753305435181, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.67005920410156, "t": 480.2753601074219, "r": 276.916015625, "b": 490.39835, "coord_origin": "TOPLEFT"}, "confidence": 0.93083256483078, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.68890380859375, "t": 492.2499084472656, "r": 216.28732299804688, "b": 502.39816, "coord_origin": "TOPLEFT"}, "confidence": 0.9164599180221558, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 135.64125061035156, "t": 504.14703369140625, "r": 230.32113647460938, "b": 514.39798, "coord_origin": "TOPLEFT"}, "confidence": 0.9193540215492249, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 135.58006286621094, "t": 516.2754516601562, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}, "confidence": 0.9276848435401917, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "text", "bbox": {"l": 136.2348175048828, "t": 538.4920043945312, "r": 451.01199, "b": 548.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8883419632911682, "cells": [{"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}]}, {"id": 26, "label": "list_item", "bbox": {"l": 135.6955108642578, "t": 554.92236328125, "r": 229.20022583007812, "b": 565.39719, "coord_origin": "TOPLEFT"}, "confidence": 0.9285773634910583, "cells": [{"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}]}, {"id": 27, "label": "list_item", "bbox": {"l": 135.7337188720703, "t": 567.2264404296875, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}, "confidence": 0.9127693772315979, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}]}, {"id": 28, "label": "list_item", "bbox": {"l": 135.7036590576172, "t": 579.0064086914062, "r": 223.13241577148438, "b": 589.39679, "coord_origin": "TOPLEFT"}, "confidence": 0.9143235683441162, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}]}, {"id": 29, "label": "list_item", "bbox": {"l": 135.64175415039062, "t": 590.69970703125, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9129092693328857, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 30, "label": "list_item", "bbox": {"l": 135.65492248535156, "t": 602.8453369140625, "r": 239.2605743408203, "b": 613.39639, "coord_origin": "TOPLEFT"}, "confidence": 0.9242467880249023, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}]}, {"id": 31, "label": "list_item", "bbox": {"l": 135.42955017089844, "t": 614.6676635742188, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9121018648147583, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 32, "label": "list_item", "bbox": {"l": 135.63658142089844, "t": 626.9090576171875, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}, "confidence": 0.9265965223312378, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}]}, {"id": 33, "label": "list_item", "bbox": {"l": 135.70877075195312, "t": 639.044921875, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}, "confidence": 0.9117604494094849, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}]}, {"id": 34, "label": "list_item", "bbox": {"l": 135.70849609375, "t": 651.1845703125, "r": 227.56272888183594, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9165326356887817, "cells": [{"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 35, "label": "list_item", "bbox": {"l": 135.59637451171875, "t": 662.8261108398438, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}, "confidence": 0.9273440837860107, "cells": [{"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}]}, {"id": 36, "label": "list_item", "bbox": {"l": 135.5303497314453, "t": 675.0317993164062, "r": 276.7511291503906, "b": 685.39522, "coord_origin": "TOPLEFT"}, "confidence": 0.9355826377868652, "cells": [{"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}]}, {"id": 37, "label": "text", "bbox": {"l": 136.2892303466797, "t": 697.2129516601562, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}, "confidence": 0.8819487690925598, "cells": [{"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}]}, {"id": 38, "label": "text", "bbox": {"l": 136.3297119140625, "t": 713.9354248046875, "r": 546.53442, "b": 736.10556, "coord_origin": "TOPLEFT"}, "confidence": 0.9137188792228699, "cells": [{"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 116, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6695251464844, "t": 754.8765258789062, "r": 517.96918, "b": 763.8857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.947565495967865, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 116, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.2025146484375, "t": 754.233154296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9223108291625977, "cells": [{"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "101"}, {"label": "section_header", "id": 2, "page_no": 116, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.48927307128906, "t": 70.64897155761719, "r": 409.46722, "b": 81.03340148925781, "coord_origin": "TOPLEFT"}, "confidence": 0.6312575936317444, "cells": [{"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view."}, {"label": "caption", "id": 3, "page_no": 116, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.26973724365234, "t": 245.4910888671875, "r": 197.03440856933594, "b": 254.8696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.8850163221359253, "cells": [{"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 RCAC and catalogs"}, {"label": "text", "id": 4, "page_no": 116, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15829467773438, "t": 271.2189636230469, "r": 430.36699999999996, "b": 281.557861328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8766745924949646, "cells": [{"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLS catalog view contains the following columns:"}, {"label": "list_item", "id": 5, "page_no": 116, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.715576171875, "t": 288.5225830078125, "r": 229.52528381347656, "b": 298.40128, "coord_origin": "TOPLEFT"}, "confidence": 0.9187909364700317, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 6, "page_no": 116, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78355407714844, "t": 300.58892822265625, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}, "confidence": 0.9145805835723877, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 7, "page_no": 116, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8020477294922, "t": 312.4302673339844, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}, "confidence": 0.9202974438667297, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CREATE_TIME"}, {"label": "list_item", "id": 8, "page_no": 116, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.65097045898438, "t": 324.4266052246094, "r": 190.9705047607422, "b": 334.40073, "coord_origin": "TOPLEFT"}, "confidence": 0.9024768471717834, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENABLE"}, {"label": "list_item", "id": 9, "page_no": 116, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5606231689453, "t": 336.0796813964844, "r": 207.5435791015625, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9086344838142395, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENFORCED"}, {"label": "list_item", "id": 10, "page_no": 116, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.4138946533203, "t": 348.0664367675781, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}, "confidence": 0.9216498136520386, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ASP_NUMBER"}, {"label": "list_item", "id": 11, "page_no": 116, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53013610839844, "t": 360.2685852050781, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}, "confidence": 0.908420741558075, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IMPLICIT"}, {"label": "list_item", "id": 12, "page_no": 116, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.5832061767578, "t": 372.1552429199219, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}, "confidence": 0.8999857902526855, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LABEL"}, {"label": "list_item", "id": 13, "page_no": 116, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.9365997314453, "t": 384.15179443359375, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9266810417175293, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LAST_ALTERED"}, {"label": "list_item", "id": 14, "page_no": 116, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.55462646484375, "t": 395.8648376464844, "r": 236.96395874023438, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9251843690872192, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LONG_COMMENT"}, {"label": "list_item", "id": 15, "page_no": 116, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.59799194335938, "t": 408.1325378417969, "r": 213.861328125, "b": 418.39944, "coord_origin": "TOPLEFT"}, "confidence": 0.9111971855163574, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 16, "page_no": 116, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.62445068359375, "t": 419.9839782714844, "r": 223.28578186035156, "b": 430.39926, "coord_origin": "TOPLEFT"}, "confidence": 0.9163252115249634, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_OWNER"}, {"label": "list_item", "id": 17, "page_no": 116, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.59918212890625, "t": 431.9518737792969, "r": 227.91741943359375, "b": 442.39908, "coord_origin": "TOPLEFT"}, "confidence": 0.9221100211143494, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 18, "page_no": 116, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.649658203125, "t": 444.19696044921875, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9048181772232056, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RULETEXT"}, {"label": "list_item", "id": 19, "page_no": 116, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.53004455566406, "t": 456.36712646484375, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}, "confidence": 0.9331137537956238, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_COLUMN_NAME"}, {"label": "list_item", "id": 20, "page_no": 116, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.6468963623047, "t": 467.97235107421875, "r": 263.12493896484375, "b": 478.39853, "coord_origin": "TOPLEFT"}, "confidence": 0.9202753305435181, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 21, "page_no": 116, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.67005920410156, "t": 480.2753601074219, "r": 276.916015625, "b": 490.39835, "coord_origin": "TOPLEFT"}, "confidence": 0.93083256483078, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "list_item", "id": 22, "page_no": 116, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.68890380859375, "t": 492.2499084472656, "r": 216.28732299804688, "b": 502.39816, "coord_origin": "TOPLEFT"}, "confidence": 0.9164599180221558, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_NAME"}, {"label": "list_item", "id": 23, "page_no": 116, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.64125061035156, "t": 504.14703369140625, "r": 230.32113647460938, "b": 514.39798, "coord_origin": "TOPLEFT"}, "confidence": 0.9193540215492249, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_SCHEMA"}, {"label": "list_item", "id": 24, "page_no": 116, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.58006286621094, "t": 516.2754516601562, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}, "confidence": 0.9276848435401917, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TBCORRELATION"}, {"label": "text", "id": 25, "page_no": 116, "cluster": {"id": 25, "label": "text", "bbox": {"l": 136.2348175048828, "t": 538.4920043945312, "r": 451.01199, "b": 548.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8883419632911682, "cells": [{"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLSDEP catalog view contains the following columns:"}, {"label": "list_item", "id": 26, "page_no": 116, "cluster": {"id": 26, "label": "list_item", "bbox": {"l": 135.6955108642578, "t": 554.92236328125, "r": 229.20022583007812, "b": 565.39719, "coord_origin": "TOPLEFT"}, "confidence": 0.9285773634910583, "cells": [{"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 27, "page_no": 116, "cluster": {"id": 27, "label": "list_item", "bbox": {"l": 135.7337188720703, "t": 567.2264404296875, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}, "confidence": 0.9127693772315979, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 28, "page_no": 116, "cluster": {"id": 28, "label": "list_item", "bbox": {"l": 135.7036590576172, "t": 579.0064086914062, "r": 223.13241577148438, "b": 589.39679, "coord_origin": "TOPLEFT"}, "confidence": 0.9143235683441162, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IASP_NUMBER"}, {"label": "list_item", "id": 29, "page_no": 116, "cluster": {"id": 29, "label": "list_item", "bbox": {"l": 135.64175415039062, "t": 590.69970703125, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9129092693328857, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_NAME"}, {"label": "list_item", "id": 30, "page_no": 116, "cluster": {"id": 30, "label": "list_item", "bbox": {"l": 135.65492248535156, "t": 602.8453369140625, "r": 239.2605743408203, "b": 613.39639, "coord_origin": "TOPLEFT"}, "confidence": 0.9242467880249023, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_SCHEMA"}, {"label": "list_item", "id": 31, "page_no": 116, "cluster": {"id": 31, "label": "list_item", "bbox": {"l": 135.42955017089844, "t": 614.6676635742188, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9121018648147583, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_TYPE"}, {"label": "list_item", "id": 32, "page_no": 116, "cluster": {"id": 32, "label": "list_item", "bbox": {"l": 135.63658142089844, "t": 626.9090576171875, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}, "confidence": 0.9265965223312378, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PARM_SIGNATURE"}, {"label": "list_item", "id": 33, "page_no": 116, "cluster": {"id": 33, "label": "list_item", "bbox": {"l": 135.70877075195312, "t": 639.044921875, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}, "confidence": 0.9117604494094849, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 34, "page_no": 116, "cluster": {"id": 34, "label": "list_item", "bbox": {"l": 135.70849609375, "t": 651.1845703125, "r": 227.56272888183594, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9165326356887817, "cells": [{"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 35, "page_no": 116, "cluster": {"id": 35, "label": "list_item", "bbox": {"l": 135.59637451171875, "t": 662.8261108398438, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}, "confidence": 0.9273440837860107, "cells": [{"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 36, "page_no": 116, "cluster": {"id": 36, "label": "list_item", "bbox": {"l": 135.5303497314453, "t": 675.0317993164062, "r": 276.7511291503906, "b": 685.39522, "coord_origin": "TOPLEFT"}, "confidence": 0.9355826377868652, "cells": [{"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "text", "id": 37, "page_no": 116, "cluster": {"id": 37, "label": "text", "bbox": {"l": 136.2892303466797, "t": 697.2129516601562, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}, "confidence": 0.8819487690925598, "cells": [{"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}]}, "text": "For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at:"}, {"label": "text", "id": 38, "page_no": 116, "cluster": {"id": 38, "label": "text", "bbox": {"l": 136.3297119140625, "t": 713.9354248046875, "r": 546.53442, "b": 736.10556, "coord_origin": "TOPLEFT"}, "confidence": 0.9137188792228699, "cells": [{"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en"}], "body": [{"label": "section_header", "id": 2, "page_no": 116, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 136.48927307128906, "t": 70.64897155761719, "r": 409.46722, "b": 81.03340148925781, "coord_origin": "TOPLEFT"}, "confidence": 0.6312575936317444, "cells": [{"id": 2, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view.", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 409.46722, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 shows the QSYS2.SYSCONTROLS catalog view."}, {"label": "caption", "id": 3, "page_no": 116, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.26973724365234, "t": 245.4910888671875, "r": 197.03440856933594, "b": 254.8696746826172, "coord_origin": "TOPLEFT"}, "confidence": 0.8850163221359253, "cells": [{"id": 3, "text": "Figure 6-20 RCAC and catalogs", "bbox": {"l": 64.800003, "t": 246.19799999999998, "r": 196.89209, "b": 254.52295000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-20 RCAC and catalogs"}, {"label": "text", "id": 4, "page_no": 116, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15829467773438, "t": 271.2189636230469, "r": 430.36699999999996, "b": 281.557861328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8766745924949646, "cells": [{"id": 4, "text": "The SYSCONTROLS catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 272.14868, "r": 430.36699999999996, "b": 281.36169, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLS catalog view contains the following columns:"}, {"label": "list_item", "id": 5, "page_no": 116, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.715576171875, "t": 288.5225830078125, "r": 229.52528381347656, "b": 298.40128, "coord_origin": "TOPLEFT"}, "confidence": 0.9187909364700317, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 289.33768, "r": 141.78, "b": 298.11246, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 289.18829, "r": 228.86325000000002, "b": 298.40128, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 6, "page_no": 116, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.78355407714844, "t": 300.58892822265625, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}, "confidence": 0.9145805835723877, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 301.33749, "r": 141.78, "b": 310.11227, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 301.18811, "r": 231.54153, "b": 310.40109000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 7, "page_no": 116, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8020477294922, "t": 312.4302673339844, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}, "confidence": 0.9202974438667297, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 313.33730999999995, "r": 141.78, "b": 322.11209, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE_TIME", "bbox": {"l": 151.20016, "t": 313.18793, "r": 219.97597, "b": 322.40091, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CREATE_TIME"}, {"label": "list_item", "id": 8, "page_no": 116, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.65097045898438, "t": 324.4266052246094, "r": 190.9705047607422, "b": 334.40073, "coord_origin": "TOPLEFT"}, "confidence": 0.9024768471717834, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 325.33713000000006, "r": 141.78, "b": 334.11190999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENABLE", "bbox": {"l": 151.20016, "t": 325.18774, "r": 190.62184, "b": 334.40073, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENABLE"}, {"label": "list_item", "id": 9, "page_no": 116, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5606231689453, "t": 336.0796813964844, "r": 207.5435791015625, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9086344838142395, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 337.33694, "r": 141.78, "b": 346.11172, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ENFORCED", "bbox": {"l": 151.20016, "t": 337.18756, "r": 207.25305, "b": 346.40054000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ENFORCED"}, {"label": "list_item", "id": 10, "page_no": 116, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.4138946533203, "t": 348.0664367675781, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}, "confidence": 0.9216498136520386, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 349.33676, "r": 141.78, "b": 358.11154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ASP_NUMBER", "bbox": {"l": 151.20016, "t": 349.18738, "r": 220.03371999999996, "b": 358.40036, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ASP_NUMBER"}, {"label": "list_item", "id": 11, "page_no": 116, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.53013610839844, "t": 360.2685852050781, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}, "confidence": 0.908420741558075, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 361.33658, "r": 141.78, "b": 370.11135999999993, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IMPLICIT", "bbox": {"l": 151.20016, "t": 361.18719, "r": 193.41263, "b": 370.40018, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IMPLICIT"}, {"label": "list_item", "id": 12, "page_no": 116, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.5832061767578, "t": 372.1552429199219, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}, "confidence": 0.8999857902526855, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 373.33639999999997, "r": 141.78, "b": 382.11118000000005, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "LABEL", "bbox": {"l": 151.20016, "t": 373.18701, "r": 182.29428, "b": 382.39999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LABEL"}, {"label": "list_item", "id": 13, "page_no": 116, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 135.9365997314453, "t": 384.15179443359375, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9266810417175293, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 385.33621, "r": 141.78, "b": 394.11099, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "LAST_ALTERED", "bbox": {"l": 151.20016, "t": 385.18683, "r": 226.72983, "b": 394.39980999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LAST_ALTERED"}, {"label": "list_item", "id": 14, "page_no": 116, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.55462646484375, "t": 395.8648376464844, "r": 236.96395874023438, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9251843690872192, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.8, "t": 397.33603, "r": 141.78, "b": 406.11081, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "LONG_COMMENT", "bbox": {"l": 151.20016, "t": 397.18665, "r": 236.66890999999998, "b": 406.39963000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH LONG_COMMENT"}, {"label": "list_item", "id": 15, "page_no": 116, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.59799194335938, "t": 408.1325378417969, "r": 213.861328125, "b": 418.39944, "coord_origin": "TOPLEFT"}, "confidence": 0.9111971855163574, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.8, "t": 409.33584999999994, "r": 141.78, "b": 418.11063, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 409.18646, "r": 213.68124, "b": 418.39944, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 16, "page_no": 116, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.62445068359375, "t": 419.9839782714844, "r": 223.28578186035156, "b": 430.39926, "coord_origin": "TOPLEFT"}, "confidence": 0.9163252115249634, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.8, "t": 421.33566, "r": 141.78, "b": 430.11044, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC_OWNER", "bbox": {"l": 151.20016, "t": 421.18628, "r": 222.78268, "b": 430.39926, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_OWNER"}, {"label": "list_item", "id": 17, "page_no": 116, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 135.59918212890625, "t": 431.9518737792969, "r": 227.91741943359375, "b": 442.39908, "coord_origin": "TOPLEFT"}, "confidence": 0.9221100211143494, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.8, "t": 433.33548, "r": 141.78, "b": 442.11026, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 433.1861, "r": 227.54257000000004, "b": 442.39908, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 18, "page_no": 116, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.649658203125, "t": 444.19696044921875, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9048181772232056, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.8, "t": 445.3353, "r": 141.78, "b": 454.11008, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RULETEXT", "bbox": {"l": 151.20016, "t": 445.18591, "r": 202.96228, "b": 454.39889999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RULETEXT"}, {"label": "list_item", "id": 19, "page_no": 116, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.53004455566406, "t": 456.36712646484375, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}, "confidence": 0.9331137537956238, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 457.33511, "r": 141.78, "b": 466.10989, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "SYSTEM_COLUMN_NAME", "bbox": {"l": 151.20016, "t": 457.18573, "r": 275.5697, "b": 466.39871, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_COLUMN_NAME"}, {"label": "list_item", "id": 20, "page_no": 116, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.6468963623047, "t": 467.97235107421875, "r": 263.12493896484375, "b": 478.39853, "coord_origin": "TOPLEFT"}, "confidence": 0.9202753305435181, "cells": [{"id": 35, "text": "GLYPH", "bbox": {"l": 136.8, "t": 469.33493, "r": 141.78, "b": 478.10971, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 469.18555, "r": 262.72827, "b": 478.39853, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 21, "page_no": 116, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.67005920410156, "t": 480.2753601074219, "r": 276.916015625, "b": 490.39835, "coord_origin": "TOPLEFT"}, "confidence": 0.93083256483078, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 481.33475, "r": 141.78, "b": 490.10953, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 481.18536, "r": 276.52487, "b": 490.39835, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "list_item", "id": 22, "page_no": 116, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.68890380859375, "t": 492.2499084472656, "r": 216.28732299804688, "b": 502.39816, "coord_origin": "TOPLEFT"}, "confidence": 0.9164599180221558, "cells": [{"id": 39, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.33456, "r": 141.78, "b": 502.10934, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE_NAME", "bbox": {"l": 151.20016, "t": 493.18518, "r": 216.03579999999997, "b": 502.39816, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_NAME"}, {"label": "list_item", "id": 23, "page_no": 116, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 135.64125061035156, "t": 504.14703369140625, "r": 230.32113647460938, "b": 514.39798, "coord_origin": "TOPLEFT"}, "confidence": 0.9193540215492249, "cells": [{"id": 41, "text": "GLYPH", "bbox": {"l": 136.8, "t": 505.33438, "r": 141.78, "b": 514.10916, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 505.185, "r": 230.00568000000004, "b": 514.39798, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TABLE_SCHEMA"}, {"label": "list_item", "id": 24, "page_no": 116, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 135.58006286621094, "t": 516.2754516601562, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}, "confidence": 0.9276848435401917, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 517.3342, "r": 141.78, "b": 526.10898, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "TBCORRELATION", "bbox": {"l": 151.20016, "t": 517.18481, "r": 235.02153, "b": 526.3978, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TBCORRELATION"}, {"label": "text", "id": 25, "page_no": 116, "cluster": {"id": 25, "label": "text", "bbox": {"l": 136.2348175048828, "t": 538.4920043945312, "r": 451.01199, "b": 548.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.8883419632911682, "cells": [{"id": 45, "text": "The SYSCONTROLSDEP catalog view contains the following columns:", "bbox": {"l": 136.8, "t": 539.20438, "r": 451.01199, "b": 548.41737, "coord_origin": "TOPLEFT"}}]}, "text": "The SYSCONTROLSDEP catalog view contains the following columns:"}, {"label": "list_item", "id": 26, "page_no": 116, "cluster": {"id": 26, "label": "list_item", "bbox": {"l": 135.6955108642578, "t": 554.92236328125, "r": 229.20022583007812, "b": 565.39719, "coord_origin": "TOPLEFT"}, "confidence": 0.9285773634910583, "cells": [{"id": 46, "text": "GLYPH", "bbox": {"l": 136.8, "t": 556.33359, "r": 141.78, "b": 565.10834, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "COLUMN_NAME", "bbox": {"l": 151.20016, "t": 556.1841900000001, "r": 228.86325000000002, "b": 565.39719, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH COLUMN_NAME"}, {"label": "list_item", "id": 27, "page_no": 116, "cluster": {"id": 27, "label": "list_item", "bbox": {"l": 135.7337188720703, "t": 567.2264404296875, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}, "confidence": 0.9127693772315979, "cells": [{"id": 48, "text": "GLYPH", "bbox": {"l": 136.8, "t": 568.33339, "r": 141.78, "b": 577.10814, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CONTROL_TYPE", "bbox": {"l": 151.20016, "t": 568.18399, "r": 231.54153, "b": 577.39699, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CONTROL_TYPE"}, {"label": "list_item", "id": 28, "page_no": 116, "cluster": {"id": 28, "label": "list_item", "bbox": {"l": 135.7036590576172, "t": 579.0064086914062, "r": 223.13241577148438, "b": 589.39679, "coord_origin": "TOPLEFT"}, "confidence": 0.9143235683441162, "cells": [{"id": 50, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.3331900000001, "r": 141.78, "b": 589.10794, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "IASP_NUMBER", "bbox": {"l": 151.20016, "t": 580.18379, "r": 222.81953000000001, "b": 589.39679, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IASP_NUMBER"}, {"label": "list_item", "id": 29, "page_no": 116, "cluster": {"id": 29, "label": "list_item", "bbox": {"l": 135.64175415039062, "t": 590.69970703125, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9129092693328857, "cells": [{"id": 52, "text": "GLYPH", "bbox": {"l": 136.8, "t": 592.33299, "r": 141.78, "b": 601.10774, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "OBJECT_NAME", "bbox": {"l": 151.20016, "t": 592.18359, "r": 225.03064999999998, "b": 601.3965900000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_NAME"}, {"label": "list_item", "id": 30, "page_no": 116, "cluster": {"id": 30, "label": "list_item", "bbox": {"l": 135.65492248535156, "t": 602.8453369140625, "r": 239.2605743408203, "b": 613.39639, "coord_origin": "TOPLEFT"}, "confidence": 0.9242467880249023, "cells": [{"id": 54, "text": "GLYPH", "bbox": {"l": 136.8, "t": 604.3327899999999, "r": 141.78, "b": 613.10754, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "OBJECT_SCHEMA", "bbox": {"l": 151.20016, "t": 604.1834, "r": 238.91888, "b": 613.39639, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_SCHEMA"}, {"label": "list_item", "id": 31, "page_no": 116, "cluster": {"id": 31, "label": "list_item", "bbox": {"l": 135.42955017089844, "t": 614.6676635742188, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9121018648147583, "cells": [{"id": 56, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.3326, "r": 141.78, "b": 625.10735, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "OBJECT_TYPE", "bbox": {"l": 151.20016, "t": 616.1831999999999, "r": 222.27176, "b": 625.3961899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OBJECT_TYPE"}, {"label": "list_item", "id": 32, "page_no": 116, "cluster": {"id": 32, "label": "list_item", "bbox": {"l": 135.63658142089844, "t": 626.9090576171875, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}, "confidence": 0.9265965223312378, "cells": [{"id": 58, "text": "GLYPH", "bbox": {"l": 136.8, "t": 628.3324, "r": 141.78, "b": 637.10715, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "PARM_SIGNATURE", "bbox": {"l": 151.20016, "t": 628.183, "r": 241.48854, "b": 637.396, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH PARM_SIGNATURE"}, {"label": "list_item", "id": 33, "page_no": 116, "cluster": {"id": 33, "label": "list_item", "bbox": {"l": 135.70877075195312, "t": 639.044921875, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}, "confidence": 0.9117604494094849, "cells": [{"id": 60, "text": "GLYPH", "bbox": {"l": 136.8, "t": 640.3322000000001, "r": 141.78, "b": 649.10695, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "RCAC_NAME", "bbox": {"l": 151.20016, "t": 640.1828, "r": 213.68124, "b": 649.3958, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_NAME"}, {"label": "list_item", "id": 34, "page_no": 116, "cluster": {"id": 34, "label": "list_item", "bbox": {"l": 135.70849609375, "t": 651.1845703125, "r": 227.56272888183594, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9165326356887817, "cells": [{"id": 62, "text": "GLYPH", "bbox": {"l": 136.8, "t": 652.332, "r": 141.78, "b": 661.10675, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "RCAC_SCHEMA", "bbox": {"l": 151.20016, "t": 652.1826, "r": 227.54257000000004, "b": 661.3956000000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH RCAC_SCHEMA"}, {"label": "list_item", "id": 35, "page_no": 116, "cluster": {"id": 35, "label": "list_item", "bbox": {"l": 135.59637451171875, "t": 662.8261108398438, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}, "confidence": 0.9273440837860107, "cells": [{"id": 64, "text": "GLYPH", "bbox": {"l": 136.8, "t": 664.33181, "r": 141.78, "b": 673.10657, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "SYSTEM_TABLE_NAME", "bbox": {"l": 151.20016, "t": 664.1824, "r": 262.72827, "b": 673.39541, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_NAME"}, {"label": "list_item", "id": 36, "page_no": 116, "cluster": {"id": 36, "label": "list_item", "bbox": {"l": 135.5303497314453, "t": 675.0317993164062, "r": 276.7511291503906, "b": 685.39522, "coord_origin": "TOPLEFT"}, "confidence": 0.9355826377868652, "cells": [{"id": 66, "text": "GLYPH", "bbox": {"l": 136.8, "t": 676.33162, "r": 141.78, "b": 685.10638, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "SYSTEM_TABLE_SCHEMA", "bbox": {"l": 151.20016, "t": 676.18221, "r": 276.52487, "b": 685.39522, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH SYSTEM_TABLE_SCHEMA"}, {"label": "text", "id": 37, "page_no": 116, "cluster": {"id": 37, "label": "text", "bbox": {"l": 136.2892303466797, "t": 697.2129516601562, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}, "confidence": 0.8819487690925598, "cells": [{"id": 68, "text": "For more information, see the ", "bbox": {"l": 136.8, "t": 698.201782, "r": 270.28992, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "IBM i 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 270.29987, "t": 698.201782, "r": 451.84072999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": ", found at:", "bbox": {"l": 451.79996, "t": 698.201782, "r": 495.94863999999995, "b": 707.414787, "coord_origin": "TOPLEFT"}}]}, "text": "For more information, see the IBM i 7.2 DB2 for i SQL Reference Guide , found at:"}, {"label": "text", "id": 38, "page_no": 116, "cluster": {"id": 38, "label": "text", "bbox": {"l": 136.3297119140625, "t": 713.9354248046875, "r": 546.53442, "b": 736.10556, "coord_origin": "TOPLEFT"}, "confidence": 0.9137188792228699, "cells": [{"id": 71, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang", "bbox": {"l": 136.80002, "t": 715.330994, "r": 546.53442, "b": 724.105751, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "=en", "bbox": {"l": 136.80002, "t": 727.3308030000001, "r": 151.74002, "b": 736.10556, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?lang =en"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 116, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6695251464844, "t": 754.8765258789062, "r": 517.96918, "b": 763.8857421875, "coord_origin": "TOPLEFT"}, "confidence": 0.947565495967865, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 116, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.2025146484375, "t": 754.233154296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9223108291625977, "cells": [{"id": 1, "text": "101", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "101"}]}}, {"page_no": 117, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.45819091796875, "t": 754.2963256835938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219294190406799, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.59468078613281, "t": 754.6023559570312, "r": 339.92059326171875, "b": 764.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9517812728881836, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.48343658447266, "t": 69.85620880126953, "r": 524.18311, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.951751172542572, "cells": [{"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83413696289062, "t": 121.24685668945312, "r": 538.62842, "b": 143.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9707952737808228, "cells": [{"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.00408935546875, "t": 163.15185546875, "r": 137.59872436523438, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9475746154785156, "cells": [{"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.95098876953125, "t": 189.26473999023438, "r": 547.26752, "b": 247.95785522460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9861626029014587, "cells": [{"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "caption", "bbox": {"l": 136.1767120361328, "t": 532.8250122070312, "r": 311.7160949707031, "b": 542.2582397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9393132328987122, "cells": [{"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 136.61915588378906, "t": 262.3319396972656, "r": 491.90362548828125, "b": 529.945556640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9785625338554382, "cells": [{"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 117, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45819091796875, "t": 754.2963256835938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219294190406799, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "102"}, {"label": "page_footer", "id": 1, "page_no": 117, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59468078613281, "t": 754.6023559570312, "r": 339.92059326171875, "b": 764.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9517812728881836, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 117, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.48343658447266, "t": 69.85620880126953, "r": 524.18311, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.951751172542572, "cells": [{"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC"}, {"label": "text", "id": 3, "page_no": 117, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83413696289062, "t": 121.24685668945312, "r": 538.62842, "b": 143.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9707952737808228, "cells": [{"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table."}, {"label": "section_header", "id": 4, "page_no": 117, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.00408935546875, "t": 163.15185546875, "r": 137.59872436523438, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9475746154785156, "cells": [{"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.1 Views"}, {"label": "text", "id": 5, "page_no": 117, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.95098876953125, "t": 189.26473999023438, "r": 547.26752, "b": 247.95785522460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9861626029014587, "cells": [{"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query."}, {"label": "caption", "id": 6, "page_no": 117, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1767120361328, "t": 532.8250122070312, "r": 311.7160949707031, "b": 542.2582397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9393132328987122, "cells": [{"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-21 View definition and user query"}, {"label": "picture", "id": 7, "page_no": 117, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.61915588378906, "t": 262.3319396972656, "r": 491.90362548828125, "b": 529.945556640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9785625338554382, "cells": [{"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 117, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.48343658447266, "t": 69.85620880126953, "r": 524.18311, "b": 104.94421, "coord_origin": "TOPLEFT"}, "confidence": 0.951751172542572, "cells": [{"id": 2, "text": "6.5", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.239647, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Views, materialized query tables, and query rewrite with ", "bbox": {"l": 91.727562, "t": 71.22069999999997, "r": 524.18311, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 110.31155000000001, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "6.5 Views, materialized query tables, and query rewrite with RCAC"}, {"label": "text", "id": 3, "page_no": 117, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83413696289062, "t": 121.24685668945312, "r": 538.62842, "b": 143.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9707952737808228, "cells": [{"id": 5, "text": "This section covers the implications to views, materialized query tables (MQTs), and query ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 538.62842, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rewrite when RCAC is activated on a table.", "bbox": {"l": 136.8, "t": 134.50847999999996, "r": 325.84781, "b": 143.7215, "coord_origin": "TOPLEFT"}}]}, "text": "This section covers the implications to views, materialized query tables (MQTs), and query rewrite when RCAC is activated on a table."}, {"label": "section_header", "id": 4, "page_no": 117, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.00408935546875, "t": 163.15185546875, "r": 137.59872436523438, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9475746154785156, "cells": [{"id": 7, "text": "6.5.1", "bbox": {"l": 64.800003, "t": 164.33471999999995, "r": 95.074188, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Views", "bbox": {"l": 98.858459, "t": 164.33471999999995, "r": 137.44987, "b": 176.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.1 Views"}, {"label": "text", "id": 5, "page_no": 117, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.95098876953125, "t": 189.26473999023438, "r": 547.26752, "b": 247.95785522460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9861626029014587, "cells": [{"id": 9, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those ", "bbox": {"l": 136.8, "t": 190.48870999999997, "r": 544.74371, "b": 199.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "row permissions and column masking rules applied. If an SQL view has predicates, those are ", "bbox": {"l": 136.8, "t": 202.48852999999997, "r": 547.26752, "b": 211.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "logically ANDed with any search condition that is specified in the permissions that are defined ", "bbox": {"l": 136.8, "t": 214.48834, "r": 547.23859, "b": 223.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "on the underlying tables. The view does not have to project the columns that are referenced ", "bbox": {"l": 136.80002, "t": 226.48816, "r": 543.3761, "b": 235.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "by the permissions. Figure 6-21 shows an example of a view definition and user query.", "bbox": {"l": 136.80002, "t": 238.48798, "r": 518.17145, "b": 247.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Any access to an SQL view that is over one or more tables that have RCAC also have those row permissions and column masking rules applied. If an SQL view has predicates, those are logically ANDed with any search condition that is specified in the permissions that are defined on the underlying tables. The view does not have to project the columns that are referenced by the permissions. Figure 6-21 shows an example of a view definition and user query."}, {"label": "caption", "id": 6, "page_no": 117, "cluster": {"id": 6, "label": "caption", "bbox": {"l": 136.1767120361328, "t": 532.8250122070312, "r": 311.7160949707031, "b": 542.2582397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9393132328987122, "cells": [{"id": 14, "text": "Figure 6-21 View definition and user query", "bbox": {"l": 136.8, "t": 533.53799, "r": 310.7493, "b": 541.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-21 View definition and user query"}, {"label": "picture", "id": 7, "page_no": 117, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 136.61915588378906, "t": 262.3319396972656, "r": 491.90362548828125, "b": 529.945556640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9785625338554382, "cells": [{"id": 15, "text": "SELECT *", "bbox": {"l": 221.75999, "t": 415.785, "r": 263.2117, "b": 426.76498, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "FROM", "bbox": {"l": 221.75999, "t": 435.58524, "r": 249.27039, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 257.76453, "t": 435.58524, "r": 377.16104, "b": 446.56522, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 221.75999, "t": 455.38547, "r": 373.84509, "b": 466.36545, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 149.75999, "t": 282.10501, "r": 342.65335, "b": 293.08499, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 185.76012, "t": 301.90524, "r": 315.43719, "b": 312.88522, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 221.76024, "t": 321.70547, "r": 361.79144, "b": 332.6854599999999, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "FROM", "bbox": {"l": 185.76012, "t": 341.50570999999997, "r": 213.24416, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ACCOUNTS A", "bbox": {"l": 221.74707, "t": 341.50570999999997, "r": 280.42856, "b": 352.4856899999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 185.76012, "t": 361.30593999999996, "r": 389.11301, "b": 372.28592, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Note", "bbox": {"l": 180.12, "t": 492.88498, "r": 200.53775, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 200.51971, "t": 492.88498, "r": 435.52273999999994, "b": 502.905, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "based the user\u2019s group and CUSTOMER_ID value", "bbox": {"l": 209.7, "t": 504.88498, "r": 405.92563, "b": 514.905, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 117, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45819091796875, "t": 754.2963256835938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219294190406799, "cells": [{"id": 0, "text": "102 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "102"}, {"label": "page_footer", "id": 1, "page_no": 117, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59468078613281, "t": 754.6023559570312, "r": 339.92059326171875, "b": 764.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9517812728881836, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 118, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.6492004394531, "t": 754.8782348632812, "r": 517.96918, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9510338306427002, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1799926757812, "t": 754.2610473632812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9243813157081604, "cells": [{"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9568634033203, "t": 70.61416625976562, "r": 519.47528, "b": 93.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9543677568435669, "cells": [{"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.89744567871094, "t": 390.0194091796875, "r": 291.39215087890625, "b": 399.5681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9462981820106506, "cells": [{"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.23944091796875, "t": 418.5478515625, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}, "confidence": 0.9655659198760986, "cells": [{"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8983154296875, "t": 444.7919921875, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}, "confidence": 0.982417643070221, "cells": [{"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.05838012695312, "t": 490.664794921875, "r": 547.28455, "b": 525.02054, "coord_origin": "TOPLEFT"}, "confidence": 0.9831634163856506, "cells": [{"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.96612548828125, "t": 536.773193359375, "r": 547.27246, "b": 571.03972, "coord_origin": "TOPLEFT"}, "confidence": 0.9812561869621277, "cells": [{"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.03353881835938, "t": 582.82958984375, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}, "confidence": 0.9185956120491028, "cells": [{"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 136.65509033203125, "t": 600.0938720703125, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}, "confidence": 0.708869218826294, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 151.20018, "t": 617.95531, "r": 547.25555, "b": 674.72928, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 136.2811279296875, "t": 106.85755920410156, "r": 508.5420227050781, "b": 388.0796203613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9733899235725403, "cells": [{"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 118, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6492004394531, "t": 754.8782348632812, "r": 517.96918, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9510338306427002, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 118, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1799926757812, "t": 754.2610473632812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9243813157081604, "cells": [{"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "103"}, {"label": "text", "id": 2, "page_no": 118, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9568634033203, "t": 70.61416625976562, "r": 519.47528, "b": 93.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9543677568435669, "cells": [{"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22."}, {"label": "caption", "id": 3, "page_no": 118, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.89744567871094, "t": 390.0194091796875, "r": 291.39215087890625, "b": 399.5681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9462981820106506, "cells": [{"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-22 Query rewrite with RCAC"}, {"label": "section_header", "id": 4, "page_no": 118, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.23944091796875, "t": 418.5478515625, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}, "confidence": 0.9655659198760986, "cells": [{"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.2 Materialized query tables"}, {"label": "text", "id": 5, "page_no": 118, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8983154296875, "t": 444.7919921875, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}, "confidence": 0.982417643070221, "cells": [{"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}]}, "text": "When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data."}, {"label": "text", "id": 6, "page_no": 118, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.05838012695312, "t": 490.664794921875, "r": 547.28455, "b": 525.02054, "coord_origin": "TOPLEFT"}, "confidence": 0.9831634163856506, "cells": [{"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}]}, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried."}, {"label": "text", "id": 7, "page_no": 118, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.96612548828125, "t": 536.773193359375, "r": 547.27246, "b": 571.03972, "coord_origin": "TOPLEFT"}, "confidence": 0.9812561869621277, "cells": [{"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}]}, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks."}, {"label": "text", "id": 8, "page_no": 118, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.03353881835938, "t": 582.82958984375, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}, "confidence": 0.9185956120491028, "cells": [{"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}]}, "text": "The following example illustrates this scenario:"}, {"label": "list_item", "id": 9, "page_no": 118, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.65509033203125, "t": 600.0938720703125, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}, "confidence": 0.708869218826294, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create schema and tables:"}, {"label": "text", "id": 10, "page_no": 118, "cluster": {"id": 10, "label": "text", "bbox": {"l": 151.20018, "t": 617.95531, "r": 547.25555, "b": 674.72928, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);"}, {"label": "picture", "id": 11, "page_no": 118, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.2811279296875, "t": 106.85755920410156, "r": 508.5420227050781, "b": 388.0796203613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9733899235725403, "cells": [{"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 118, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9568634033203, "t": 70.61416625976562, "r": 519.47528, "b": 93.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9543677568435669, "cells": [{"id": 2, "text": "What the query optimizer plans for and what the database engine runs is shown in the ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 519.47528, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 6-22.", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 190.73257, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What the query optimizer plans for and what the database engine runs is shown in the Figure 6-22."}, {"label": "caption", "id": 3, "page_no": 118, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.89744567871094, "t": 390.0194091796875, "r": 291.39215087890625, "b": 399.5681457519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9462981820106506, "cells": [{"id": 4, "text": "Figure 6-22 Query rewrite with RCAC", "bbox": {"l": 136.8, "t": 390.798, "r": 290.5614, "b": 399.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-22 Query rewrite with RCAC"}, {"label": "section_header", "id": 4, "page_no": 118, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.23944091796875, "t": 418.5478515625, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}, "confidence": 0.9655659198760986, "cells": [{"id": 5, "text": "6.5.2", "bbox": {"l": 64.800003, "t": 419.63474, "r": 94.26078, "b": 431.62271, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Materialized query tables", "bbox": {"l": 97.943375, "t": 419.63474, "r": 255.487, "b": 431.62271, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.2 Materialized query tables"}, {"label": "text", "id": 5, "page_no": 118, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8983154296875, "t": 444.7919921875, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}, "confidence": 0.982417643070221, "cells": [{"id": 7, "text": "When the query to populate a materialized query table (MQT) is run by the system on either ", "bbox": {"l": 136.8, "t": 445.78873, "r": 544.90387, "b": 455.00171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "the create table or a refresh table, and one or more source tables have RCAC defined, the ", "bbox": {"l": 136.8, "t": 457.78853999999995, "r": 536.97687, "b": 467.00153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "row permissions and column masks are ignored. This means that the MQT has all of the data.", "bbox": {"l": 136.8, "t": 469.78836, "r": 547.27844, "b": 479.00134, "coord_origin": "TOPLEFT"}}]}, "text": "When the query to populate a materialized query table (MQT) is run by the system on either the create table or a refresh table, and one or more source tables have RCAC defined, the row permissions and column masks are ignored. This means that the MQT has all of the data."}, {"label": "text", "id": 6, "page_no": 118, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.05838012695312, "t": 490.664794921875, "r": 547.28455, "b": 525.02054, "coord_origin": "TOPLEFT"}, "confidence": 0.9831634163856506, "cells": [{"id": 10, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base ", "bbox": {"l": 136.8, "t": 491.80792, "r": 547.28455, "b": 501.0209, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table, all the related MQTs are altered to have a default row permission. This default ", "bbox": {"l": 136.8, "t": 503.80774, "r": 509.82686999999993, "b": 513.02072, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "permission prevents any of the rows from being directly queried.", "bbox": {"l": 136.8, "t": 515.80756, "r": 419.78342, "b": 525.02054, "coord_origin": "TOPLEFT"}}]}, "text": "Because the MQT is a copy of the base table data, when a permission is created on the base table, all the related MQTs are altered to have a default row permission. This default permission prevents any of the rows from being directly queried."}, {"label": "text", "id": 7, "page_no": 118, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.96612548828125, "t": 536.773193359375, "r": 547.27246, "b": 571.03972, "coord_origin": "TOPLEFT"}, "confidence": 0.9812561869621277, "cells": [{"id": 13, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are ", "bbox": {"l": 136.8, "t": 537.82712, "r": 547.27246, "b": 547.04012, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "built into the query that uses the MQT. In order for the MQT to be used for optimization, the ", "bbox": {"l": 136.8, "t": 549.82692, "r": 540.15295, "b": 559.0399199999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "MQT must include any columns that are used by the row permissions and column masks.", "bbox": {"l": 136.8, "t": 561.82672, "r": 531.36346, "b": 571.03972, "coord_origin": "TOPLEFT"}}]}, "text": "When a query implicitly uses an MQT, the underlying row permissions and column masks are built into the query that uses the MQT. In order for the MQT to be used for optimization, the MQT must include any columns that are used by the row permissions and column masks."}, {"label": "text", "id": 8, "page_no": 118, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.03353881835938, "t": 582.82958984375, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}, "confidence": 0.9185956120491028, "cells": [{"id": 16, "text": "The following example illustrates this scenario:", "bbox": {"l": 136.8, "t": 583.78653, "r": 342.15033, "b": 592.99953, "coord_origin": "TOPLEFT"}}]}, "text": "The following example illustrates this scenario:"}, {"label": "list_item", "id": 9, "page_no": 118, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.65509033203125, "t": 600.0938720703125, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}, "confidence": 0.708869218826294, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 600.8261, "r": 145.33115, "b": 610.03909, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Create schema and tables:", "bbox": {"l": 148.17487, "t": 600.8261, "r": 270.41348, "b": 610.03909, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create schema and tables:"}, {"label": "text", "id": 10, "page_no": 118, "cluster": {"id": 10, "label": "text", "bbox": {"l": 151.20018, "t": 617.95531, "r": 547.25555, "b": 674.72928, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 19, "text": "CREATE SCHEMA Schema1; ", "bbox": {"l": 151.20018, "t": 617.95531, "r": 266.09869, "b": 626.73006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid ", "bbox": {"l": 151.20018, "t": 629.95511, "r": 547.25555, "b": 638.72986, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "integer); ", "bbox": {"l": 151.20018, "t": 641.95491, "r": 201.11969, "b": 650.72966, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), ", "bbox": {"l": 151.20018, "t": 653.95471, "r": 531.05463, "b": 662.72946, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);", "bbox": {"l": 151.20018, "t": 665.95452, "r": 446.03607000000005, "b": 674.72928, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA Schema1; CREATE TABLE Schema1.employee(userID varchar(128), LocationID integer, Regionid integer); CREATE TABLE Schema1.Sales (INVOICE INTEGER NOT NULL, SALEAMT DECIMAL(5,2), TAXAMT DECIMAL(5,2), LOCATIONID INTEGER, REGIONID INTEGER);"}, {"label": "picture", "id": 11, "page_no": 118, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.2811279296875, "t": 106.85755920410156, "r": 508.5420227050781, "b": 388.0796203613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9733899235725403, "cells": [{"id": 24, "text": "CREATE VIEW OPEN_ACCOUNTS_VIEW AS (", "bbox": {"l": 154.0657, "t": 131.60051999999996, "r": 351.96384, "b": 141.26044000000002, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT ACCOUNT_NUMBER,", "bbox": {"l": 191.0079, "t": 151.91881999999998, "r": 324.31876, "b": 161.57874000000004, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACCOUNT_CURRENT_BALANCE", "bbox": {"l": 227.95076, "t": 172.23748999999998, "r": 371.7757, "b": 181.89739999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "FROM", "bbox": {"l": 191.0079, "t": 192.55535999999995, "r": 219.33701999999997, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ACCOUNTS A", "bbox": {"l": 227.93269000000004, "t": 192.55535999999995, "r": 288.18939, "b": 202.21527000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "WHERE A. ACCOUNT_DATE_CLOSED IS NULL) ", "bbox": {"l": 191.0079, "t": 212.87401999999997, "r": 399.53876, "b": 222.53394000000003, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT *", "bbox": {"l": 227.95019999999997, "t": 268.74872000000005, "r": 270.48792, "b": 278.40863, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "FROM", "bbox": {"l": 227.95019999999997, "t": 289.06738000000007, "r": 256.2793, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "OPEN_ACCOUNTS_VIEW A", "bbox": {"l": 264.87497, "t": 289.06738000000007, "r": 387.39151, "b": 298.72736, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "WHERE A.ACCOUNT_NUMBER = ?", "bbox": {"l": 227.95019999999997, "t": 309.38522, "r": 384.06647, "b": 319.0452, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Note", "bbox": {"l": 185.2511, "t": 347.86838000000006, "r": 206.08113, "b": 356.64368, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": ": PERMISSION1_ON_ACCOUNTS allows access to the row", "bbox": {"l": 206.0927, "t": 347.86838000000006, "r": 447.3443, "b": 356.63342, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "based the user\u0092s group and CUSTOMER_ID value", "bbox": {"l": 215.69733, "t": 360.18246000000005, "r": 416.87384, "b": 368.9475100000001, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 118, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6492004394531, "t": 754.8782348632812, "r": 517.96918, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9510338306427002, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 118, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1799926757812, "t": 754.2610473632812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9243813157081604, "cells": [{"id": 1, "text": "103", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "103"}]}}, {"page_no": 119, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.42345428466797, "t": 754.3500366210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9201931953430176, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.57719421386719, "t": 754.6668090820312, "r": 339.839599609375, "b": 764.0997924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948181688785553, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.87754821777344, "t": 70.59613037109375, "r": 545.86609, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8737232089042664, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 149.48439025878906, "t": 98.91398620605469, "r": 547.19574, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.7315705418586731, "cells": [{"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.09523010253906, "t": 200.49166870117188, "r": 362.02145, "b": 210.96173095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7428785562515259, "cells": [{"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 149.7567138671875, "t": 217.29092407226562, "r": 545.99457, "b": 323.42908, "coord_origin": "TOPLEFT"}, "confidence": 0.7042393684387207, "cells": [{"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.95851135253906, "t": 330.4781494140625, "r": 354.34628, "b": 341.0965881347656, "coord_origin": "TOPLEFT"}, "confidence": 0.7467354536056519, "cells": [{"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 150.7456512451172, "t": 348.16949462890625, "r": 416.03656, "b": 370.27532958984375, "coord_origin": "TOPLEFT"}, "confidence": 0.698642373085022, "cells": [{"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.36888122558594, "t": 376.5781555175781, "r": 547.19977, "b": 399.09686279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8833680748939514, "cells": [{"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 150.5345001220703, "t": 405.3749084472656, "r": 401.03677, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.7805010676383972, "cells": [{"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.50941467285156, "t": 434.431884765625, "r": 385.90356, "b": 444.9353942871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7377039194107056, "cells": [{"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 150.02435302734375, "t": 451.1933288574219, "r": 500.9953300000001, "b": 545.42557, "coord_origin": "TOPLEFT"}, "confidence": 0.8073603510856628, "cells": [{"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 136.33966064453125, "t": 552.5261840820312, "r": 452.10781999999995, "b": 563.1635131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.7632867097854614, "cells": [{"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.35263061523438, "t": 569.8162841796875, "r": 535.97479, "b": 592.6467895507812, "coord_origin": "TOPLEFT"}, "confidence": 0.8625366687774658, "cells": [{"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 150.33642578125, "t": 598.5096435546875, "r": 502.06903, "b": 620.71321, "coord_origin": "TOPLEFT"}, "confidence": 0.9041882157325745, "cells": [{"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 150.63597106933594, "t": 628.1326293945312, "r": 401.03677, "b": 649.8663940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.8543345332145691, "cells": [{"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 119, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42345428466797, "t": 754.3500366210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9201931953430176, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "104"}, {"label": "page_footer", "id": 1, "page_no": 119, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57719421386719, "t": 754.6668090820312, "r": 339.839599609375, "b": 764.0997924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948181688785553, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 119, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87754821777344, "t": 70.59613037109375, "r": 545.86609, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8737232089042664, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Create a row permission that allows the employees to see only rows from the region they work in:"}, {"label": "code", "id": 3, "page_no": 119, "cluster": {"id": 3, "label": "code", "bbox": {"l": 149.48439025878906, "t": 98.91398620605469, "r": 547.19574, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.7315705418586731, "cells": [{"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}]}, "text": "/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE;"}, {"label": "list_item", "id": 4, "page_no": 119, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.09523010253906, "t": 200.49166870117188, "r": 362.02145, "b": 210.96173095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7428785562515259, "cells": [{"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}]}, "text": "3. Create an MQT to summarize sales by location:"}, {"label": "text", "id": 5, "page_no": 119, "cluster": {"id": 5, "label": "text", "bbox": {"l": 149.7567138671875, "t": 217.29092407226562, "r": 545.99457, "b": 323.42908, "coord_origin": "TOPLEFT"}, "confidence": 0.7042393684387207, "cells": [{"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}]}, "text": "-- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 6, "page_no": 119, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.95851135253906, "t": 330.4781494140625, "r": 354.34628, "b": 341.0965881347656, "coord_origin": "TOPLEFT"}, "confidence": 0.7467354536056519, "cells": [{"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4. Populate the MQT (permission is not applied):"}, {"label": "text", "id": 7, "page_no": 119, "cluster": {"id": 7, "label": "text", "bbox": {"l": 150.7456512451172, "t": 348.16949462890625, "r": 416.03656, "b": 370.27532958984375, "coord_origin": "TOPLEFT"}, "confidence": 0.698642373085022, "cells": [{"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT"}, {"label": "text", "id": 8, "page_no": 119, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.36888122558594, "t": 376.5781555175781, "r": 547.19977, "b": 399.09686279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8833680748939514, "cells": [{"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 9, "page_no": 119, "cluster": {"id": 9, "label": "text", "bbox": {"l": 150.5345001220703, "t": 405.3749084472656, "r": 401.03677, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.7805010676383972, "cells": [{"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}, {"label": "list_item", "id": 10, "page_no": 119, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.50941467285156, "t": 434.431884765625, "r": 385.90356, "b": 444.9353942871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7377039194107056, "cells": [{"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an MQT to summarize by region and location:"}, {"label": "text", "id": 11, "page_no": 119, "cluster": {"id": 11, "label": "text", "bbox": {"l": 150.02435302734375, "t": 451.1933288574219, "r": 500.9953300000001, "b": 545.42557, "coord_origin": "TOPLEFT"}, "confidence": 0.8073603510856628, "cells": [{"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}]}, "text": "-- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 12, "page_no": 119, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 136.33966064453125, "t": 552.5261840820312, "r": 452.10781999999995, "b": 563.1635131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.7632867097854614, "cells": [{"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}]}, "text": "6. Populate the Region_location_Sales_MQT (permission not applied):"}, {"label": "text", "id": 13, "page_no": 119, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35263061523438, "t": 569.8162841796875, "r": 535.97479, "b": 592.6467895507812, "coord_origin": "TOPLEFT"}, "confidence": 0.8625366687774658, "cells": [{"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT"}, {"label": "text", "id": 14, "page_no": 119, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.33642578125, "t": 598.5096435546875, "r": 502.06903, "b": 620.71321, "coord_origin": "TOPLEFT"}, "confidence": 0.9041882157325745, "cells": [{"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}]}, "text": "The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 15, "page_no": 119, "cluster": {"id": 15, "label": "text", "bbox": {"l": 150.63597106933594, "t": 628.1326293945312, "r": 401.03677, "b": 649.8663940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.8543345332145691, "cells": [{"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}], "body": [{"label": "list_item", "id": 2, "page_no": 119, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.87754821777344, "t": 70.59613037109375, "r": 545.86609, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8737232089042664, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.18584, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create a row permission that allows the employees to see only rows from the region they ", "bbox": {"l": 147.98111, "t": 71.50867000000005, "r": 545.86609, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "work in:", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 185.53629, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Create a row permission that allows the employees to see only rows from the region they work in:"}, {"label": "code", "id": 3, "page_no": 119, "cluster": {"id": 3, "label": "code", "bbox": {"l": 149.48439025878906, "t": 98.91398620605469, "r": 547.19574, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.7315705418586731, "cells": [{"id": 5, "text": "/* Create permission that only allows the employees to see rows from the region ", "bbox": {"l": 151.20016, "t": 100.6377, "r": 547.19574, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "they work in */ ", "bbox": {"l": 151.20016, "t": 112.63751000000002, "r": 231.17896, "b": 121.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "CREATE PERMISSION Schema1.Sales_PERM1 ", "bbox": {"l": 151.20016, "t": 124.6373299999999, "r": 341.0975, "b": 133.41210999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ON schema1.sales FOR ROWS ", "bbox": {"l": 151.20016, "t": 136.63715000000002, "r": 286.07846, "b": 145.41192999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E ", "bbox": {"l": 151.20016, "t": 148.63696000000004, "r": 455.99606, "b": 157.41174, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "WHERE", "bbox": {"l": 151.20016, "t": 160.63678000000004, "r": 176.17984, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "e.regionid = regionid) ", "bbox": {"l": 186.17171, "t": 160.63678000000004, "r": 301.07822, "b": 169.41156, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "ENFORCED FOR ALL ", "bbox": {"l": 151.20016, "t": 172.63660000000004, "r": 236.15893999999997, "b": 181.41138, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ACCESS ENABLE;", "bbox": {"l": 151.20016, "t": 184.63640999999996, "r": 221.15918, "b": 193.41119000000003, "coord_origin": "TOPLEFT"}}]}, "text": "/* Create permission that only allows the employees to see rows from the region they work in */ CREATE PERMISSION Schema1.Sales_PERM1 ON schema1.sales FOR ROWS WHERE CURRENT_USER in (SELECT userId FROM schema1.employee E WHERE e.regionid = regionid) ENFORCED FOR ALL ACCESS ENABLE;"}, {"label": "list_item", "id": 4, "page_no": 119, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.09523010253906, "t": 200.49166870117188, "r": 362.02145, "b": 210.96173095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7428785562515259, "cells": [{"id": 14, "text": "3.", "bbox": {"l": 136.8, "t": 201.52655000000004, "r": 145.2496, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create an MQT to summarize sales by location:", "bbox": {"l": 148.06615, "t": 201.52655000000004, "r": 362.02145, "b": 210.73955999999998, "coord_origin": "TOPLEFT"}}]}, "text": "3. Create an MQT to summarize sales by location:"}, {"label": "text", "id": 5, "page_no": 119, "cluster": {"id": 5, "label": "text", "bbox": {"l": 149.7567138671875, "t": 217.29092407226562, "r": 545.99457, "b": 323.42908, "coord_origin": "TOPLEFT"}, "confidence": 0.7042393684387207, "cells": [{"id": 16, "text": "-- Create MQT to summarize sales by location", "bbox": {"l": 151.20016, "t": 218.65576, "r": 371.03726, "b": 227.43053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-- This has all of the data. The schema1.sales_perm1 predicate was not applied ", "bbox": {"l": 151.20016, "t": 230.65558, "r": 545.99457, "b": 239.43035999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE Schema1.Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 242.6554, "r": 366.05728, "b": 251.43017999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 254.65521, "r": 451.01605, "b": 263.42999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "FROM SCHEMA1.SALES ", "bbox": {"l": 151.20016, "t": 266.65503, "r": 246.11894, "b": 275.42981, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GROUP BY LOCATIONID)", "bbox": {"l": 151.20016, "t": 278.65485, "r": 251.09894999999997, "b": 287.42963, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 290.65466, "r": 266.09869, "b": 299.42944000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 302.65448, "r": 231.11919, "b": 311.42926, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 314.6543, "r": 251.09893999999997, "b": 323.42908, "coord_origin": "TOPLEFT"}}]}, "text": "-- Create MQT to summarize sales by location -- This has all of the data. The schema1.sales_perm1 predicate was not applied CREATE TABLE Schema1.Location_Sales_MQT as AS (SELECT LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 6, "page_no": 119, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.95851135253906, "t": 330.4781494140625, "r": 354.34628, "b": 341.0965881347656, "coord_origin": "TOPLEFT"}, "confidence": 0.7467354536056519, "cells": [{"id": 25, "text": "4.", "bbox": {"l": 136.8, "t": 331.48471, "r": 145.25726, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Populate the MQT (permission is not applied):", "bbox": {"l": 148.07635, "t": 331.48471, "r": 354.34628, "b": 340.69768999999997, "coord_origin": "TOPLEFT"}}]}, "text": "4. Populate the MQT (permission is not applied):"}, {"label": "text", "id": 7, "page_no": 119, "cluster": {"id": 7, "label": "text", "bbox": {"l": 150.7456512451172, "t": 348.16949462890625, "r": 416.03656, "b": 370.27532958984375, "coord_origin": "TOPLEFT"}, "confidence": 0.698642373085022, "cells": [{"id": 27, "text": "/* Populate the MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 348.67368000000005, "r": 416.03656, "b": 357.44845999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "REFRESH TABLE Schema1.Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 360.67349, "r": 356.03751, "b": 369.44827, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the MQT - Permission not applied here */ REFRESH TABLE Schema1.Location_Sales_MQT"}, {"label": "text", "id": 8, "page_no": 119, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.36888122558594, "t": 376.5781555175781, "r": 547.19977, "b": 399.09686279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8833680748939514, "cells": [{"id": 29, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does ", "bbox": {"l": 151.20016, "t": 377.50391, "r": 547.19977, "b": 386.71689, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "not have column regionid, which is needed by the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 389.50371999999993, "r": 533.10944, "b": 398.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "The following query matches Location_Sales_MQT, but it cannot be used because it does not have column regionid, which is needed by the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 9, "page_no": 119, "cluster": {"id": 9, "label": "text", "bbox": {"l": 150.5345001220703, "t": 405.3749084472656, "r": 401.03677, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.7805010676383972, "cells": [{"id": 31, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20016, "t": 406.63290000000006, "r": 401.03677, "b": 415.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GROUP BY locationid; ", "bbox": {"l": 151.20016, "t": 418.63272, "r": 256.19846, "b": 427.4075000000001, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}, {"label": "list_item", "id": 10, "page_no": 119, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.50941467285156, "t": 434.431884765625, "r": 385.90356, "b": 444.9353942871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7377039194107056, "cells": [{"id": 33, "text": "5.", "bbox": {"l": 136.8, "t": 435.52292, "r": 145.23802, "b": 444.7359, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Create an MQT to summarize by region and location:", "bbox": {"l": 148.05069, "t": 435.52292, "r": 385.90356, "b": 444.7359, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an MQT to summarize by region and location:"}, {"label": "text", "id": 11, "page_no": 119, "cluster": {"id": 11, "label": "text", "bbox": {"l": 150.02435302734375, "t": 451.1933288574219, "r": 500.9953300000001, "b": 545.42557, "coord_origin": "TOPLEFT"}, "confidence": 0.8073603510856628, "cells": [{"id": 35, "text": "-- MQT to summarize by region and location ", "bbox": {"l": 151.20016, "t": 452.6521, "r": 366.11707, "b": 461.42688, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Create table schema1.Region_Location_Sales_MQT as ", "bbox": {"l": 151.20016, "t": 464.65192, "r": 401.09653, "b": 473.4267, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales ", "bbox": {"l": 151.20016, "t": 476.65173, "r": 500.9953300000001, "b": 485.42651, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "FROM SCHEMA1.SALES", "bbox": {"l": 151.20016, "t": 488.65155, "r": 241.13895, "b": 497.42633, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GROUP BY REGIONID, LOCATIONID)", "bbox": {"l": 151.20016, "t": 500.65137, "r": 301.07822, "b": 509.42615, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "DATA INITIALLY DEFERRED", "bbox": {"l": 151.20016, "t": 512.6511800000001, "r": 266.09869, "b": 521.42596, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "REFRESH DEFERRED", "bbox": {"l": 151.20016, "t": 524.6510000000001, "r": 231.11919, "b": 533.42578, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "MAINTAINED BY USER; ", "bbox": {"l": 151.20016, "t": 536.65082, "r": 251.09893999999997, "b": 545.42557, "coord_origin": "TOPLEFT"}}]}, "text": "-- MQT to summarize by region and location Create table schema1.Region_Location_Sales_MQT as AS (SELECT REGIONID, LocationID, SUM(Saleamt) as Total_Location_Sales FROM SCHEMA1.SALES GROUP BY REGIONID, LOCATIONID) DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER;"}, {"label": "list_item", "id": 12, "page_no": 119, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 136.33966064453125, "t": 552.5261840820312, "r": 452.10781999999995, "b": 563.1635131835938, "coord_origin": "TOPLEFT"}, "confidence": 0.7632867097854614, "cells": [{"id": 43, "text": "6.", "bbox": {"l": 136.8, "t": 553.54099, "r": 145.2187, "b": 562.75398, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Populate the Region_location_Sales_MQT (permission not applied):", "bbox": {"l": 148.02496, "t": 553.54099, "r": 452.10781999999995, "b": 562.75398, "coord_origin": "TOPLEFT"}}]}, "text": "6. Populate the Region_location_Sales_MQT (permission not applied):"}, {"label": "text", "id": 13, "page_no": 119, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35263061523438, "t": 569.8162841796875, "r": 535.97479, "b": 592.6467895507812, "coord_origin": "TOPLEFT"}, "confidence": 0.8625366687774658, "cells": [{"id": 45, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ ", "bbox": {"l": 151.20016, "t": 570.6702, "r": 535.97479, "b": 579.4449500000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Refresh table schema1.Region_Location_Sales_MQT ", "bbox": {"l": 151.20016, "t": 582.67, "r": 391.07678, "b": 591.44475, "coord_origin": "TOPLEFT"}}]}, "text": "/* Populate the Region_location_Sales_MQT - Permission not applied here */ Refresh table schema1.Region_Location_Sales_MQT"}, {"label": "text", "id": 14, "page_no": 119, "cluster": {"id": 14, "label": "text", "bbox": {"l": 150.33642578125, "t": 598.5096435546875, "r": 502.06903, "b": 620.71321, "coord_origin": "TOPLEFT"}, "confidence": 0.9041882157325745, "cells": [{"id": 47, "text": "The following query can use the Region_location_SALES_MQT because it has ", "bbox": {"l": 151.20016, "t": 599.50041, "r": 502.06903, "b": 608.7134100000001, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "REGIONID, which is required for the schema1.sales_PERM1 permission:", "bbox": {"l": 151.20016, "t": 611.50021, "r": 474.7886, "b": 620.71321, "coord_origin": "TOPLEFT"}}]}, "text": "The following query can use the Region_location_SALES_MQT because it has REGIONID, which is required for the schema1.sales_PERM1 permission:"}, {"label": "text", "id": 15, "page_no": 119, "cluster": {"id": 15, "label": "text", "bbox": {"l": 150.63597106933594, "t": 628.1326293945312, "r": 401.03677, "b": 649.8663940429688, "coord_origin": "TOPLEFT"}, "confidence": 0.8543345332145691, "cells": [{"id": 49, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales", "bbox": {"l": 151.20018, "t": 628.68918, "r": 401.03677, "b": 637.46393, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GROUP BY", "bbox": {"l": 151.20018, "t": 640.68898, "r": 191.17677, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "locationid;", "bbox": {"l": 201.17091, "t": 640.68898, "r": 256.13873, "b": 649.4637299999999, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT Locationid, sum(SALEAMT) FROM schema1.sales GROUP BY locationid;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 119, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42345428466797, "t": 754.3500366210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9201931953430176, "cells": [{"id": 0, "text": "104 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "104"}, {"label": "page_footer", "id": 1, "page_no": 119, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57719421386719, "t": 754.6668090820312, "r": 339.839599609375, "b": 764.0997924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.948181688785553, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 120, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.60284423828125, "t": 754.8819580078125, "r": 517.96918, "b": 763.8931884765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508994817733765, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1432495117188, "t": 754.2498779296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262385368347168, "cells": [{"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.60304260253906, "t": 70.77579498291016, "r": 376.07117, "b": 80.92020416259766, "coord_origin": "TOPLEFT"}, "confidence": 0.9324866533279419, "cells": [{"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.650634765625, "t": 87.60993957519531, "r": 547.27185, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9790242910385132, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.53536987304688, "t": 128.6663360595703, "r": 547.31061, "b": 175.40707397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9846358299255371, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.59909057617188, "t": 181.56338500976562, "r": 539.19519, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9713051319122314, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.1431655883789, "t": 223.16065979003906, "r": 184.48561, "b": 236.4196014404297, "coord_origin": "TOPLEFT"}, "confidence": 0.9630040526390076, "cells": [{"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.05111694335938, "t": 249.4633331298828, "r": 527.12238, "b": 271.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9792811870574951, "cells": [{"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.7935791015625, "t": 283.475830078125, "r": 547.15894, "b": 341.72037, "coord_origin": "TOPLEFT"}, "confidence": 0.9867231249809265, "cells": [{"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.94505310058594, "t": 354.0857238769531, "r": 547.38397, "b": 388.08538818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863255620002747, "cells": [{"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.35859680175781, "t": 415.6083068847656, "r": 436.9425, "b": 431.4162902832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9681130051612854, "cells": [{"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.86106872558594, "t": 447.5397033691406, "r": 547.32916, "b": 542.3749389648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9881693124771118, "cells": [{"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.9717254638672, "t": 553.3796997070312, "r": 547.25256, "b": 611.71921, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.7317657470703, "t": 624.3082885742188, "r": 547.28448, "b": 717.9722900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9876141548156738, "cells": [{"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 120, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.60284423828125, "t": 754.8819580078125, "r": 517.96918, "b": 763.8931884765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508994817733765, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 120, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1432495117188, "t": 754.2498779296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262385368347168, "cells": [{"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "105"}, {"label": "text", "id": 2, "page_no": 120, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.60304260253906, "t": 70.77579498291016, "r": 376.07117, "b": 80.92020416259766, "coord_origin": "TOPLEFT"}, "confidence": 0.9324866533279419, "cells": [{"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "This example has the following additional implications:"}, {"label": "list_item", "id": 3, "page_no": 120, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.650634765625, "t": 87.60993957519531, "r": 547.27185, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9790242910385132, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables."}, {"label": "list_item", "id": 4, "page_no": 120, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.53536987304688, "t": 128.6663360595703, "r": 547.31061, "b": 175.40707397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9846358299255371, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results."}, {"label": "list_item", "id": 5, "page_no": 120, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.59909057617188, "t": 181.56338500976562, "r": 539.19519, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9713051319122314, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT."}, {"label": "section_header", "id": 6, "page_no": 120, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.1431655883789, "t": 223.16065979003906, "r": 184.48561, "b": 236.4196014404297, "coord_origin": "TOPLEFT"}, "confidence": 0.9630040526390076, "cells": [{"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.3 Query rewrite"}, {"label": "text", "id": 7, "page_no": 120, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.05111694335938, "t": 249.4633331298828, "r": 527.12238, "b": 271.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9792811870574951, "cells": [{"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}]}, "text": "Query rewrite is a technique that the optimizer can use to change the original request to improve performance."}, {"label": "text", "id": 8, "page_no": 120, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.7935791015625, "t": 283.475830078125, "r": 547.15894, "b": 341.72037, "coord_origin": "TOPLEFT"}, "confidence": 0.9867231249809265, "cells": [{"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1."}, {"label": "text", "id": 9, "page_no": 120, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94505310058594, "t": 354.0857238769531, "r": 547.38397, "b": 388.08538818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863255620002747, "cells": [{"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}]}, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC."}, {"label": "section_header", "id": 10, "page_no": 120, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.35859680175781, "t": 415.6083068847656, "r": 436.9425, "b": 431.4162902832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9681130051612854, "cells": [{"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.6 RCAC effects on performance and scalability"}, {"label": "text", "id": 11, "page_no": 120, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.86106872558594, "t": 447.5397033691406, "r": 547.32916, "b": 542.3749389648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9881693124771118, "cells": [{"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}]}, "text": "As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user\u2019s query, much like a query referencing a view."}, {"label": "text", "id": 12, "page_no": 120, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.9717254638672, "t": 553.3796997070312, "r": 547.25256, "b": 611.71921, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}]}, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user\u2019s permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned."}, {"label": "text", "id": 13, "page_no": 120, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7317657470703, "t": 624.3082885742188, "r": 547.28448, "b": 717.9722900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9876141548156738, "cells": [{"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}]}, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original \u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot found\u201d if the user is not entitled to any of the records."}], "body": [{"label": "text", "id": 2, "page_no": 120, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.60304260253906, "t": 70.77579498291016, "r": 376.07117, "b": 80.92020416259766, "coord_origin": "TOPLEFT"}, "confidence": 0.9324866533279419, "cells": [{"id": 2, "text": "This example has the following additional implications:", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 376.07117, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "This example has the following additional implications:"}, {"label": "list_item", "id": 3, "page_no": 120, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.650634765625, "t": 87.60993957519531, "r": 547.27185, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9790242910385132, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 88.63823999999988, "r": 141.7802, "b": 97.41301999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Users must be prevented from explicitly querying the MQT or a view that is created over it. ", "bbox": {"l": 151.20036, "t": 88.48883000000001, "r": 547.27185, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Those two cases bypass the row permission and column mask rules from the underlying ", "bbox": {"l": 151.20036, "t": 100.48865, "r": 544.09833, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "tables.", "bbox": {"l": 151.20036, "t": 112.48845999999992, "r": 180.23874, "b": 121.70147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Users must be prevented from explicitly querying the MQT or a view that is created over it. Those two cases bypass the row permission and column mask rules from the underlying tables."}, {"label": "list_item", "id": 4, "page_no": 120, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.53536987304688, "t": 128.6663360595703, "r": 547.31061, "b": 175.40707397460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9846358299255371, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 129.67742999999996, "r": 141.7802, "b": 138.45221000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "If the user writes code to update incrementally an MQT, that code must be run from a user ", "bbox": {"l": 151.20036, "t": 129.52801999999997, "r": 547.31061, "b": 138.74103000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "that has permission to view all of the rows and all columns in their unmasked state. ", "bbox": {"l": 151.20036, "t": 141.52783, "r": 519.6994, "b": 150.74084000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Otherwise, the MQT contents are not complete and queries that implicitly use the MQT ", "bbox": {"l": 151.20036, "t": 153.52765, "r": 536.80664, "b": 162.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "might get wrong results.", "bbox": {"l": 151.20036, "t": 165.52747, "r": 257.17972, "b": 174.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If the user writes code to update incrementally an MQT, that code must be run from a user that has permission to view all of the rows and all columns in their unmasked state. Otherwise, the MQT contents are not complete and queries that implicitly use the MQT might get wrong results."}, {"label": "list_item", "id": 5, "page_no": 120, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.59909057617188, "t": 181.56338500976562, "r": 539.19519, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9713051319122314, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 182.65668000000005, "r": 141.7802, "b": 191.43146000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "To prevent this, a check constraint can be created to cause an error if masked data was ", "bbox": {"l": 151.20036, "t": 182.50725999999997, "r": 539.19519, "b": 191.72028, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "inserted into the MQT.", "bbox": {"l": 151.20036, "t": 194.50707999999997, "r": 249.24758999999997, "b": 203.72009000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH To prevent this, a check constraint can be created to cause an error if masked data was inserted into the MQT."}, {"label": "section_header", "id": 6, "page_no": 120, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.1431655883789, "t": 223.16065979003906, "r": 184.48561, "b": 236.4196014404297, "coord_origin": "TOPLEFT"}, "confidence": 0.9630040526390076, "cells": [{"id": 15, "text": "6.5.3", "bbox": {"l": 64.800003, "t": 224.33471999999995, "r": 94.544197, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Query rewrite", "bbox": {"l": 98.262222, "t": 224.33471999999995, "r": 184.48561, "b": 236.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "6.5.3 Query rewrite"}, {"label": "text", "id": 7, "page_no": 120, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.05111694335938, "t": 249.4633331298828, "r": 527.12238, "b": 271.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9792811870574951, "cells": [{"id": 17, "text": "Query rewrite is a technique that the optimizer can use to change the original request to ", "bbox": {"l": 136.8, "t": 250.48870999999997, "r": 527.12238, "b": 259.70172, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "improve performance.", "bbox": {"l": 136.8, "t": 262.48852999999997, "r": 233.39114, "b": 271.70154, "coord_origin": "TOPLEFT"}}]}, "text": "Query rewrite is a technique that the optimizer can use to change the original request to improve performance."}, {"label": "text", "id": 8, "page_no": 120, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.7935791015625, "t": 283.475830078125, "r": 547.15894, "b": 341.72037, "coord_origin": "TOPLEFT"}, "confidence": 0.9867231249809265, "cells": [{"id": 19, "text": "For example, a query that references Table1 might be rewritten to access an MQT over ", "bbox": {"l": 136.8, "t": 284.50812, "r": 522.46423, "b": 293.7211, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Table1, or it might also be optimized to access only the fields in an index that is defined over ", "bbox": {"l": 136.8, "t": 296.50793, "r": 545.13904, "b": 305.72092, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the ", "bbox": {"l": 136.8, "t": 308.50775, "r": 547.15894, "b": 317.72073, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "MQT or index also must include all columns that are needed by the row permissions or ", "bbox": {"l": 136.79999, "t": 320.50757, "r": 521.83862, "b": 329.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column masks that are defined on Table1.", "bbox": {"l": 136.79999, "t": 332.50738999999993, "r": 321.46436, "b": 341.72037, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a query that references Table1 might be rewritten to access an MQT over Table1, or it might also be optimized to access only the fields in an index that is defined over Table1 and avoid touching Table1. With RCAC, defining these rewrites can still occur, but the MQT or index also must include all columns that are needed by the row permissions or column masks that are defined on Table1."}, {"label": "text", "id": 9, "page_no": 120, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.94505310058594, "t": 354.0857238769531, "r": 547.38397, "b": 388.08538818359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9863255620002747, "cells": [{"id": 24, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations ", "bbox": {"l": 136.79999, "t": 354.52695, "r": 547.38397, "b": 363.73993, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "must be considered. Usage of MQTs or index-only access might be reduced or eliminated by ", "bbox": {"l": 136.79999, "t": 366.52675999999997, "r": 547.37024, "b": 375.73974999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "enabling RCAC.", "bbox": {"l": 136.79999, "t": 378.52658, "r": 207.61162, "b": 387.73956, "coord_origin": "TOPLEFT"}}]}, "text": "As part of adding RCAC, the impact to these potentially significant performance optimizations must be considered. Usage of MQTs or index-only access might be reduced or eliminated by enabling RCAC."}, {"label": "section_header", "id": 10, "page_no": 120, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.35859680175781, "t": 415.6083068847656, "r": 436.9425, "b": 431.4162902832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9681130051612854, "cells": [{"id": 27, "text": "6.6", "bbox": {"l": 64.800003, "t": 416.2207, "r": 87.229889, "b": 430.9837, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "RCAC effects on performance and scalability", "bbox": {"l": 91.715851, "t": 416.2207, "r": 436.9425, "b": 430.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.6 RCAC effects on performance and scalability"}, {"label": "text", "id": 11, "page_no": 120, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.86106872558594, "t": 447.5397033691406, "r": 547.32916, "b": 542.3749389648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9881693124771118, "cells": [{"id": 29, "text": "As with any discussion that is related to performance and scalability, nothing is certain or ", "bbox": {"l": 136.8, "t": 448.48874, "r": 530.32556, "b": 457.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "guaranteed. There are always many variables that are involved. First, a good foundation of ", "bbox": {"l": 136.8, "t": 460.48856, "r": 538.07629, "b": 469.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "knowledge and skill is required to appreciate fully what is occurring when a database request ", "bbox": {"l": 136.8, "t": 472.48837, "r": 547.23462, "b": 481.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "is handled within an RCAC enabled environment. Implementing the row permission or column ", "bbox": {"l": 136.79999, "t": 484.54794, "r": 547.32916, "b": 493.76093, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "masks involves the query optimizer and database engine. The process that identifies the rows ", "bbox": {"l": 136.79999, "t": 496.54776, "r": 547.2218, "b": 505.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must ", "bbox": {"l": 136.79999, "t": 508.54758, "r": 541.98187, "b": 517.7605599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "be formulated. In the case of SQL requests, the RCAC portion of the query is combined with ", "bbox": {"l": 136.79999, "t": 520.54739, "r": 546.37335, "b": 529.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "the user\u2019s query, much like a query referencing a view.", "bbox": {"l": 136.79999, "t": 532.54718, "r": 376.45456, "b": 541.76019, "coord_origin": "TOPLEFT"}}]}, "text": "As with any discussion that is related to performance and scalability, nothing is certain or guaranteed. There are always many variables that are involved. First, a good foundation of knowledge and skill is required to appreciate fully what is occurring when a database request is handled within an RCAC enabled environment. Implementing the row permission or column masks involves the query optimizer and database engine. The process that identifies the rows that you have permission to access is considered a \u201cquery\u201d, and as such a query plan must be formulated. In the case of SQL requests, the RCAC portion of the query is combined with the user\u2019s query, much like a query referencing a view."}, {"label": "text", "id": 12, "page_no": 120, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.9717254638672, "t": 553.3796997070312, "r": 547.25256, "b": 611.71921, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 37, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. ", "bbox": {"l": 136.79999, "t": 554.5070000000001, "r": 547.25256, "b": 563.72, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the ", "bbox": {"l": 136.79999, "t": 566.50681, "r": 546.77655, "b": 575.7198, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "native read, write, update, or delete operation. The amount of work (and time) required to ", "bbox": {"l": 136.79999, "t": 578.50661, "r": 532.45898, "b": 587.7196, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "identify the record based on the user\u2019s permission is directly related to the complexity and ", "bbox": {"l": 136.79999, "t": 590.50641, "r": 534.86322, "b": 599.71941, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "depth of the logic that is needed to identify the records that can be returned.", "bbox": {"l": 136.79999, "t": 602.50621, "r": 472.18805, "b": 611.71921, "coord_origin": "TOPLEFT"}}]}, "text": "For native record level access, this RCAC \u201cquery\u201d is also built and used to test the permission. When a file is opened, the RCAC rule text logic is included, optimized, and run as part of the native read, write, update, or delete operation. The amount of work (and time) required to identify the record based on the user\u2019s permission is directly related to the complexity and depth of the logic that is needed to identify the records that can be returned."}, {"label": "text", "id": 13, "page_no": 120, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.7317657470703, "t": 624.3082885742188, "r": 547.28448, "b": 717.9722900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9876141548156738, "cells": [{"id": 42, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, ", "bbox": {"l": 136.79999, "t": 624.52577, "r": 547.16492, "b": 633.7387699999999, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "an index). In its purest form, a random read uses two data access methods: index probe (find ", "bbox": {"l": 136.79999, "t": 636.52557, "r": 547.2276, "b": 645.73857, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies ", "bbox": {"l": 136.79999, "t": 648.52538, "r": 547.28448, "b": 657.73837, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "five nested subqueries to determine whether the user has access to the record, this logic ", "bbox": {"l": 136.79999, "t": 660.52518, "r": 531.45306, "b": 669.73818, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "must be added to the path. The subquery processing now becomes part of the original ", "bbox": {"l": 136.8, "t": 672.52499, "r": 521.33472, "b": 681.73799, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "\u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a ", "bbox": {"l": 136.8, "t": 684.5248, "r": 523.44214, "b": 693.737801, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot ", "bbox": {"l": 136.8, "t": 696.524605, "r": 547.17896, "b": 705.73761, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "found\u201d if the user is not entitled to any of the records.", "bbox": {"l": 136.8, "t": 708.524414, "r": 369.51031, "b": 717.737419, "coord_origin": "TOPLEFT"}}]}, "text": "A simple example to illustrate this concept is a random read using a keyed logical file (that is, an index). In its purest form, a random read uses two data access methods: index probe (find the key and RRN) and table probe (find the record using RRN). If the RCAC rule text specifies five nested subqueries to determine whether the user has access to the record, this logic must be added to the path. The subquery processing now becomes part of the original \u201crandom read\u201d request. Instead of two simple I/Os to retrieve the record, there can be a minimum of 12 I/Os to retrieve the same record. These I/Os can be done with a result of \u201cnot found\u201d if the user is not entitled to any of the records."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 120, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.60284423828125, "t": 754.8819580078125, "r": 517.96918, "b": 763.8931884765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9508994817733765, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 120, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1432495117188, "t": 754.2498779296875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262385368347168, "cells": [{"id": 1, "text": "105", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "105"}]}}, {"page_no": 121, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.41461944580078, "t": 754.2803344726562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9247628450393677, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.62214660644531, "t": 754.58251953125, "r": 339.8680725097656, "b": 764.0300903320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9530835747718811, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.8849639892578, "t": 70.34988403320312, "r": 543.5155, "b": 116.99058532714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9810242652893066, "cells": [{"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.106201171875, "t": 403.9275817871094, "r": 333.33013916015625, "b": 413.6200256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.9444288611412048, "cells": [{"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 136.19158935546875, "t": 131.57861328125, "r": 506.083740234375, "b": 400.9339294433594, "coord_origin": "TOPLEFT"}, "confidence": 0.9722803235054016, "cells": [{"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 121, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41461944580078, "t": 754.2803344726562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9247628450393677, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "106"}, {"label": "page_footer", "id": 1, "page_no": 121, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.62214660644531, "t": 754.58251953125, "r": 339.8680725097656, "b": 764.0300903320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9530835747718811, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 121, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.8849639892578, "t": 70.34988403320312, "r": 543.5155, "b": 116.99058532714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9810242652893066, "cells": [{"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23."}, {"label": "caption", "id": 3, "page_no": 121, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.106201171875, "t": 403.9275817871094, "r": 333.33013916015625, "b": 413.6200256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.9444288611412048, "cells": [{"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-23 Native record access with no RCAC"}, {"label": "picture", "id": 4, "page_no": 121, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.19158935546875, "t": 131.57861328125, "r": 506.083740234375, "b": 400.9339294433594, "coord_origin": "TOPLEFT"}, "confidence": 0.9722803235054016, "cells": [{"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 121, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.8849639892578, "t": 70.34988403320312, "r": 543.5155, "b": 116.99058532714844, "coord_origin": "TOPLEFT"}, "confidence": 0.9810242652893066, "cells": [{"id": 2, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.5155, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 539.91107, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "order is no longer a simple matter of positioning to the next available key, as shown in ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 516.06189, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 6-23.", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 190.73239, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For programs that access records sequentially, in or out of key order, the added RCAC logic can have a profound effect on the performance and scalability. Reading the \u201cnext record\u201d in order is no longer a simple matter of positioning to the next available key, as shown in Figure 6-23."}, {"label": "caption", "id": 3, "page_no": 121, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.106201171875, "t": 403.9275817871094, "r": 333.33013916015625, "b": 413.6200256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.9444288611412048, "cells": [{"id": 6, "text": "Figure 6-23 Native record access with no RCAC", "bbox": {"l": 136.8, "t": 404.77798, "r": 332.58868, "b": 413.103, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-23 Native record access with no RCAC"}, {"label": "picture", "id": 4, "page_no": 121, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.19158935546875, "t": 131.57861328125, "r": 506.083740234375, "b": 400.9339294433594, "coord_origin": "TOPLEFT"}, "confidence": 0.9722803235054016, "cells": [{"id": 7, "text": "Native RLA Request", "bbox": {"l": 179.1436, "t": 155.32299999999998, "r": 278.48407, "b": 165.81525, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RRN", "bbox": {"l": 355.00479, "t": 142.72247000000004, "r": 371.4198, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Record Data", "bbox": {"l": 412.7984, "t": 142.72247000000004, "r": 459.23407, "b": 150.59167000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1", "bbox": {"l": 375.93451, "t": 157.64544999999998, "r": 380.59537, "b": 165.50543000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "123", "bbox": {"l": 387.94699, "t": 157.4248, "r": 404.49164, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CAIN", "bbox": {"l": 404.49438, "t": 157.96722, "r": 426.46198, "b": 166.24090999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "aaaa456", "bbox": {"l": 437.34372, "t": 157.4248, "r": 475.91571, "b": 166.19494999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 323.6568, "t": 153.94312000000002, "r": 333.83542, "b": 171.4389, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "2", "bbox": {"l": 375.93411, "t": 172.53827, "r": 380.59497, "b": 180.39824999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "123", "bbox": {"l": 387.94659, "t": 172.31763, "r": 404.49124, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CAIN", "bbox": {"l": 404.49399, "t": 172.86005, "r": 426.46158, "b": 181.13373, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "bbbb456", "bbox": {"l": 437.34332000000006, "t": 172.31763, "r": 475.91531000000003, "b": 181.08776999999998, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "3", "bbox": {"l": 375.93408, "t": 187.46130000000005, "r": 380.59494, "b": 195.32128999999998, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "123", "bbox": {"l": 387.94656, "t": 187.24066000000005, "r": 404.49121, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CAIN", "bbox": {"l": 404.49396, "t": 187.78308000000004, "r": 426.46155, "b": 196.05676000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "cccc456", "bbox": {"l": 437.3432900000001, "t": 187.24066000000005, "r": 475.91528000000005, "b": 196.01080000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "4", "bbox": {"l": 375.93411, "t": 202.38477, "r": 380.59497, "b": 210.24474999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "123", "bbox": {"l": 387.9462, "t": 202.16405999999995, "r": 404.49084, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CAIN", "bbox": {"l": 404.4935, "t": 202.70648000000006, "r": 426.46109, "b": 210.98015999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "dddd456", "bbox": {"l": 437.34299, "t": 202.16405999999995, "r": 475.91498000000007, "b": 210.93420000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "NR", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 280.56635, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "C", "bbox": {"l": 266.42206, "t": 204.42553999999996, "r": 290.17664, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A", "bbox": {"l": 276.16107, "t": 204.42553999999996, "r": 301.33136, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "5", "bbox": {"l": 375.93411, "t": 217.27722000000006, "r": 380.59497, "b": 225.13720999999998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "123", "bbox": {"l": 387.94659, "t": 217.05658000000005, "r": 404.49124, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CAIN", "bbox": {"l": 404.49399, "t": 217.59900000000005, "r": 426.46158, "b": 225.87267999999995, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "eeee456", "bbox": {"l": 437.34332000000006, "t": 217.05658000000005, "r": 475.91531000000003, "b": 225.82672000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "\u0085", "bbox": {"l": 374.24902, "t": 232.20025999999996, "r": 380.59219, "b": 240.06024000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "\u0085", "bbox": {"l": 387.94659, "t": 231.97960999999998, "r": 393.4624, "b": 240.74976000000004, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "No RCAC", "bbox": {"l": 230.0419, "t": 204.42553999999996, "r": 296.65891, "b": 220.16387999999995, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "\u0085", "bbox": {"l": 374.24869, "t": 247.12378, "r": 380.59186, "b": 254.98375999999996, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "\u0085", "bbox": {"l": 387.94626, "t": 246.90314, "r": 393.46207, "b": 255.67327999999998, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u0085", "bbox": {"l": 374.24869, "t": 262.01648, "r": 380.59186, "b": 269.87645999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "\u0085", "bbox": {"l": 387.94626, "t": 261.79584, "r": 393.46207, "b": 270.56597999999997, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "\u0085", "bbox": {"l": 374.24869, "t": 276.93944999999997, "r": 380.59186, "b": 284.7995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "\u0085", "bbox": {"l": 387.94626, "t": 276.71880999999996, "r": 393.46207, "b": 285.48895, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "\u0085", "bbox": {"l": 374.24869, "t": 291.8627599999999, "r": 380.59186, "b": 299.72278, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "\u0085", "bbox": {"l": 387.94626, "t": 291.64212, "r": 393.46207, "b": 300.41223, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "\u0085", "bbox": {"l": 374.24869, "t": 306.7554, "r": 380.59186, "b": 314.61542, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "\u0085", "bbox": {"l": 387.94626, "t": 306.53476, "r": 393.46207, "b": 315.30487, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "1000001", "bbox": {"l": 347.98749, "t": 321.67856, "r": 380.60059, "b": 329.53857, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "123", "bbox": {"l": 387.9462, "t": 321.45801, "r": 404.49084, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CAIN", "bbox": {"l": 404.4935, "t": 322.0004, "r": 426.46109, "b": 330.27408, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "vvvv456", "bbox": {"l": 437.34299, "t": 321.45801, "r": 475.91498000000007, "b": 330.22812, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "1000002", "bbox": {"l": 347.98749, "t": 336.60184, "r": 380.60059, "b": 344.46185, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "123", "bbox": {"l": 387.94672, "t": 336.3812, "r": 404.49136, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CAIN", "bbox": {"l": 404.49411, "t": 336.9235800000001, "r": 426.4617, "b": 345.19727, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "wwww456", "bbox": {"l": 437.34344, "t": 336.3812, "r": 475.91544, "b": 345.15131, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "1000003", "bbox": {"l": 347.98749, "t": 351.49448, "r": 380.60059, "b": 359.35449, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "123", "bbox": {"l": 387.94672, "t": 351.27383, "r": 404.49136, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CAIN", "bbox": {"l": 404.49411, "t": 351.81621999999993, "r": 426.4617, "b": 360.0899, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "xxxx456", "bbox": {"l": 437.34344, "t": 351.27383, "r": 475.91544, "b": 360.04395, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "1000004", "bbox": {"l": 347.98749, "t": 366.41766000000007, "r": 380.60059, "b": 374.27768, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "123", "bbox": {"l": 387.94672, "t": 366.19701999999995, "r": 404.49136, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "BEDOYA", "bbox": {"l": 404.49411, "t": 366.73941, "r": 437.42895999999996, "b": 375.01309000000003, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "yyyy456", "bbox": {"l": 437.46664, "t": 366.19701999999995, "r": 475.89061999999996, "b": 374.96713, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "1000005", "bbox": {"l": 347.9884, "t": 381.34064000000006, "r": 380.6015, "b": 389.20064999999994, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "123", "bbox": {"l": 387.94763, "t": 381.11999999999995, "r": 404.49228, "b": 389.89011, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "BEDOYA", "bbox": {"l": 404.49503, "t": 381.66238, "r": 437.42987, "b": 389.93607000000003, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "zzzz456", "bbox": {"l": 437.46756000000005, "t": 381.11999999999995, "r": 475.89154, "b": 389.89011, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 121, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.41461944580078, "t": 754.2803344726562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9247628450393677, "cells": [{"id": 0, "text": "106 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "106"}, {"label": "page_footer", "id": 1, "page_no": 121, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.62214660644531, "t": 754.58251953125, "r": 339.8680725097656, "b": 764.0300903320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9530835747718811, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 122, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.56109619140625, "t": 754.820068359375, "r": 517.96918, "b": 763.9142456054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9531034231185913, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.158935546875, "t": 754.1790161132812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219108819961548, "cells": [{"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.06326293945312, "t": 70.65892791748047, "r": 547.29565, "b": 116.73127746582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9824259281158447, "cells": [{"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.92271423339844, "t": 407.9793701171875, "r": 341.2294616699219, "b": 417.6308898925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9458103775978088, "cells": [{"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.81785583496094, "t": 433.958251953125, "r": 525.86151, "b": 456.21856689453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9756483435630798, "cells": [{"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.4524917602539, "t": 483.275146484375, "r": 510.04889, "b": 500.006103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9643033742904663, "cells": [{"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.74249267578125, "t": 516.0097045898438, "r": 547.24969, "b": 549.92133, "coord_origin": "TOPLEFT"}, "confidence": 0.9808005094528198, "cells": [{"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.18580627441406, "t": 561.9881591796875, "r": 283.20502, "b": 572.285888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.8252715468406677, "cells": [{"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5818634033203, "t": 578.6119995117188, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}, "confidence": 0.9519445896148682, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.1683349609375, "t": 595.9595336914062, "r": 547.40094, "b": 617.96007, "coord_origin": "TOPLEFT"}, "confidence": 0.9689837098121643, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 151.33261108398438, "t": 624.4862670898438, "r": 546.01855, "b": 646.93968, "coord_origin": "TOPLEFT"}, "confidence": 0.972244918346405, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 151.21334838867188, "t": 653.9972534179688, "r": 546.81927, "b": 664.3414916992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9548404812812805, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 151.15476989746094, "t": 670.9539794921875, "r": 547.16492, "b": 704.958679, "coord_origin": "TOPLEFT"}, "confidence": 0.9793244004249573, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.30223083496094, "t": 711.9512939453125, "r": 545.11029, "b": 734.1187133789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9760500192642212, "cells": [{"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "picture", "bbox": {"l": 135.89947509765625, "t": 131.36407470703125, "r": 513.2355346679688, "b": 404.8336486816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9828073978424072, "cells": [{"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 122, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.56109619140625, "t": 754.820068359375, "r": 517.96918, "b": 763.9142456054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9531034231185913, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 122, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.158935546875, "t": 754.1790161132812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219108819961548, "cells": [{"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "107"}, {"label": "text", "id": 2, "page_no": 122, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.06326293945312, "t": 70.65892791748047, "r": 547.29565, "b": 116.73127746582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9824259281158447, "cells": [{"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24."}, {"label": "caption", "id": 3, "page_no": 122, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.92271423339844, "t": 407.9793701171875, "r": 341.2294616699219, "b": 417.6308898925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9458103775978088, "cells": [{"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-24 Native record level access with RCAC"}, {"label": "text", "id": 4, "page_no": 122, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.81785583496094, "t": 433.958251953125, "r": 525.86151, "b": 456.21856689453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9756483435630798, "cells": [{"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}]}, "text": "After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended."}, {"label": "section_header", "id": 5, "page_no": 122, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.4524917602539, "t": 483.275146484375, "r": 510.04889, "b": 500.006103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9643033742904663, "cells": [{"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}]}, "text": "6.7 Exclusive lock to implement RCAC (availability issues)"}, {"label": "text", "id": 6, "page_no": 122, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.74249267578125, "t": 516.0097045898438, "r": 547.24969, "b": 549.92133, "coord_origin": "TOPLEFT"}, "confidence": 0.9808005094528198, "cells": [{"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}]}, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC."}, {"label": "text", "id": 7, "page_no": 122, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.18580627441406, "t": 561.9881591796875, "r": 283.20502, "b": 572.285888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.8252715468406677, "cells": [{"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following scenarios:"}, {"label": "list_item", "id": 8, "page_no": 122, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5818634033203, "t": 578.6119995117188, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}, "confidence": 0.9519445896148682, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table:"}, {"label": "list_item", "id": 9, "page_no": 122, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.1683349609375, "t": 595.9595336914062, "r": 547.40094, "b": 617.96007, "coord_origin": "TOPLEFT"}, "confidence": 0.9689837098121643, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data."}, {"label": "list_item", "id": 10, "page_no": 122, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.33261108398438, "t": 624.4862670898438, "r": 546.01855, "b": 646.93968, "coord_origin": "TOPLEFT"}, "confidence": 0.972244918346405, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data."}, {"label": "list_item", "id": 11, "page_no": 122, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.21334838867188, "t": 653.9972534179688, "r": 546.81927, "b": 664.3414916992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9548404812812805, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data."}, {"label": "list_item", "id": 12, "page_no": 122, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.15476989746094, "t": 670.9539794921875, "r": 547.16492, "b": 704.958679, "coord_origin": "TOPLEFT"}, "confidence": 0.9793244004249573, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data."}, {"label": "text", "id": 13, "page_no": 122, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.30223083496094, "t": 711.9512939453125, "r": 545.11029, "b": 734.1187133789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9760500192642212, "cells": [{"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}]}, "text": "The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table."}, {"label": "picture", "id": 14, "page_no": 122, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 135.89947509765625, "t": 131.36407470703125, "r": 513.2355346679688, "b": 404.8336486816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9828073978424072, "cells": [{"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 122, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.06326293945312, "t": 70.65892791748047, "r": 547.29565, "b": 116.73127746582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9824259281158447, "cells": [{"id": 2, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 539.8396, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "run. If the record is rejected by RCAC, the next record in sequence that is permissible must be ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 547.29565, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "identified. This spinning through the records can take a long time and uses many resources, ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 545.24677, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "as shown in Figure 6-24.", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 246.12015, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Before the record, as identified by the key, is considered available, the RCAC logic must be run. If the record is rejected by RCAC, the next record in sequence that is permissible must be identified. This spinning through the records can take a long time and uses many resources, as shown in Figure 6-24."}, {"label": "caption", "id": 3, "page_no": 122, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.92271423339844, "t": 407.9793701171875, "r": 341.2294616699219, "b": 417.6308898925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9458103775978088, "cells": [{"id": 6, "text": "Figure 6-24 Native record level access with RCAC", "bbox": {"l": 136.8, "t": 408.73801, "r": 340.54565, "b": 417.06302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-24 Native record level access with RCAC"}, {"label": "text", "id": 4, "page_no": 122, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.81785583496094, "t": 433.958251953125, "r": 525.86151, "b": 456.21856689453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9756483435630798, "cells": [{"id": 7, "text": "After the row permissions and column masks are designed and implemented, adequate ", "bbox": {"l": 136.8, "t": 434.68872, "r": 525.86151, "b": 443.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "performance and scalability testing are recommended.", "bbox": {"l": 136.8, "t": 446.74829, "r": 377.29614, "b": 455.96127, "coord_origin": "TOPLEFT"}}]}, "text": "After the row permissions and column masks are designed and implemented, adequate performance and scalability testing are recommended."}, {"label": "section_header", "id": 5, "page_no": 122, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.4524917602539, "t": 483.275146484375, "r": 510.04889, "b": 500.006103515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9643033742904663, "cells": [{"id": 9, "text": "6.7", "bbox": {"l": 64.800003, "t": 484.4407, "r": 87.161385, "b": 499.2037, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Exclusive lock to implement RCAC (availability issues)", "bbox": {"l": 91.633644, "t": 484.4407, "r": 510.04889, "b": 499.2037, "coord_origin": "TOPLEFT"}}]}, "text": "6.7 Exclusive lock to implement RCAC (availability issues)"}, {"label": "text", "id": 6, "page_no": 122, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.74249267578125, "t": 516.0097045898438, "r": 547.24969, "b": 549.92133, "coord_origin": "TOPLEFT"}, "confidence": 0.9808005094528198, "cells": [{"id": 11, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is ", "bbox": {"l": 136.8, "t": 516.70871, "r": 512.02203, "b": 525.92169, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "obtained. The impact to other applications depends on the order of create permission and the ", "bbox": {"l": 136.8, "t": 528.70853, "r": 547.24969, "b": 537.92152, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "alter table to activate RCAC.", "bbox": {"l": 136.8, "t": 540.7083299999999, "r": 261.91846, "b": 549.92133, "coord_origin": "TOPLEFT"}}]}, "text": "When defining permissions or enabling RCAC, an exclusive lock on the base table is obtained. The impact to other applications depends on the order of create permission and the alter table to activate RCAC."}, {"label": "text", "id": 7, "page_no": 122, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.18580627441406, "t": 561.9881591796875, "r": 283.20502, "b": 572.285888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.8252715468406677, "cells": [{"id": 14, "text": "Consider the following scenarios:", "bbox": {"l": 136.8, "t": 562.72789, "r": 283.20502, "b": 571.94089, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following scenarios:"}, {"label": "list_item", "id": 8, "page_no": 122, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5818634033203, "t": 578.6119995117188, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}, "confidence": 0.9519445896148682, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 579.8571000000001, "r": 141.78, "b": 588.63185, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Scenario 1: Adding permissions and RCAC is not enabled on the table:", "bbox": {"l": 151.20016, "t": 579.7076999999999, "r": 464.85846, "b": 588.9207, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 1: Adding permissions and RCAC is not enabled on the table:"}, {"label": "list_item", "id": 9, "page_no": 122, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.1683349609375, "t": 595.9595336914062, "r": 547.40094, "b": 617.96007, "coord_origin": "TOPLEFT"}, "confidence": 0.9689837098121643, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.03976, "t": 596.74727, "r": 157.61636, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Job 1 reading data from the table (open for input) holds a *SHRRD on the member and ", "bbox": {"l": 165.6003, "t": 596.74727, "r": 547.40094, "b": 605.96027, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "a *SHRRD on the data. ", "bbox": {"l": 165.5993, "t": 608.74707, "r": 271.70319, "b": 617.96007, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 1 reading data from the table (open for input) holds a *SHRRD on the member and a *SHRRD on the data."}, {"label": "list_item", "id": 10, "page_no": 122, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 151.33261108398438, "t": 624.4862670898438, "r": 546.01855, "b": 646.93968, "coord_origin": "TOPLEFT"}, "confidence": 0.972244918346405, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 625.7268799999999, "r": 157.59546, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD ", "bbox": {"l": 165.59932, "t": 625.7268799999999, "r": 546.01855, "b": 634.93988, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "on the member and a *SHRUPD on the data.", "bbox": {"l": 165.5993, "t": 637.72668, "r": 364.6698, "b": 646.93968, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 2 adding, updating, or deleting rows from table (open for output) holds a *SHRRD on the member and a *SHRUPD on the data."}, {"label": "list_item", "id": 11, "page_no": 122, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 151.21334838867188, "t": 653.9972534179688, "r": 546.81927, "b": 664.3414916992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9548404812812805, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.03976, "t": 654.7065, "r": 157.61139, "b": 663.91949, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data.", "bbox": {"l": 165.5993, "t": 654.7065, "r": 546.81927, "b": 663.91949, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 4 allocates the object and gets a *SHRRD on the file and a *EXCLRD on the data."}, {"label": "list_item", "id": 12, "page_no": 122, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 151.15476989746094, "t": 670.9539794921875, "r": 547.16492, "b": 704.958679, "coord_origin": "TOPLEFT"}, "confidence": 0.9793244004249573, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.03976, "t": 671.7460599999999, "r": 157.61139, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Job 3 attempts to add a permission to the table. Permission is added and the ", "bbox": {"l": 165.5993, "t": 671.7460599999999, "r": 507.56107000000003, "b": 680.95906, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on ", "bbox": {"l": 165.5993, "t": 683.74586, "r": 547.16492, "b": 692.95887, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "the file and *EXCLRD on the data. ", "bbox": {"l": 165.5993, "t": 695.745674, "r": 320.09985, "b": 704.958679, "coord_origin": "TOPLEFT"}}]}, "text": "-Job 3 attempts to add a permission to the table. Permission is added and the pseudo-closed cursors for Job1 and Job 2 are closed. Job 4 still holds the *SHRRD on the file and *EXCLRD on the data."}, {"label": "text", "id": 13, "page_no": 122, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.30223083496094, "t": 711.9512939453125, "r": 545.11029, "b": 734.1187133789062, "coord_origin": "TOPLEFT"}, "confidence": 0.9760500192642212, "cells": [{"id": 29, "text": "The net result from Scenario 1 is that you can add permissions without having to end the ", "bbox": {"l": 151.19914, "t": 712.725487, "r": 545.11029, "b": 721.938492, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "applications that are reading the base table. ", "bbox": {"l": 151.19914, "t": 724.725296, "r": 347.6232, "b": 733.938301, "coord_origin": "TOPLEFT"}}]}, "text": "The net result from Scenario 1 is that you can add permissions without having to end the applications that are reading the base table."}, {"label": "picture", "id": 14, "page_no": 122, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 135.89947509765625, "t": 131.36407470703125, "r": 513.2355346679688, "b": 404.8336486816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9828073978424072, "cells": [{"id": 31, "text": "Native RLA Request", "bbox": {"l": 164.6366, "t": 161.3573, "r": 264.40671, "b": 171.8949, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "RRN", "bbox": {"l": 360.86261, "t": 148.70245, "r": 377.34851, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Record Data", "bbox": {"l": 418.90582, "t": 148.70245, "r": 465.54205, "b": 156.60564999999997, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1", "bbox": {"l": 381.88269, "t": 163.68988000000002, "r": 386.56366, "b": 171.58385999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "123", "bbox": {"l": 393.94705, "t": 163.46831999999995, "r": 410.56314, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CAIN", "bbox": {"l": 410.56592, "t": 164.01306, "r": 432.62839, "b": 172.32245, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "aaaaaa456", "bbox": {"l": 432.63208, "t": 163.46831999999995, "r": 482.27261, "b": 172.27630999999997, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RCAC", "bbox": {"l": 295.24869, "t": 139.88818000000003, "r": 335.90213, "b": 155.69464000000005, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 158.86370999999997, "r": 305.28674, "b": 176.43517999999995, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2", "bbox": {"l": 381.88239, "t": 178.64721999999995, "r": 386.56335, "b": 186.5412, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "123", "bbox": {"l": 393.94675, "t": 178.42566, "r": 410.56284, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CAIN", "bbox": {"l": 410.56561, "t": 178.97040000000004, "r": 432.62808, "b": 187.27979000000005, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "bbbbbb456", "bbox": {"l": 432.63177, "t": 178.42566, "r": 482.27231, "b": 187.23364000000004, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "3", "bbox": {"l": 381.88239, "t": 193.63469999999995, "r": 386.56335, "b": 201.52868999999998, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "123", "bbox": {"l": 393.94675, "t": 193.41314999999997, "r": 410.56284, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CAIN", "bbox": {"l": 410.56561, "t": 193.95789000000002, "r": 432.62808, "b": 202.26727000000005, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "cccccc456", "bbox": {"l": 432.63177, "t": 193.41314999999997, "r": 482.27231, "b": 202.22113000000002, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "4", "bbox": {"l": 381.88239, "t": 208.62285999999995, "r": 386.56335, "b": 216.51684999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "123", "bbox": {"l": 393.9465, "t": 208.40112, "r": 410.56259, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CAIN", "bbox": {"l": 410.5654, "t": 208.94586000000004, "r": 432.62787, "b": 217.25525000000005, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "dddddd456", "bbox": {"l": 432.63159, "t": 208.40112, "r": 482.27213000000006, "b": 217.20911, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 187.85344999999995, "r": 305.28674, "b": 205.42493000000002, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "5", "bbox": {"l": 381.88239, "t": 223.57970999999998, "r": 386.56335, "b": 231.47369000000003, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "123", "bbox": {"l": 393.94675, "t": 223.35815000000002, "r": 410.56284, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "CAIN", "bbox": {"l": 410.56561, "t": 223.90288999999996, "r": 432.62808, "b": 232.21227999999996, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "eeeeee456", "bbox": {"l": 432.63177, "t": 223.35815000000002, "r": 482.27231, "b": 232.16614000000004, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "\u0085", "bbox": {"l": 380.19003, "t": 238.56719999999996, "r": 386.56061, "b": 246.46118, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "\u0085", "bbox": {"l": 393.94675, "t": 238.34564, "r": 399.48636, "b": 247.15363000000002, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 216.84520999999995, "r": 305.28674, "b": 234.41669000000002, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "\u0085", "bbox": {"l": 380.18979, "t": 253.55542000000003, "r": 386.56036, "b": 261.44939999999997, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "\u0085", "bbox": {"l": 393.9465, "t": 253.33385999999996, "r": 399.48611, "b": 262.14185, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "\u0085", "bbox": {"l": 380.18979, "t": 268.51239, "r": 386.56036, "b": 276.40637000000004, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "\u0085", "bbox": {"l": 393.9465, "t": 268.29083, "r": 399.48611, "b": 277.09882000000005, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "\u0085", "bbox": {"l": 380.18979, "t": 283.49985, "r": 386.56036, "b": 291.3938, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "\u0085", "bbox": {"l": 393.9465, "t": 283.27823, "r": 399.48611, "b": 292.08624, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Row Permission", "bbox": {"l": 145.49409, "t": 259.80902000000003, "r": 224.43881, "b": 270.33429, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": ":", "bbox": {"l": 224.43390000000002, "t": 259.80902000000003, "r": 227.83154, "b": 270.34662000000003, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "WHERE NAME <> \u0091CAIN\u0092", "bbox": {"l": 145.49409, "t": 289.35373, "r": 267.97665, "b": 299.89133, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "s", "bbox": {"l": 304.82001, "t": 255.23577999999998, "r": 309.67026, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "p", "bbox": {"l": 309.68259, "t": 255.23577999999998, "r": 316.18243, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "in", "bbox": {"l": 316.17621, "t": 255.23577999999998, "r": 325.67731, "b": 266.24114999999995, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "thru", "bbox": {"l": 304.45065, "t": 270.00811999999996, "r": 326.05524, "b": 281.01349, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "rec", "bbox": {"l": 296.51059, "t": 284.78042999999997, "r": 311.95633, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "ords", "bbox": {"l": 311.84555, "t": 284.78042999999997, "r": 334.01147, "b": 295.78583, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "\u0085", "bbox": {"l": 380.18979, "t": 298.48804, "r": 386.56036, "b": 306.38199, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "\u0085", "bbox": {"l": 393.9465, "t": 298.26642, "r": 399.48611, "b": 307.07443, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "\u0085", "bbox": {"l": 380.18979, "t": 313.44501, "r": 386.56036, "b": 321.33896, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "\u0085", "bbox": {"l": 393.9465, "t": 313.22339, "r": 399.48611, "b": 322.0314, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "1000001", "bbox": {"l": 353.81491, "t": 328.43283, "r": 386.56885, "b": 336.32678, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "123", "bbox": {"l": 393.9465, "t": 328.21121, "r": 410.56259, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "CAIN", "bbox": {"l": 410.5654, "t": 328.7559499999999, "r": 432.62787, "b": 337.0654, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "vvvvvv456", "bbox": {"l": 432.63159, "t": 328.21121, "r": 482.27213000000006, "b": 337.01923, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 323.94492, "r": 305.28674, "b": 341.51636, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "1000002", "bbox": {"l": 353.81491, "t": 343.42062, "r": 386.56885, "b": 351.31458, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "123", "bbox": {"l": 393.94669, "t": 343.19901, "r": 410.56277, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "CAIN", "bbox": {"l": 410.56555, "t": 343.74374, "r": 432.62802000000005, "b": 352.05319, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "wwwwww456", "bbox": {"l": 432.63170999999994, "t": 343.19901, "r": 482.27224999999993, "b": 352.00702, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "1000003", "bbox": {"l": 353.81491, "t": 358.37759, "r": 386.56885, "b": 366.27155, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "123", "bbox": {"l": 393.94669, "t": 358.15598, "r": 410.56277, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "CAIN", "bbox": {"l": 410.56555, "t": 358.70071, "r": 432.62802000000005, "b": 367.01016, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "xxxxxx456", "bbox": {"l": 432.63170999999994, "t": 358.15598, "r": 482.27224999999993, "b": 366.96399, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "GLYPH", "bbox": {"l": 293.21759, "t": 368.69284, "r": 303.44025, "b": 386.26428, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "\u00d7", "bbox": {"l": 295.06409, "t": 352.53653, "r": 305.28674, "b": 370.10797, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "1000004", "bbox": {"l": 353.81491, "t": 373.36545, "r": 386.56885, "b": 381.25939999999997, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "123", "bbox": {"l": 393.94669, "t": 373.14383, "r": 410.56277, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "BEDOYA", "bbox": {"l": 410.56555, "t": 373.68857, "r": 443.64264, "b": 381.99802, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": "yyyy456", "bbox": {"l": 443.68048, "t": 373.14383, "r": 482.27039, "b": 381.95184, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "1000005", "bbox": {"l": 353.81583, "t": 388.35287, "r": 386.56976, "b": 396.24683, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "123", "bbox": {"l": 393.9476, "t": 388.13126, "r": 410.56369, "b": 396.93927, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "BEDOYA", "bbox": {"l": 410.56647, "t": 388.67599, "r": 443.64354999999995, "b": 396.98544, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "zzzz456", "bbox": {"l": 443.6814, "t": 388.13126, "r": 482.2713, "b": 396.93927, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 122, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.56109619140625, "t": 754.820068359375, "r": 517.96918, "b": 763.9142456054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9531034231185913, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 122, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.158935546875, "t": 754.1790161132812, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9219108819961548, "cells": [{"id": 1, "text": "107", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "107"}]}}, {"page_no": 123, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.37716674804688, "t": 754.4281616210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9158027768135071, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.70913696289062, "t": 754.5992431640625, "r": 339.81958, "b": 764.000732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9243242740631104, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.47494506835938, "t": 70.6369857788086, "r": 547.22571, "b": 92.73275756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9781896471977234, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.47486877441406, "t": 99.36483764648438, "r": 547.35034, "b": 145.75274658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9809828400611877, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 150.78724670410156, "t": 152.71084594726562, "r": 451.01605, "b": 162.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7630197405815125, "cells": [{"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 150.4237060546875, "t": 169.4068603515625, "r": 532.72491, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9614198207855225, "cells": [{"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.3337173461914, "t": 230.51942443847656, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9671851992607117, "cells": [{"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.83189392089844, "t": 264.0419616699219, "r": 547.30225, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9809823036193848, "cells": [{"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.41940307617188, "t": 309.37554931640625, "r": 547.19684, "b": 331.70084, "coord_origin": "TOPLEFT"}, "confidence": 0.9635169506072998, "cells": [{"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.9666290283203, "t": 360.73516845703125, "r": 533.77673, "b": 382.9076232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.973406195640564, "cells": [{"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.8269805908203, "t": 394.7623291015625, "r": 532.65228, "b": 417.0003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9747862815856934, "cells": [{"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.09215545654297, "t": 436.41485595703125, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9572468996047974, "cells": [{"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.16067504882812, "t": 462.88629150390625, "r": 416.49878, "b": 472.83758544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9524036049842834, "cells": [{"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.7001190185547, "t": 484.599365234375, "r": 547.25665, "b": 542.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9841123223304749, "cells": [{"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 136.0422821044922, "t": 554.6649780273438, "r": 547.2804, "b": 588.73972, "coord_origin": "TOPLEFT"}, "confidence": 0.9792662262916565, "cells": [{"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "caption", "bbox": {"l": 64.23851013183594, "t": 600.50146484375, "r": 277.07000732421875, "b": 610.2802124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.8750464916229248, "cells": [{"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "code", "bbox": {"l": 64.16464233398438, "t": 618.1095581054688, "r": 414.59515, "b": 736.5281982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.8303214311599731, "cells": [{"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 123, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37716674804688, "t": 754.4281616210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9158027768135071, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "108"}, {"label": "page_footer", "id": 1, "page_no": 123, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.70913696289062, "t": 754.5992431640625, "r": 339.81958, "b": 764.000732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9243242740631104, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 123, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.47494506835938, "t": 70.6369857788086, "r": 547.22571, "b": 92.73275756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9781896471977234, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table."}, {"label": "list_item", "id": 3, "page_no": 123, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.47486877441406, "t": 99.36483764648438, "r": 547.35034, "b": 145.75274658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9809828400611877, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message:"}, {"label": "text", "id": 4, "page_no": 123, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.78724670410156, "t": 152.71084594726562, "r": 451.01605, "b": 162.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7630197405815125, "cells": [{"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions."}, {"label": "text", "id": 5, "page_no": 123, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4237060546875, "t": 169.4068603515625, "r": 532.72491, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9614198207855225, "cells": [{"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission."}, {"label": "section_header", "id": 6, "page_no": 123, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.3337173461914, "t": 230.51942443847656, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9671851992607117, "cells": [{"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "6.8 Avoiding propagation of masked data"}, {"label": "text", "id": 7, "page_no": 123, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83189392089844, "t": 264.0419616699219, "r": 547.30225, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9809823036193848, "cells": [{"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control."}, {"label": "text", "id": 8, "page_no": 123, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.41940307617188, "t": 309.37554931640625, "r": 547.19684, "b": 331.70084, "coord_origin": "TOPLEFT"}, "confidence": 0.9635169506072998, "cells": [{"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error:"}, {"label": "text", "id": 9, "page_no": 123, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2"}, {"label": "text", "id": 10, "page_no": 123, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.9666290283203, "t": 360.73516845703125, "r": 533.77673, "b": 382.9076232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.973406195640564, "cells": [{"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}]}, "text": "The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint."}, {"label": "text", "id": 11, "page_no": 123, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.8269805908203, "t": 394.7623291015625, "r": 532.65228, "b": 417.0003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9747862815856934, "cells": [{"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}]}, "text": "There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger."}, {"label": "section_header", "id": 12, "page_no": 123, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.09215545654297, "t": 436.41485595703125, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9572468996047974, "cells": [{"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.1 Check constraint solution"}, {"label": "text", "id": 13, "page_no": 123, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.16067504882812, "t": 462.88629150390625, "r": 416.49878, "b": 472.83758544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9524036049842834, "cells": [{"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}]}, "text": "One way to prevent this problem is to define a check constraint."}, {"label": "text", "id": 14, "page_no": 123, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.7001190185547, "t": 484.599365234375, "r": 547.25665, "b": 542.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9841123223304749, "cells": [{"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}]}, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements."}, {"label": "text", "id": 15, "page_no": 123, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.0422821044922, "t": 554.6649780273438, "r": 547.2804, "b": 588.73972, "coord_origin": "TOPLEFT"}, "confidence": 0.9792662262916565, "cells": [{"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}]}, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value."}, {"label": "caption", "id": 16, "page_no": 123, "cluster": {"id": 16, "label": "caption", "bbox": {"l": 64.23851013183594, "t": 600.50146484375, "r": 277.07000732421875, "b": 610.2802124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.8750464916229248, "cells": [{"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-4 Check constraint to avoid masked data"}, {"label": "code", "id": 17, "page_no": 123, "cluster": {"id": 17, "label": "code", "bbox": {"l": 64.16464233398438, "t": 618.1095581054688, "r": 414.59515, "b": 736.5281982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.8303214311599731, "cells": [{"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn"}], "body": [{"label": "list_item", "id": 2, "page_no": 123, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.47494506835938, "t": 70.6369857788086, "r": 547.22571, "b": 92.73275756835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9781896471977234, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8, "t": 71.65808000000015, "r": 141.78, "b": 80.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Scenario 2: Altering a table to activate RCAC requires that all applications using the table ", "bbox": {"l": 151.20016, "t": 71.50867000000005, "r": 547.22571, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "be ended. The alter table requires exclusive use of the table.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 417.98367, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 2: Altering a table to activate RCAC requires that all applications using the table be ended. The alter table requires exclusive use of the table."}, {"label": "list_item", "id": 3, "page_no": 123, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.47486877441406, "t": 99.36483764648438, "r": 547.35034, "b": 145.75274658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9809828400611877, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 100.6377, "r": 141.78, "b": 109.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Scenario 3: Altering the table to activate RCAC before the permissions are added. The ", "bbox": {"l": 151.20016, "t": 100.48828000000003, "r": 535.80072, "b": 109.70129000000009, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "alter table requires exclusive use of the table, as in scenario 2. All applications must be ", "bbox": {"l": 151.20016, "t": 112.48810000000014, "r": 536.8244, "b": 121.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ended to perform this alter. After the alter is complete, any applications trying to read data ", "bbox": {"l": 151.20018, "t": 124.48792000000003, "r": 547.35034, "b": 133.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "do not get any results, and attempts to insert new rows returns the following message:", "bbox": {"l": 151.20018, "t": 136.48773000000006, "r": 531.30865, "b": 145.70074, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scenario 3: Altering the table to activate RCAC before the permissions are added. The alter table requires exclusive use of the table, as in scenario 2. All applications must be ended to perform this alter. After the alter is complete, any applications trying to read data do not get any results, and attempts to insert new rows returns the following message:"}, {"label": "text", "id": 4, "page_no": 123, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.78724670410156, "t": 152.71084594726562, "r": 451.01605, "b": 162.89410400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.7630197405815125, "cells": [{"id": 10, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions. ", "bbox": {"l": 151.20018, "t": 153.67669999999998, "r": 451.01605, "b": 162.45147999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SQ20471] INSERT or UPDATE does not satisfy row permissions."}, {"label": "text", "id": 5, "page_no": 123, "cluster": {"id": 5, "label": "text", "bbox": {"l": 150.4237060546875, "t": 169.4068603515625, "r": 532.72491, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9614198207855225, "cells": [{"id": 11, "text": "To create a permission in this case requires that you end all the applications, unlike ", "bbox": {"l": 151.20018, "t": 170.50707999999997, "r": 520.22693, "b": 179.72009000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "scenario 1 where permissions can be added while the applications were active. In this ", "bbox": {"l": 151.20018, "t": 182.50689999999997, "r": 532.72491, "b": 191.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "case, the applications must be ended to run the create permission.", "bbox": {"l": 151.20016, "t": 194.50671, "r": 445.84579, "b": 203.71973000000003, "coord_origin": "TOPLEFT"}}]}, "text": "To create a permission in this case requires that you end all the applications, unlike scenario 1 where permissions can be added while the applications were active. In this case, the applications must be ended to run the create permission."}, {"label": "section_header", "id": 6, "page_no": 123, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.3337173461914, "t": 230.51942443847656, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9671851992607117, "cells": [{"id": 14, "text": "6.8", "bbox": {"l": 64.800003, "t": 232.20068000000003, "r": 87.224396, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Avoiding propagation of masked data", "bbox": {"l": 91.709259, "t": 232.20068000000003, "r": 380.35474, "b": 246.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "6.8 Avoiding propagation of masked data"}, {"label": "text", "id": 7, "page_no": 123, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83189392089844, "t": 264.0419616699219, "r": 547.30225, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9809823036193848, "cells": [{"id": 16, "text": "Operations such as insert or update into a table with active column access control can fail if ", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 542.45679, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "the input data is masked data. This can happen when data to be inserted or updated contains ", "bbox": {"l": 136.8, "t": 276.52837999999997, "r": 547.30225, "b": 285.74139, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the masked value as a result of a ", "bbox": {"l": 136.8, "t": 288.52823, "r": 285.78268, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "SELECT", "bbox": {"l": 285.77969, "t": 288.67761, "r": 315.77921, "b": 297.50219999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " from a table with active column access control.", "bbox": {"l": 315.77921, "t": 288.52823, "r": 524.6864, "b": 297.74120999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Operations such as insert or update into a table with active column access control can fail if the input data is masked data. This can happen when data to be inserted or updated contains the masked value as a result of a SELECT from a table with active column access control."}, {"label": "text", "id": 8, "page_no": 123, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.41940307617188, "t": 309.37554931640625, "r": 547.19684, "b": 331.70084, "coord_origin": "TOPLEFT"}, "confidence": 0.9635169506072998, "cells": [{"id": 21, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, ", "bbox": {"l": 136.799, "t": 310.48804, "r": 547.19684, "b": 319.7010200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "selecting data from TABLE2 returns the masked data. The following INSERT returns an error:", "bbox": {"l": 136.799, "t": 322.48785, "r": 547.17798, "b": 331.70084, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume TABLE1 and TABLE2 have active column access control and for insert, selecting data from TABLE2 returns the masked data. The following INSERT returns an error:"}, {"label": "text", "id": 9, "page_no": 123, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 23, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2", "bbox": {"l": 136.799, "t": 339.67682, "r": 331.6763, "b": 348.4516, "coord_origin": "TOPLEFT"}}]}, "text": "INSERT INTO TABLE1 SELECT * FROM TABLE2"}, {"label": "text", "id": 10, "page_no": 123, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.9666290283203, "t": 360.73516845703125, "r": 533.77673, "b": 382.9076232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.973406195640564, "cells": [{"id": 24, "text": "The masked data that is returned from the ", "bbox": {"l": 136.799, "t": 361.48724, "r": 325.64349, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SELECT * FROM TABLE2", "bbox": {"l": 325.7392, "t": 361.63662999999997, "r": 425.638, "b": 370.46121, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " might not be valid input ", "bbox": {"l": 425.69876, "t": 361.48724, "r": 533.77673, "b": 370.70023, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "data for TABLE1 because of data type or column check constraint.", "bbox": {"l": 136.79898, "t": 373.48706, "r": 428.83823, "b": 382.70004, "coord_origin": "TOPLEFT"}}]}, "text": "The masked data that is returned from the SELECT * FROM TABLE2 might not be valid input data for TABLE1 because of data type or column check constraint."}, {"label": "text", "id": 11, "page_no": 123, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.8269805908203, "t": 394.7623291015625, "r": 532.65228, "b": 417.0003662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9747862815856934, "cells": [{"id": 28, "text": "There are two ways to prevent this situation from happening: Define a check constraint or ", "bbox": {"l": 136.79898, "t": 395.50661999999994, "r": 532.65228, "b": 404.7196, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "create a before trigger. ", "bbox": {"l": 136.79898, "t": 407.50644000000005, "r": 240.03132999999997, "b": 416.71942, "coord_origin": "TOPLEFT"}}]}, "text": "There are two ways to prevent this situation from happening: Define a check constraint or create a before trigger."}, {"label": "section_header", "id": 12, "page_no": 123, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.09215545654297, "t": 436.41485595703125, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}, "confidence": 0.9572468996047974, "cells": [{"id": 30, "text": "6.8.1", "bbox": {"l": 64.800003, "t": 437.33475, "r": 94.18383, "b": 449.32272, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Check constraint solution", "bbox": {"l": 97.856804, "t": 437.33475, "r": 260.10202, "b": 449.32272, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.1 Check constraint solution"}, {"label": "text", "id": 13, "page_no": 123, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.16067504882812, "t": 462.88629150390625, "r": 416.49878, "b": 472.83758544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9524036049842834, "cells": [{"id": 32, "text": "One way to prevent this problem is to define a check constraint.", "bbox": {"l": 136.8, "t": 463.48874, "r": 416.49878, "b": 472.70172, "coord_origin": "TOPLEFT"}}]}, "text": "One way to prevent this problem is to define a check constraint."}, {"label": "text", "id": 14, "page_no": 123, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.7001190185547, "t": 484.599365234375, "r": 547.25665, "b": 542.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9841123223304749, "cells": [{"id": 33, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a ", "bbox": {"l": 136.8, "t": 485.5083, "r": 530.50873, "b": 494.72128, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "violation of the check constraints check condition occurs instead of giving that error. However, ", "bbox": {"l": 136.8, "t": 497.50812, "r": 547.25665, "b": 506.7211, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "if the check condition is still not met after the action, a hard error is returned. A check ", "bbox": {"l": 136.8, "t": 509.50793, "r": 513.95343, "b": 518.72092, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "constraint with the new on-violation-clause is allowed on both the ", "bbox": {"l": 136.8, "t": 521.50775, "r": 426.2395, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE", "bbox": {"l": 426.23962, "t": 521.65714, "r": 486.1788900000001, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " and ", "bbox": {"l": 486.1799, "t": 521.50775, "r": 508.43851, "b": 530.72073, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ALTER ", "bbox": {"l": 508.4395099999999, "t": 521.65714, "r": 538.37927, "b": 530.48172, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "TABLE", "bbox": {"l": 136.80002, "t": 533.65695, "r": 161.75978, "b": 542.4815100000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " statements.", "bbox": {"l": 161.75978, "t": 533.5075400000001, "r": 216.09458999999998, "b": 542.72055, "coord_origin": "TOPLEFT"}}]}, "text": "As part of RCAC, new SQL syntax is provided to allow an action to be performed when a violation of the check constraints check condition occurs instead of giving that error. However, if the check condition is still not met after the action, a hard error is returned. A check constraint with the new on-violation-clause is allowed on both the CREATE TABLE and ALTER TABLE statements."}, {"label": "text", "id": 15, "page_no": 123, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.0422821044922, "t": 554.6649780273438, "r": 547.2804, "b": 588.73972, "coord_origin": "TOPLEFT"}, "confidence": 0.9792662262916565, "cells": [{"id": 42, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that ", "bbox": {"l": 136.80002, "t": 555.52711, "r": 547.17096, "b": 564.74011, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "is not done by a user profile in the DBMGR group. The constraint checks that the column SSN ", "bbox": {"l": 136.80002, "t": 567.52692, "r": 547.2804, "b": 576.73991, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "does not have the masked value.", "bbox": {"l": 136.80002, "t": 579.5267200000001, "r": 282.49396, "b": 588.73972, "coord_origin": "TOPLEFT"}}]}, "text": "In the Example 6-4, the mask is defined to return a value of \u2019XXX-XX-nnnn\u2019 for any query that is not done by a user profile in the DBMGR group. The constraint checks that the column SSN does not have the masked value."}, {"label": "caption", "id": 16, "page_no": 123, "cluster": {"id": 16, "label": "caption", "bbox": {"l": 64.23851013183594, "t": 600.50146484375, "r": 277.07000732421875, "b": 610.2802124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.8750464916229248, "cells": [{"id": 45, "text": "Example 6-4 Check constraint to avoid masked data", "bbox": {"l": 64.800003, "t": 601.5178999999999, "r": 276.75806, "b": 609.84291, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-4 Check constraint to avoid masked data"}, {"label": "code", "id": 17, "page_no": 123, "cluster": {"id": 17, "label": "code", "bbox": {"l": 64.16464233398438, "t": 618.1095581054688, "r": 414.59515, "b": 736.5281982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.8303214311599731, "cells": [{"id": 46, "text": "CREATE SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 618.6780200000001, "r": 164.69879, "b": 627.45277, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "SET SCHEMA MY_LIB", "bbox": {"l": 64.800003, "t": 630.67783, "r": 149.69904, "b": 639.45258, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CREATE TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 642.67763, "r": 204.71805, "b": 651.45238, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "(COL1_name CHAR(10) WITH DEFAULT 'DEFAULT',", "bbox": {"l": 119.66983, "t": 654.67743, "r": 414.59515, "b": 663.45218, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT')", "bbox": {"l": 126.86674, "t": 666.67724, "r": 409.61517, "b": 675.452, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO", "bbox": {"l": 64.800003, "t": 678.67705, "r": 259.67731, "b": 687.45181, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN COL2_ssn RETURN", "bbox": {"l": 64.800003, "t": 690.67686, "r": 194.6983, "b": 699.4516140000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "CASE", "bbox": {"l": 64.800003, "t": 702.676666, "r": 84.77977, "b": 711.451424, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": " WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1", "bbox": {"l": 64.800003, "t": 714.676476, "r": 359.63589, "b": 723.451233, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": " THEN COL2_ssn", "bbox": {"l": 64.800003, "t": 726.676285, "r": 139.73904, "b": 735.451042, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE SCHEMA MY_LIB SET SCHEMA MY_LIB CREATE TABLE MY_LIB.EMP_INFO (COL1_name CHAR(10) WITH DEFAULT 'DEFAULT', COL2_ssn CHAR(11) WITH DEFAULT 'DEFAULT') CREATE MASK MASK_ssn ON MY_LIB.EMP_INFO FOR COLUMN COL2_ssn RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBMGR' ) = 1 THEN COL2_ssn"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 123, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37716674804688, "t": 754.4281616210938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9158027768135071, "cells": [{"id": 0, "text": "108 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "108"}, {"label": "page_footer", "id": 1, "page_no": 123, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.70913696289062, "t": 754.5992431640625, "r": 339.81958, "b": 764.000732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9243242740631104, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 124, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.6949157714844, "t": 754.8876342773438, "r": 517.96918, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9537138938903809, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.17626953125, "t": 754.1600341796875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9287368059158325, "cells": [{"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 63.44700622558594, "t": 70.49668884277344, "r": 546.8219604492188, "b": 191.2418975830078, "coord_origin": "TOPLEFT"}, "confidence": 0.8540793061256409, "cells": [{"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.23657989501953, "t": 215.09384155273438, "r": 240.54407, "b": 228.5045623779297, "coord_origin": "TOPLEFT"}, "confidence": 0.9668058753013611, "cells": [{"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.24661254882812, "t": 241.2919464111328, "r": 547.31934, "b": 263.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9730713963508606, "cells": [{"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 136.40687561035156, "t": 276.0124816894531, "r": 336.7406311035156, "b": 285.537841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.6352336406707764, "cells": [{"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "code", "bbox": {"l": 135.9194793701172, "t": 291.04913330078125, "r": 506.87237548828125, "b": 412.2622375488281, "coord_origin": "TOPLEFT"}, "confidence": 0.7042911648750305, "cells": [{"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.4358139038086, "t": 445.3469543457031, "r": 360.91705, "b": 462.0101318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.968204915523529, "cells": [{"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90432739257812, "t": 477.2076721191406, "r": 547.24677, "b": 536.2446899414062, "coord_origin": "TOPLEFT"}, "confidence": 0.984616219997406, "cells": [{"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.1463851928711, "t": 555.9064331054688, "r": 151.61127, "b": 569.22412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9636334180831909, "cells": [{"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.57107543945312, "t": 582.0809936523438, "r": 547.28851, "b": 627.99658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859280586242676, "cells": [{"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 124, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6949157714844, "t": 754.8876342773438, "r": 517.96918, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9537138938903809, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 124, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.17626953125, "t": 754.1600341796875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9287368059158325, "cells": [{"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "109"}, {"label": "code", "id": 2, "page_no": 124, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.44700622558594, "t": 70.49668884277344, "r": 546.8219604492188, "b": 191.2418975830078, "coord_origin": "TOPLEFT"}, "confidence": 0.8540793061256409, "cells": [{"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value."}, {"label": "section_header", "id": 3, "page_no": 124, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.23657989501953, "t": 215.09384155273438, "r": 240.54407, "b": 228.5045623779297, "coord_origin": "TOPLEFT"}, "confidence": 0.9668058753013611, "cells": [{"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.2 Before trigger solution"}, {"label": "text", "id": 4, "page_no": 124, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.24661254882812, "t": 241.2919464111328, "r": 547.31934, "b": 263.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9730713963508606, "cells": [{"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5."}, {"label": "caption", "id": 5, "page_no": 124, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.40687561035156, "t": 276.0124816894531, "r": 336.7406311035156, "b": 285.537841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.6352336406707764, "cells": [{"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-5 Before trigger to avoid masked data"}, {"label": "code", "id": 6, "page_no": 124, "cluster": {"id": 6, "label": "code", "bbox": {"l": 135.9194793701172, "t": 291.04913330078125, "r": 506.87237548828125, "b": 412.2622375488281, "coord_origin": "TOPLEFT"}, "confidence": 0.7042911648750305, "cells": [{"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 7, "page_no": 124, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.4358139038086, "t": 445.3469543457031, "r": 360.91705, "b": 462.0101318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.968204915523529, "cells": [{"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.9 Triggers and functions (SECURED)"}, {"label": "text", "id": 8, "page_no": 124, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90432739257812, "t": 477.2076721191406, "r": 547.24677, "b": 536.2446899414062, "coord_origin": "TOPLEFT"}, "confidence": 0.984616219997406, "cells": [{"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}]}, "text": "There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see."}, {"label": "section_header", "id": 9, "page_no": 124, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.1463851928711, "t": 555.9064331054688, "r": 151.61127, "b": 569.22412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9636334180831909, "cells": [{"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.1 Triggers"}, {"label": "text", "id": 10, "page_no": 124, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.57107543945312, "t": 582.0809936523438, "r": 547.28851, "b": 627.99658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859280586242676, "cells": [{"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}]}, "text": "Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission."}], "body": [{"label": "code", "id": 2, "page_no": 124, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.44700622558594, "t": 70.49668884277344, "r": 546.8219604492188, "b": 191.2418975830078, "coord_origin": "TOPLEFT"}, "confidence": 0.8540793061256409, "cells": [{"id": 2, "text": " ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4)", "bbox": {"l": 64.800385, "t": 71.65845000000002, "r": 254.69768999999997, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "END", "bbox": {"l": 64.800385, "t": 83.65826000000004, "r": 79.740387, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ENABLE", "bbox": {"l": 64.800385, "t": 95.65808000000015, "r": 94.74015, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "|", "bbox": {"l": 64.800385, "t": 107.65790000000004, "r": 69.780388, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "/* Check constraint for the update and insert.*/", "bbox": {"l": 64.800385, "t": 119.65770999999995, "r": 304.61722, "b": 128.4325, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE MY_LIB.EMP_INFO", "bbox": {"l": 64.800385, "t": 131.65752999999995, "r": 199.67868, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT MASK_ssn_preserve", "bbox": {"l": 75.381416, "t": 143.65734999999995, "r": 244.67795000000004, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ", "bbox": {"l": 75.169739, "t": 155.65716999999995, "r": 479.57458, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value", "bbox": {"l": 75.00663, "t": 167.65697999999998, "r": 544.49384, "b": 176.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON INSERT VIOLATION SET COL2_ssn = DEFAULT", "bbox": {"l": 75.238907, "t": 179.65679999999998, "r": 294.44788, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "-- for insert set this to the default value.", "bbox": {"l": 304.88638, "t": 179.65679999999998, "r": 534.53387, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ELSE 'XXX-XX-'||SUBSTR(COL2_ssn,8,4) END ENABLE | /* Check constraint for the update and insert.*/ ALTER TABLE MY_LIB.EMP_INFO ADD CONSTRAINT MASK_ssn_preserve CHECK(SUBSTR(COL2_ssn,1,7)<>'XXX-XX-') -- Allow any value other than the mask ON UPDATE VIOLATION PRESERVE COL2_ssn -- Don't update the mask portion of the existing value ON INSERT VIOLATION SET COL2_ssn = DEFAULT -- for insert set this to the default value."}, {"label": "section_header", "id": 3, "page_no": 124, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.23657989501953, "t": 215.09384155273438, "r": 240.54407, "b": 228.5045623779297, "coord_origin": "TOPLEFT"}, "confidence": 0.9668058753013611, "cells": [{"id": 13, "text": "6.8.2", "bbox": {"l": 64.800003, "t": 216.35468000000003, "r": 94.229622, "b": 228.34271, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Before trigger solution", "bbox": {"l": 97.908325, "t": 216.35468000000003, "r": 240.54407, "b": 228.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.8.2 Before trigger solution"}, {"label": "text", "id": 4, "page_no": 124, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.24661254882812, "t": 241.2919464111328, "r": 547.31934, "b": 263.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9730713963508606, "cells": [{"id": 15, "text": "The actions that are described in Example 6-4 on page 108 for ", "bbox": {"l": 136.8, "t": 242.50867000000005, "r": 415.47696, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "ON UPDATE VIOLATION", "bbox": {"l": 415.49969, "t": 242.65808000000004, "r": 510.17944000000006, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " and ", "bbox": {"l": 510.23923, "t": 242.50867000000005, "r": 532.31854, "b": 251.72168, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ON ", "bbox": {"l": 532.31958, "t": 242.65808000000004, "r": 547.31934, "b": 251.43286, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "INSERT VIOLATION", "bbox": {"l": 136.80002, "t": 254.65790000000004, "r": 216.71904000000004, "b": 263.43268, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": " also can be handled by a before trigger, as shown in Example 6-5.", "bbox": {"l": 216.77982, "t": 254.50847999999996, "r": 511.9704, "b": 263.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The actions that are described in Example 6-4 on page 108 for ON UPDATE VIOLATION and ON INSERT VIOLATION also can be handled by a before trigger, as shown in Example 6-5."}, {"label": "caption", "id": 5, "page_no": 124, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 136.40687561035156, "t": 276.0124816894531, "r": 336.7406311035156, "b": 285.537841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.6352336406707764, "cells": [{"id": 21, "text": "Example 6-5 Before trigger to avoid masked data", "bbox": {"l": 136.8, "t": 276.55798000000004, "r": 336.43527, "b": 284.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-5 Before trigger to avoid masked data"}, {"label": "code", "id": 6, "page_no": 124, "cluster": {"id": 6, "label": "code", "bbox": {"l": 135.9194793701172, "t": 291.04913330078125, "r": 506.87237548828125, "b": 412.2622375488281, "coord_origin": "TOPLEFT"}, "confidence": 0.7042911648750305, "cells": [{"id": 22, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 293.65811, "r": 506.5749200000001, "b": 302.43289, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 305.65793, "r": 321.65756, "b": 314.43271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 317.65775, "r": 256.73828, "b": 326.43253, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "SECURED", "bbox": {"l": 136.8, "t": 329.65756, "r": 171.77951, "b": 338.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 341.65738, "r": 336.65732, "b": 350.43216, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "BEGIN", "bbox": {"l": 136.8, "t": 353.6572, "r": 161.75977, "b": 362.43198, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 365.65700999999996, "r": 351.65707, "b": 374.43179000000003, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 377.65683000000007, "r": 381.65659, "b": 386.43161, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END IF;", "bbox": {"l": 136.8, "t": 389.65665, "r": 171.77951, "b": 398.43143, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "END", "bbox": {"l": 136.8, "t": 401.6564599999999, "r": 151.74001, "b": 410.43124, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 7, "page_no": 124, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.4358139038086, "t": 445.3469543457031, "r": 360.91705, "b": 462.0101318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.968204915523529, "cells": [{"id": 32, "text": "6.9", "bbox": {"l": 64.800003, "t": 446.2207, "r": 87.247795, "b": 460.9837, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Triggers and functions (SECURED)", "bbox": {"l": 91.737335, "t": 446.2207, "r": 360.91705, "b": 460.9837, "coord_origin": "TOPLEFT"}}]}, "text": "6.9 Triggers and functions (SECURED)"}, {"label": "text", "id": 8, "page_no": 124, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90432739257812, "t": 477.2076721191406, "r": 547.24677, "b": 536.2446899414062, "coord_origin": "TOPLEFT"}, "confidence": 0.984616219997406, "cells": [{"id": 34, "text": "There are some considerations that must be considered when there are triggers and ", "bbox": {"l": 136.8, "t": 478.48874, "r": 511.73724000000004, "b": 487.70172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "functions on tables that have RCAC enabled. The purpose of SECURE for triggers and ", "bbox": {"l": 136.8, "t": 490.54831, "r": 522.49512, "b": 499.76129, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "functions is so that a user who is allowed to create a trigger or function is not necessarily able ", "bbox": {"l": 136.8, "t": 502.54813, "r": 547.24677, "b": 511.76111, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "to make it SECURE themselves. This prevents the trigger/function developer from adding ", "bbox": {"l": 136.8, "t": 514.5479399999999, "r": 532.30658, "b": 523.7609299999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "code that skims off data that they are not allowed to see.", "bbox": {"l": 136.8, "t": 526.5477599999999, "r": 386.24026, "b": 535.7607399999999, "coord_origin": "TOPLEFT"}}]}, "text": "There are some considerations that must be considered when there are triggers and functions on tables that have RCAC enabled. The purpose of SECURE for triggers and functions is so that a user who is allowed to create a trigger or function is not necessarily able to make it SECURE themselves. This prevents the trigger/function developer from adding code that skims off data that they are not allowed to see."}, {"label": "section_header", "id": 9, "page_no": 124, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.1463851928711, "t": 555.9064331054688, "r": 151.61127, "b": 569.22412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9636334180831909, "cells": [{"id": 39, "text": "6.9.1", "bbox": {"l": 64.800003, "t": 556.37462, "r": 94.489105, "b": 568.36263, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Triggers", "bbox": {"l": 98.200249, "t": 556.37462, "r": 151.61127, "b": 568.36263, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.1 Triggers"}, {"label": "text", "id": 10, "page_no": 124, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.57107543945312, "t": 582.0809936523438, "r": 547.28851, "b": 627.99658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859280586242676, "cells": [{"id": 41, "text": "Triggers have access to the data in rows outside of the row permission or column masking. ", "bbox": {"l": 136.8, "t": 582.52863, "r": 539.66608, "b": 591.74162, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "An after trigger has access to the new row image after the permission has allowed the update ", "bbox": {"l": 136.80002, "t": 594.52843, "r": 547.28851, "b": 603.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "or insert to occur. Therefore, the triggers can potentially change the insert or update image ", "bbox": {"l": 136.80002, "t": 606.52823, "r": 539.64722, "b": 615.74123, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "value so that it violates the permission.", "bbox": {"l": 136.80002, "t": 618.52803, "r": 308.52338, "b": 627.74103, "coord_origin": "TOPLEFT"}}]}, "text": "Triggers have access to the data in rows outside of the row permission or column masking. An after trigger has access to the new row image after the permission has allowed the update or insert to occur. Therefore, the triggers can potentially change the insert or update image value so that it violates the permission."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 124, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.6949157714844, "t": 754.8876342773438, "r": 517.96918, "b": 763.9262084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9537138938903809, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 124, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.17626953125, "t": 754.1600341796875, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9287368059158325, "cells": [{"id": 1, "text": "109", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "109"}]}}, {"page_no": 125, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.38241577148438, "t": 754.223876953125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262574315071106, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.55854797363281, "t": 754.67041015625, "r": 339.81958, "b": 764.0196533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9510535597801208, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9443817138672, "t": 70.57403564453125, "r": 547.19171, "b": 116.93487548828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9825777411460876, "cells": [{"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.2041778564453, "t": 128.47238159179688, "r": 269.5399475097656, "b": 138.4495086669922, "coord_origin": "TOPLEFT"}, "confidence": 0.6751627326011658, "cells": [{"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "code", "bbox": {"l": 135.4769287109375, "t": 144.5382080078125, "r": 506.97552490234375, "b": 277.2768249511719, "coord_origin": "TOPLEFT"}, "confidence": 0.8320841193199158, "cells": [{"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.11894226074219, "t": 302.4302978515625, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9550953507423401, "cells": [{"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.63002014160156, "t": 328.42071533203125, "r": 547.26648, "b": 362.8425598144531, "coord_origin": "TOPLEFT"}, "confidence": 0.9755208492279053, "cells": [{"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "code", "bbox": {"l": 134.9473114013672, "t": 375.2805480957031, "r": 547.4903564453125, "b": 525.2118530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7434961199760437, "cells": [{"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.8338165283203, "t": 540.63720703125, "r": 547.25848, "b": 586.96923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799280166625977, "cells": [{"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.09840393066406, "t": 598.6279296875, "r": 282.67517, "b": 608.9580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7475109100341797, "cells": [{"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.61990356445312, "t": 615.7908935546875, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}, "confidence": 0.8809047937393188, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.3736572265625, "t": 632.4197387695312, "r": 547.14795, "b": 654.8876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.6744217872619629, "cells": [{"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 150.47885131835938, "t": 661.2188720703125, "r": 517.91437, "b": 683.71825, "coord_origin": "TOPLEFT"}, "confidence": 0.704971969127655, "cells": [{"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 150.35072326660156, "t": 690.4181518554688, "r": 523.39453, "b": 713.2664794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.856052815914154, "cells": [{"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 125, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.38241577148438, "t": 754.223876953125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262574315071106, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "110"}, {"label": "page_footer", "id": 1, "page_no": 125, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55854797363281, "t": 754.67041015625, "r": 339.81958, "b": 764.0196533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9510535597801208, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 125, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9443817138672, "t": 70.57403564453125, "r": 547.19171, "b": 116.93487548828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9825777411460876, "cells": [{"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over."}, {"label": "caption", "id": 3, "page_no": 125, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2041778564453, "t": 128.47238159179688, "r": 269.5399475097656, "b": 138.4495086669922, "coord_origin": "TOPLEFT"}, "confidence": 0.6751627326011658, "cells": [{"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-6 Trigger SECURED"}, {"label": "code", "id": 4, "page_no": 125, "cluster": {"id": 4, "label": "code", "bbox": {"l": 135.4769287109375, "t": 144.5382080078125, "r": 506.97552490234375, "b": 277.2768249511719, "coord_origin": "TOPLEFT"}, "confidence": 0.8320841193199158, "cells": [{"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 5, "page_no": 125, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.11894226074219, "t": 302.4302978515625, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9550953507423401, "cells": [{"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.2 Functions"}, {"label": "text", "id": 6, "page_no": 125, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.63002014160156, "t": 328.42071533203125, "r": 547.26648, "b": 362.8425598144531, "coord_origin": "TOPLEFT"}, "confidence": 0.9755208492279053, "cells": [{"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}]}, "text": "Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7."}, {"label": "code", "id": 7, "page_no": 125, "cluster": {"id": 7, "label": "code", "bbox": {"l": 134.9473114013672, "t": 375.2805480957031, "r": 547.4903564453125, "b": 525.2118530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7434961199760437, "cells": [{"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED"}, {"label": "text", "id": 8, "page_no": 125, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8338165283203, "t": 540.63720703125, "r": 547.25848, "b": 586.96923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799280166625977, "cells": [{"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}]}, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure."}, {"label": "text", "id": 9, "page_no": 125, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09840393066406, "t": 598.6279296875, "r": 282.67517, "b": 608.9580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7475109100341797, "cells": [{"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following examples:"}, {"label": "list_item", "id": 10, "page_no": 125, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.61990356445312, "t": 615.7908935546875, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}, "confidence": 0.8809047937393188, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1."}, {"label": "list_item", "id": 11, "page_no": 125, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3736572265625, "t": 632.4197387695312, "r": 547.14795, "b": 654.8876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.6744217872619629, "cells": [{"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}]}, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED."}, {"label": "list_item", "id": 12, "page_no": 125, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.47885131835938, "t": 661.2188720703125, "r": 517.91437, "b": 683.71825, "coord_origin": "TOPLEFT"}, "confidence": 0.704971969127655, "cells": [{"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}]}, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly selected."}, {"label": "text", "id": 13, "page_no": 125, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35072326660156, "t": 690.4181518554688, "r": 523.39453, "b": 713.2664794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.856052815914154, "cells": [{"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}]}, "text": "This same rule applies for any function that might be invoked with a masked column specified as an argument."}], "body": [{"label": "text", "id": 2, "page_no": 125, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9443817138672, "t": 70.57403564453125, "r": 547.19171, "b": 116.93487548828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9825777411460876, "cells": [{"id": 2, "text": "Any triggers that are defined on a table must be created with an attribute that designates that ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.19171, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "it is SECURED when RCAC definitions are created or altered for that table, as shown in ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 525.63544, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 546.29614, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "secure at the point RCAC is enabled for any of the underlying tables the view is over.", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 510.41656, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Any triggers that are defined on a table must be created with an attribute that designates that it is SECURED when RCAC definitions are created or altered for that table, as shown in Example 6-6. The same applies to a view that has an instead of trigger. That trigger must be secure at the point RCAC is enabled for any of the underlying tables the view is over."}, {"label": "caption", "id": 3, "page_no": 125, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2041778564453, "t": 128.47238159179688, "r": 269.5399475097656, "b": 138.4495086669922, "coord_origin": "TOPLEFT"}, "confidence": 0.6751627326011658, "cells": [{"id": 6, "text": "Example 6-6 Trigger SECURED", "bbox": {"l": 136.8, "t": 129.49805000000003, "r": 268.7634, "b": 137.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-6 Trigger SECURED"}, {"label": "code", "id": 4, "page_no": 125, "cluster": {"id": 4, "label": "code", "bbox": {"l": 135.4769287109375, "t": 144.5382080078125, "r": 506.97552490234375, "b": 277.2768249511719, "coord_origin": "TOPLEFT"}, "confidence": 0.8320841193199158, "cells": [{"id": 7, "text": "/* Trigger created with the SECURED attribute */ ", "bbox": {"l": 136.8, "t": 146.65808000000004, "r": 381.65662, "b": 155.43286, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO", "bbox": {"l": 136.8, "t": 158.65790000000004, "r": 506.5749200000001, "b": 167.43268, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "REFERENCING NEW ROW AS N OLD ROW AS O", "bbox": {"l": 136.8, "t": 170.65770999999995, "r": 321.65756, "b": 179.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "FOR EACH ROW MODE DB2ROW", "bbox": {"l": 136.8, "t": 182.65752999999995, "r": 256.73828, "b": 191.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "SECURED", "bbox": {"l": 136.8, "t": 194.65734999999995, "r": 171.77951, "b": 203.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-')", "bbox": {"l": 136.8, "t": 206.65716999999995, "r": 336.65732, "b": 215.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": " BEGIN", "bbox": {"l": 136.8, "t": 218.65697999999998, "r": 171.77951, "b": 227.43176000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " IF INSERTING THEN SET N.COL2_ssn = DEFAULT;", "bbox": {"l": 136.8, "t": 230.65679999999998, "r": 361.67685, "b": 239.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": " ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn;", "bbox": {"l": 136.8, "t": 242.65661999999998, "r": 391.61661, "b": 251.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END IF;", "bbox": {"l": 136.8, "t": 254.65643, "r": 181.73952, "b": 263.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "END", "bbox": {"l": 136.8, "t": 266.65625, "r": 151.74001, "b": 275.43102999999996, "coord_origin": "TOPLEFT"}}]}, "text": "/* Trigger created with the SECURED attribute */ CREATE TRIGGER PREVENT_MASK_SSN BEFORE INSERT OR UPDATE ON MY_LIB.EMP_INFO REFERENCING NEW ROW AS N OLD ROW AS O FOR EACH ROW MODE DB2ROW SECURED WHEN(SUBSTR(N.COL2_ssn,1,7) = 'XXX-XX-') BEGIN IF INSERTING THEN SET N.COL2_ssn = DEFAULT; ELSEIF UPDATING THEN SET N.COL2_ssn = O.COL2_ssn; END IF; END"}, {"label": "section_header", "id": 5, "page_no": 125, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.11894226074219, "t": 302.4302978515625, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9550953507423401, "cells": [{"id": 18, "text": "6.9.2", "bbox": {"l": 64.800003, "t": 303.35474, "r": 95.878601, "b": 315.34271, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Functions", "bbox": {"l": 99.763428, "t": 303.35474, "r": 166.5321, "b": 315.34271, "coord_origin": "TOPLEFT"}}]}, "text": "6.9.2 Functions"}, {"label": "text", "id": 6, "page_no": 125, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.63002014160156, "t": 328.42071533203125, "r": 547.26648, "b": 362.8425598144531, "coord_origin": "TOPLEFT"}, "confidence": 0.9755208492279053, "cells": [{"id": 20, "text": "Within a ", "bbox": {"l": 136.8, "t": 329.50872999999996, "r": 175.10915, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CREATE PERMISSION ", "bbox": {"l": 175.19978, "t": 329.65811, "r": 264.23819, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "or ", "bbox": {"l": 264.2402, "t": 329.50872999999996, "r": 275.93024, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CREATE MASK", "bbox": {"l": 275.70016, "t": 329.65811, "r": 330.17938, "b": 338.4827, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ", a function can be called. Because that UDF has ", "bbox": {"l": 330.18036, "t": 329.50872999999996, "r": 547.26648, "b": 338.72171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "access to the data before the RCAC rules are applied, the SECURE attribute is required on ", "bbox": {"l": 136.79997, "t": 341.50854, "r": 541.7995, "b": 350.72153, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "that function, as shown in Example 6-7.", "bbox": {"l": 136.79997, "t": 353.50836, "r": 311.13376, "b": 362.72134, "coord_origin": "TOPLEFT"}}]}, "text": "Within a CREATE PERMISSION or CREATE MASK , a function can be called. Because that UDF has access to the data before the RCAC rules are applied, the SECURE attribute is required on that function, as shown in Example 6-7."}, {"label": "code", "id": 7, "page_no": 125, "cluster": {"id": 7, "label": "code", "bbox": {"l": 134.9473114013672, "t": 375.2805480957031, "r": 547.4903564453125, "b": 525.2118530273438, "coord_origin": "TOPLEFT"}, "confidence": 0.7434961199760437, "cells": [{"id": 27, "text": "Example 6-7 Specifying SECURED on a function", "bbox": {"l": 136.8, "t": 375.55798, "r": 336.69186, "b": 383.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE", "bbox": {"l": 136.8, "t": 392.65811, "r": 446.63564999999994, "b": 401.43289, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "MY_UDF(CURRENT_USER,COLUMN1) = 1 ", "bbox": {"l": 136.8, "t": 404.65793, "r": 301.6778, "b": 413.43271, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "ENFORCED FOR ALL ACCESS ENABLE;", "bbox": {"l": 136.8, "t": 416.65775, "r": 291.71783, "b": 425.43253, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CREATE FUNCTION MY_UDF", "bbox": {"l": 136.8, "t": 440.65735, "r": 246.71854, "b": 449.43213, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(INP1 CHAR(32),", "bbox": {"l": 151.20016, "t": 452.65717, "r": 226.13921, "b": 461.43195, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "INP2 INTEGER)", "bbox": {"l": 151.20016, "t": 464.65698, "r": 216.11943000000002, "b": 473.43176, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Returns INTEGER", "bbox": {"l": 136.8, "t": 476.6568, "r": 211.73903, "b": 485.43158, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "LANGUAGE SQL", "bbox": {"l": 136.8, "t": 488.65662, "r": 196.73926, "b": 497.4314, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CONTAINS SQL ", "bbox": {"l": 136.8, "t": 500.65643, "r": 201.71927, "b": 509.43121, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "SECURED", "bbox": {"l": 136.8, "t": 512.65625, "r": 171.77951, "b": 521.48083, "coord_origin": "TOPLEFT"}}]}, "text": "Example 6-7 Specifying SECURED on a function CREATE PERMISSION SCHEMA.PERM1 ON SCHEMA.TABLE1 FOR ROWS WHERE MY_UDF(CURRENT_USER,COLUMN1) = 1 ENFORCED FOR ALL ACCESS ENABLE; CREATE FUNCTION MY_UDF (INP1 CHAR(32), INP2 INTEGER) Returns INTEGER LANGUAGE SQL CONTAINS SQL SECURED"}, {"label": "text", "id": 8, "page_no": 125, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8338165283203, "t": 540.63720703125, "r": 547.25848, "b": 586.96923828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9799280166625977, "cells": [{"id": 38, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for ", "bbox": {"l": 136.8, "t": 541.54724, "r": 523.70319, "b": 550.7602400000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "RCAC. If a function is called from an SQL statement, and references a column in a table that ", "bbox": {"l": 136.8, "t": 553.54704, "r": 547.25848, "b": 562.76004, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has RCAC, it must be declared as secure. In that case, if the secure function calls other ", "bbox": {"l": 136.8, "t": 565.54684, "r": 525.11749, "b": 574.7598399999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "functions, they are not validated to confirm whether they are secure.", "bbox": {"l": 136.8, "t": 577.54665, "r": 436.59887999999995, "b": 586.75964, "coord_origin": "TOPLEFT"}}]}, "text": "The SECURED attribute of MY_UDF signifies that the function is considered secure for RCAC. If a function is called from an SQL statement, and references a column in a table that has RCAC, it must be declared as secure. In that case, if the secure function calls other functions, they are not validated to confirm whether they are secure."}, {"label": "text", "id": 9, "page_no": 125, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09840393066406, "t": 598.6279296875, "r": 282.67517, "b": 608.9580078125, "coord_origin": "TOPLEFT"}, "confidence": 0.7475109100341797, "cells": [{"id": 42, "text": "Consider the following examples:", "bbox": {"l": 136.8, "t": 599.50645, "r": 282.67517, "b": 608.71945, "coord_origin": "TOPLEFT"}}]}, "text": "Consider the following examples:"}, {"label": "list_item", "id": 10, "page_no": 125, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.61990356445312, "t": 615.7908935546875, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}, "confidence": 0.8809047937393188, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 616.69542, "r": 141.78, "b": 625.47017, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Table1 has RCAC defined and enabled. ", "bbox": {"l": 151.20016, "t": 616.54602, "r": 328.26205, "b": 625.75902, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "SELECT", "bbox": {"l": 328.26007, "t": 616.69542, "r": 358.25958, "b": 625.5199700000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": " MY_UDF2(Column2) from schema.table1.", "bbox": {"l": 358.25958, "t": 616.54602, "r": 547.18878, "b": 625.75902, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table1 has RCAC defined and enabled. SELECT MY_UDF2(Column2) from schema.table1."}, {"label": "list_item", "id": 11, "page_no": 125, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3736572265625, "t": 632.4197387695312, "r": 547.14795, "b": 654.8876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.6744217872619629, "cells": [{"id": 47, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, ", "bbox": {"l": 151.19916, "t": 633.52583, "r": 547.14795, "b": 642.73883, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "there is no checking to ensure that it is also created with SECURED.", "bbox": {"l": 151.19916, "t": 645.52563, "r": 453.13351000000006, "b": 654.7386300000001, "coord_origin": "TOPLEFT"}}]}, "text": "MY_UDF2 must be created with the SECURED attribute. If MY_UDF2 invokes MY_UDF3, there is no checking to ensure that it is also created with SECURED."}, {"label": "list_item", "id": 12, "page_no": 125, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.47885131835938, "t": 661.2188720703125, "r": 517.91437, "b": 683.71825, "coord_origin": "TOPLEFT"}, "confidence": 0.704971969127655, "cells": [{"id": 49, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly ", "bbox": {"l": 151.19916, "t": 662.50545, "r": 517.91437, "b": 671.71844, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "selected.", "bbox": {"l": 151.19917, "t": 674.5052499999999, "r": 191.17961, "b": 683.71825, "coord_origin": "TOPLEFT"}}]}, "text": "NOT SECURED is the default on the create function unless SECURED is explicitly selected."}, {"label": "text", "id": 13, "page_no": 125, "cluster": {"id": 13, "label": "text", "bbox": {"l": 150.35072326660156, "t": 690.4181518554688, "r": 523.39453, "b": 713.2664794921875, "coord_origin": "TOPLEFT"}, "confidence": 0.856052815914154, "cells": [{"id": 51, "text": "This same rule applies for any function that might be invoked with a masked column ", "bbox": {"l": 151.19917, "t": 691.54482, "r": 523.39453, "b": 700.75782, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "specified as an argument.", "bbox": {"l": 151.19917, "t": 703.544624, "r": 265.68439, "b": 712.757629, "coord_origin": "TOPLEFT"}}]}, "text": "This same rule applies for any function that might be invoked with a masked column specified as an argument."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 125, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.38241577148438, "t": 754.223876953125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9262574315071106, "cells": [{"id": 0, "text": "110 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "110"}, {"label": "page_footer", "id": 1, "page_no": 125, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55854797363281, "t": 754.67041015625, "r": 339.81958, "b": 764.0196533203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9510535597801208, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 126, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 370.63580322265625, "t": 754.8801879882812, "r": 517.96918, "b": 763.9136352539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9545277953147888, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 529.969970703125, "t": 754.25830078125, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215238094329834, "cells": [{"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.3511199951172, "t": 70.59781646728516, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "confidence": 0.9019970893859863, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 150.33642578125, "t": 87.26454162597656, "r": 537.51099, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6998697519302368, "cells": [{"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.35963439941406, "t": 136.777099609375, "r": 387.57983, "b": 153.22242736816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9685361981391907, "cells": [{"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8172607421875, "t": 169.369384765625, "r": 547.25458, "b": 227.78855895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9881147146224976, "cells": [{"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.24098205566406, "t": 239.97531127929688, "r": 544.86804, "b": 262.68121337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742384552955627, "cells": [{"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.0601806640625, "t": 564.0174560546875, "r": 366.7088317871094, "b": 573.477783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9522354602813721, "cells": [{"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.88059997558594, "t": 590.0465087890625, "r": 547.21686, "b": 612.02142, "coord_origin": "TOPLEFT"}, "confidence": 0.9771828055381775, "cells": [{"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.60548400878906, "t": 624.0549926757812, "r": 547.21771, "b": 658.4563598632812, "coord_origin": "TOPLEFT"}, "confidence": 0.9841781258583069, "cells": [{"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.01368713378906, "t": 669.8409423828125, "r": 547.24268, "b": 704.1990966796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835835099220276, "cells": [{"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 136.06109619140625, "t": 276.0924377441406, "r": 509.6692199707031, "b": 561.36865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848344326019287, "cells": [{"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 126, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.63580322265625, "t": 754.8801879882812, "r": 517.96918, "b": 763.9136352539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9545277953147888, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 126, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 529.969970703125, "t": 754.25830078125, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215238094329834, "cells": [{"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "111"}, {"label": "list_item", "id": 2, "page_no": 126, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.3511199951172, "t": 70.59781646728516, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "confidence": 0.9019970893859863, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table2 column SSN has a column mask that is defined on it."}, {"label": "list_item", "id": 3, "page_no": 126, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.33642578125, "t": 87.26454162597656, "r": 537.51099, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6998697519302368, "cells": [{"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute."}, {"label": "section_header", "id": 4, "page_no": 126, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.35963439941406, "t": 136.777099609375, "r": 387.57983, "b": 153.22242736816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9685361981391907, "cells": [{"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "6.10 RCAC is only one part of the solution"}, {"label": "text", "id": 5, "page_no": 126, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8172607421875, "t": 169.369384765625, "r": 547.25458, "b": 227.78855895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9881147146224976, "cells": [{"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges."}, {"label": "text", "id": 6, "page_no": 126, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.24098205566406, "t": 239.97531127929688, "r": 544.86804, "b": 262.68121337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742384552955627, "cells": [{"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files."}, {"label": "caption", "id": 7, "page_no": 126, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.0601806640625, "t": 564.0174560546875, "r": 366.7088317871094, "b": 573.477783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9522354602813721, "cells": [{"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 Object-level security and RCAC permissions"}, {"label": "text", "id": 8, "page_no": 126, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.88059997558594, "t": 590.0465087890625, "r": 547.21686, "b": 612.02142, "coord_origin": "TOPLEFT"}, "confidence": 0.9771828055381775, "cells": [{"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}]}, "text": "To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test."}, {"label": "text", "id": 9, "page_no": 126, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.60548400878906, "t": 624.0549926757812, "r": 547.21771, "b": 658.4563598632812, "coord_origin": "TOPLEFT"}, "confidence": 0.9841781258583069, "cells": [{"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver."}, {"label": "text", "id": 10, "page_no": 126, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.01368713378906, "t": 669.8409423828125, "r": 547.24268, "b": 704.1990966796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835835099220276, "cells": [{"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}]}, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements."}, {"label": "picture", "id": 11, "page_no": 126, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.06109619140625, "t": 276.0924377441406, "r": 509.6692199707031, "b": 561.36865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848344326019287, "cells": [{"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 126, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.3511199951172, "t": 70.59781646728516, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}, "confidence": 0.9019970893859863, "cells": [{"id": 2, "text": "GLYPH", "bbox": {"l": 136.8002, "t": 71.65845000000002, "r": 141.7802, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table2 column SSN has a column mask that is defined on it. ", "bbox": {"l": 151.20036, "t": 71.50903000000005, "r": 419.79163, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table2 column SSN has a column mask that is defined on it."}, {"label": "list_item", "id": 3, "page_no": 126, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 150.33642578125, "t": 87.26454162597656, "r": 537.51099, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.6998697519302368, "cells": [{"id": 4, "text": "SELECT", "bbox": {"l": 151.20036, "t": 88.63823999999988, "r": 181.14012, "b": 97.46283000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": " MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, ", "bbox": {"l": 181.19989, "t": 88.48883000000001, "r": 537.51099, "b": 97.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "MY_UDF4 must be created with the SECURED attribute.", "bbox": {"l": 151.20036, "t": 100.48865, "r": 402.42545, "b": 109.70165999999995, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT MY_UDF4(SSN) from table2. Because SSN has a column mask that is defined, MY_UDF4 must be created with the SECURED attribute."}, {"label": "section_header", "id": 4, "page_no": 126, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.35963439941406, "t": 136.777099609375, "r": 387.57983, "b": 153.22242736816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9685361981391907, "cells": [{"id": 7, "text": "6.10", "bbox": {"l": 64.800003, "t": 138.18073000000004, "r": 96.288353, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "RCAC is only one part of the solution", "bbox": {"l": 100.78667, "t": 138.18073000000004, "r": 387.57983, "b": 152.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "6.10 RCAC is only one part of the solution"}, {"label": "text", "id": 5, "page_no": 126, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8172607421875, "t": 169.369384765625, "r": 547.25458, "b": 227.78855895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9881147146224976, "cells": [{"id": 9, "text": "When designing and implementing RCAC row permissions, special attention should be given ", "bbox": {"l": 136.8, "t": 170.50867000000005, "r": 547.25458, "b": 179.72168, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to the effectiveness and limitations of controlling data access. Data can be housed in objects ", "bbox": {"l": 136.8, "t": 182.50847999999996, "r": 547.1908, "b": 191.7215, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "other than tables or physical files. The role and responsibility of the database user, for ", "bbox": {"l": 136.8, "t": 194.50829999999996, "r": 516.95819, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "example, the database engineer, must be reconciled with their respective authority and ", "bbox": {"l": 136.79999, "t": 206.50811999999996, "r": 522.3587, "b": 215.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "access privileges.", "bbox": {"l": 136.79999, "t": 218.50793, "r": 215.6035, "b": 227.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "When designing and implementing RCAC row permissions, special attention should be given to the effectiveness and limitations of controlling data access. Data can be housed in objects other than tables or physical files. The role and responsibility of the database user, for example, the database engineer, must be reconciled with their respective authority and access privileges."}, {"label": "text", "id": 6, "page_no": 126, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.24098205566406, "t": 239.97531127929688, "r": 544.86804, "b": 262.68121337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742384552955627, "cells": [{"id": 14, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions ", "bbox": {"l": 136.79999, "t": 240.52752999999996, "r": 544.86804, "b": 249.74054, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "provide control only on tables and physical files.", "bbox": {"l": 136.8, "t": 252.52733999999998, "r": 347.7309, "b": 261.74036, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 illustrates that object level security is the first check and that RCAC permissions provide control only on tables and physical files."}, {"label": "caption", "id": 7, "page_no": 126, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.0601806640625, "t": 564.0174560546875, "r": 366.7088317871094, "b": 573.477783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9522354602813721, "cells": [{"id": 16, "text": "Figure 6-25 Object-level security and RCAC permissions", "bbox": {"l": 136.8, "t": 564.7979, "r": 366.65814, "b": 573.12291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6-25 Object-level security and RCAC permissions"}, {"label": "text", "id": 8, "page_no": 126, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.88059997558594, "t": 590.0465087890625, "r": 547.21686, "b": 612.02142, "coord_origin": "TOPLEFT"}, "confidence": 0.9771828055381775, "cells": [{"id": 17, "text": "To get access to the table and the rows, the user must pass the object level authority test and ", "bbox": {"l": 136.8, "t": 590.80862, "r": 547.21686, "b": 600.02162, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "the RCAC permission test.", "bbox": {"l": 136.8, "t": 602.80843, "r": 254.45151, "b": 612.02142, "coord_origin": "TOPLEFT"}}]}, "text": "To get access to the table and the rows, the user must pass the object level authority test and the RCAC permission test."}, {"label": "text", "id": 9, "page_no": 126, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.60548400878906, "t": 624.0549926757812, "r": 547.21771, "b": 658.4563598632812, "coord_origin": "TOPLEFT"}, "confidence": 0.9841781258583069, "cells": [{"id": 19, "text": "The IBM i journal captures the transactional data and places an image of the row in the ", "bbox": {"l": 136.8, "t": 624.76823, "r": 523.51202, "b": 633.98123, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "journal receiver. If the user has access to the journal receiver, the row image can be viewed if ", "bbox": {"l": 136.8, "t": 636.76804, "r": 547.21771, "b": 645.98103, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "the user has authority to the journal receiver.", "bbox": {"l": 136.8, "t": 648.76784, "r": 334.24704, "b": 657.98083, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM i journal captures the transactional data and places an image of the row in the journal receiver. If the user has access to the journal receiver, the row image can be viewed if the user has authority to the journal receiver."}, {"label": "text", "id": 10, "page_no": 126, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.01368713378906, "t": 669.8409423828125, "r": 547.24268, "b": 704.1990966796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835835099220276, "cells": [{"id": 22, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL ", "bbox": {"l": 136.8, "t": 670.7874, "r": 520.78979, "b": 680.0004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Performance Monitor data do not reveal the results of queries, they can show the literal values ", "bbox": {"l": 136.8, "t": 682.78721, "r": 547.24268, "b": 692.000214, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "that are passed along with the SQL statements.", "bbox": {"l": 136.8, "t": 694.787018, "r": 347.23083, "b": 704.000023, "coord_origin": "TOPLEFT"}}]}, "text": "Although the SQL Plan Cache data, the SQL Plan Cache Snapshot data, and the SQL Performance Monitor data do not reveal the results of queries, they can show the literal values that are passed along with the SQL statements."}, {"label": "picture", "id": 11, "page_no": 126, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 136.06109619140625, "t": 276.0924377441406, "r": 509.6692199707031, "b": 561.36865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848344326019287, "cells": [{"id": 25, "text": "Object", "bbox": {"l": 156.9715, "t": 285.76688, "r": 190.61691, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Level", "bbox": {"l": 160.69307, "t": 300.53012, "r": 186.89537, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Authority", "bbox": {"l": 149.2823, "t": 315.2934, "r": 198.35532, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Functional", "bbox": {"l": 267.20389, "t": 285.76688, "r": 320.83136, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ID", "bbox": {"l": 288.48755, "t": 300.53012, "r": 299.54523, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Allowance", "bbox": {"l": 267.45001, "t": 315.2934, "r": 320.55463, "b": 325.82449, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "RCAC", "bbox": {"l": 220.76109000000002, "t": 285.76688, "r": 247.8049, "b": 296.29796999999996, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Permission", "bbox": {"l": 206.33618, "t": 300.53012, "r": 262.33313, "b": 311.06122, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Table", "bbox": {"l": 438.45789, "t": 342.79007, "r": 464.58762, "b": 353.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 341.27759, "r": 177.77641, "b": 355.31033, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "GLYPH", "bbox": {"l": 230.17299999999997, "t": 342.35464, "r": 238.33691, "b": 356.38739, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Journal Receiver", "bbox": {"l": 386.50961, "t": 387.26437, "r": 470.06216, "b": 397.79547, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 385.75198, "r": 177.77641, "b": 399.7847300000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SQL Plan Cache", "bbox": {"l": 380.32751, "t": 433.3996, "r": 458.0436700000001, "b": 443.93069, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 431.91799999999995, "r": 177.77641, "b": 445.95074, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 289.84091, "t": 431.88718, "r": 298.00482, "b": 445.91992, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "SQL Plan Cache Snapshot", "bbox": {"l": 344.00369, "t": 479.53488, "r": 471.96899, "b": 490.06598, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 478.02237, "r": 177.77641, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 478.02237, "r": 298.00397, "b": 492.05511, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "SQL Performance Monitor", "bbox": {"l": 333.2695, "t": 528.7457899999999, "r": 465.95779, "b": 539.27689, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 169.6125, "t": 527.2332799999999, "r": 177.77641, "b": 541.26604, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPH", "bbox": {"l": 289.84006, "t": 527.2332799999999, "r": 298.00397, "b": 541.26604, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 126, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 370.63580322265625, "t": 754.8801879882812, "r": 517.96918, "b": 763.9136352539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9545277953147888, "cells": [{"id": 0, "text": "Chapter 6. Additional considerations ", "bbox": {"l": 371.28, "t": 755.538002, "r": 517.96918, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 6. Additional considerations"}, {"label": "page_footer", "id": 1, "page_no": 126, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 529.969970703125, "t": 754.25830078125, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215238094329834, "cells": [{"id": 1, "text": "111", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "111"}]}}, {"page_no": 127, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.37667846679688, "t": 754.1668090820312, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.924152672290802, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.55838012695312, "t": 754.5621337890625, "r": 339.87249755859375, "b": 764.0390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473952651023865, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.75006103515625, "t": 70.58626556396484, "r": 547.29626, "b": 116.85999298095703, "coord_origin": "TOPLEFT"}, "confidence": 0.9814152121543884, "cells": [{"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 127, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37667846679688, "t": 754.1668090820312, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.924152672290802, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "112"}, {"label": "page_footer", "id": 1, "page_no": 127, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55838012695312, "t": 754.5621337890625, "r": 339.87249755859375, "b": 764.0390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473952651023865, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 127, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.75006103515625, "t": 70.58626556396484, "r": 547.29626, "b": 116.85999298095703, "coord_origin": "TOPLEFT"}, "confidence": 0.9814152121543884, "cells": [{"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting access to data\u201d, and \u201cneeding access to data\u201d."}], "body": [{"label": "text", "id": 2, "page_no": 127, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.75006103515625, "t": 70.58626556396484, "r": 547.29626, "b": 116.85999298095703, "coord_origin": "TOPLEFT"}, "confidence": 0.9814152121543884, "cells": [{"id": 2, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.94611, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "efficiently requires some understanding of the underlying data, or at least the attributes of the ", "bbox": {"l": 136.79999, "t": 83.50847999999996, "r": 547.29626, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 546.69183, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "access to data\u201d, and \u201cneeding access to data\u201d.", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 341.75491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "The ability to monitor, analyze, debug, and tune data-centric applications effectively and efficiently requires some understanding of the underlying data, or at least the attributes of the data. The organization must be willing to reconcile the conflicting requirements of \u201crestricting access to data\u201d, and \u201cneeding access to data\u201d."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 127, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.37667846679688, "t": 754.1668090820312, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.924152672290802, "cells": [{"id": 0, "text": "112 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "112"}, {"label": "page_footer", "id": 1, "page_no": 127, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.55838012695312, "t": 754.5621337890625, "r": 339.87249755859375, "b": 764.0390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473952651023865, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 128, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.72496032714844, "t": 754.732177734375, "r": 257.24335, "b": 764.0621948242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9485868811607361, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0635986328125, "t": 754.3052368164062, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9265602827072144, "cells": [{"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.06494140625, "r": 547.26062, "b": 310.1415100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9408386945724487, "cells": [{"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.95159912109375, "t": 348.0643310546875, "r": 530.336181640625, "b": 382.1923522949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9827558994293213, "cells": [{"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9311981201172, "t": 394.0325622558594, "r": 347.41214, "b": 404.31439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9188783764839172, "cells": [{"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7118682861328, "t": 410.8296203613281, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9452411532402039, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.60548400878906, "t": 422.74298095703125, "r": 406.06464, "b": 432.9902648925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9472385048866272, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.78424072265625, "t": 434.835693359375, "r": 323.05093, "b": 445.13641357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.953090488910675, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 32.251461029052734, "t": 70.665283203125, "r": 239.58355712890625, "b": 238.41876220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7878549695014954, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 128, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.72496032714844, "t": 754.732177734375, "r": 257.24335, "b": 764.0621948242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9485868811607361, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 128, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0635986328125, "t": 754.3052368164062, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9265602827072144, "cells": [{"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "113"}, {"label": "text", "id": 2, "page_no": 128, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7."}, {"label": "section_header", "id": 3, "page_no": 128, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.06494140625, "r": 547.26062, "b": 310.1415100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9408386945724487, "cells": [{"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control management"}, {"label": "text", "id": 4, "page_no": 128, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95159912109375, "t": 348.0643310546875, "r": 530.336181640625, "b": 382.1923522949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9827558994293213, "cells": [{"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}]}, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered."}, {"label": "text", "id": 5, "page_no": 128, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9311981201172, "t": 394.0325622558594, "r": 347.41214, "b": 404.31439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9188783764839172, "cells": [{"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 128, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7118682861328, "t": 410.8296203613281, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9452411532402039, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing row permissions and column masks"}, {"label": "list_item", "id": 7, "page_no": 128, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.60548400878906, "t": 422.74298095703125, "r": 406.06464, "b": 432.9902648925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9472385048866272, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing tables with row permissions and column masks"}, {"label": "list_item", "id": 8, "page_no": 128, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.78424072265625, "t": 434.835693359375, "r": 323.05093, "b": 445.13641357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.953090488910675, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring and auditing function usage"}, {"label": "text", "id": 9, "page_no": 128, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "picture", "id": 10, "page_no": 128, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.251461029052734, "t": 70.665283203125, "r": 239.58355712890625, "b": 238.41876220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7878549695014954, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 128, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 7.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7."}, {"label": "section_header", "id": 3, "page_no": 128, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.06494140625, "r": 547.26062, "b": 310.1415100097656, "coord_origin": "TOPLEFT"}, "confidence": 0.9408386945724487, "cells": [{"id": 3, "text": "Row and Column Access Control ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.26062, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "management", "bbox": {"l": 136.8, "t": 285.84671, "r": 297.06284, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control management"}, {"label": "text", "id": 4, "page_no": 128, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95159912109375, "t": 348.0643310546875, "r": 530.336181640625, "b": 382.1923522949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9827558994293213, "cells": [{"id": 5, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a ", "bbox": {"l": 136.8, "t": 348.70871, "r": 528.83258, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "database, your management processes must be adjusted to accommodate these new ", "bbox": {"l": 136.8, "t": 360.70853, "r": 518.32983, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "security controls. This chapter highlights some of the changes that should be considered.", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 530.23193, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}]}, "text": "After Row and Column Access Control (RCAC) definitions are defined and activated in a database, your management processes must be adjusted to accommodate these new security controls. This chapter highlights some of the changes that should be considered."}, {"label": "text", "id": 5, "page_no": 128, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9311981201172, "t": 394.0325622558594, "r": 347.41214, "b": 404.31439208984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9188783764839172, "cells": [{"id": 8, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.8, "t": 394.72791, "r": 347.41214, "b": 403.94089, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 128, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7118682861328, "t": 410.8296203613281, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9452411532402039, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 411.85709, "r": 141.78, "b": 420.63187, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Managing row permissions and column masks", "bbox": {"l": 151.20016, "t": 411.7077, "r": 356.28354, "b": 420.92068000000006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing row permissions and column masks"}, {"label": "list_item", "id": 7, "page_no": 128, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.60548400878906, "t": 422.74298095703125, "r": 406.06464, "b": 432.9902648925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9472385048866272, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 423.85689999999994, "r": 141.78, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 151.20016, "t": 423.70752, "r": 406.06464, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Managing tables with row permissions and column masks"}, {"label": "list_item", "id": 8, "page_no": 128, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.78424072265625, "t": 434.835693359375, "r": 323.05093, "b": 445.13641357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.953090488910675, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 435.85672000000005, "r": 141.78, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Monitoring and auditing function usage", "bbox": {"l": 151.20016, "t": 435.70733999999993, "r": 323.05093, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitoring and auditing function usage"}, {"label": "text", "id": 9, "page_no": 128, "cluster": {"id": 9, "label": "text", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "7", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "picture", "id": 10, "page_no": 128, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 32.251461029052734, "t": 70.665283203125, "r": 239.58355712890625, "b": 238.41876220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7878549695014954, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 128, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.72496032714844, "t": 754.732177734375, "r": 257.24335, "b": 764.0621948242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9485868811607361, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 128, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0635986328125, "t": 754.3052368164062, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9265602827072144, "cells": [{"id": 1, "text": "113", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "113"}]}}, {"page_no": 129, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.35222625732422, "t": 754.2322998046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9273734092712402, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.60916137695312, "t": 754.7075805664062, "r": 339.81958, "b": 763.9705200195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9511194229125977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.16378021240234, "t": 73.54357147216797, "r": 449.79186999999996, "b": 89.48138427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9686716198921204, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75418090820312, "t": 106.12907409667969, "r": 541.12109, "b": 116.29986572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9501754641532898, "cells": [{"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 63.90059280395508, "t": 135.95755004882812, "r": 228.30336000000003, "b": 148.8716583251953, "coord_origin": "TOPLEFT"}, "confidence": 0.9683852195739746, "cells": [{"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.94558715820312, "t": 161.98435974121094, "r": 546.4278, "b": 208.3597412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878652691841125, "cells": [{"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.89431762695312, "t": 220.08180236816406, "r": 547.2934, "b": 301.81982, "coord_origin": "TOPLEFT"}, "confidence": 0.9883837699890137, "cells": [{"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 63.8327522277832, "t": 321.6274108886719, "r": 231.46431000000004, "b": 334.95697021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.964327871799469, "cells": [{"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.9163360595703, "t": 348.02764892578125, "r": 547.19885, "b": 394.3303527832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9876542687416077, "cells": [{"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.8429718017578, "t": 406.0337829589844, "r": 547.2923, "b": 452.2233581542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9873954057693481, "cells": [{"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.0130844116211, "t": 471.7661437988281, "r": 214.6126708984375, "b": 484.9178771972656, "coord_origin": "TOPLEFT"}, "confidence": 0.9660051465034485, "cells": [{"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.03684997558594, "t": 498.14910888671875, "r": 547.18286, "b": 556.083740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9864468574523926, "cells": [{"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.14586639404297, "t": 644.4866333007812, "r": 183.93999, "b": 657.650634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9669332504272461, "cells": [{"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.13162231445312, "t": 670.6488647460938, "r": 547.32727, "b": 692.8422241210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9813348054885864, "cells": [{"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 142.16134643554688, "t": 573.9788818359375, "r": 541.13116, "b": 620.4790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9856665730476379, "cells": [{"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 129, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35222625732422, "t": 754.2322998046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9273734092712402, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "114"}, {"label": "page_footer", "id": 1, "page_no": 129, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.60916137695312, "t": 754.7075805664062, "r": 339.81958, "b": 763.9705200195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9511194229125977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 129, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.16378021240234, "t": 73.54357147216797, "r": 449.79186999999996, "b": 89.48138427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9686716198921204, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "7.1 Managing row permissions and column masks"}, {"label": "text", "id": 3, "page_no": 129, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75418090820312, "t": 106.12907409667969, "r": 541.12109, "b": 116.29986572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9501754641532898, "cells": [{"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "This section focuses on the management of the RCAC row permissions and column masks."}, {"label": "section_header", "id": 4, "page_no": 129, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.90059280395508, "t": 135.95755004882812, "r": 228.30336000000003, "b": 148.8716583251953, "coord_origin": "TOPLEFT"}, "confidence": 0.9683852195739746, "cells": [{"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.1 Source management"}, {"label": "text", "id": 5, "page_no": 129, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.94558715820312, "t": 161.98435974121094, "r": 546.4278, "b": 208.3597412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878652691841125, "cells": [{"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions."}, {"label": "text", "id": 6, "page_no": 129, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.89431762695312, "t": 220.08180236816406, "r": 547.2934, "b": 301.81982, "coord_origin": "TOPLEFT"}, "confidence": 0.9883837699890137, "cells": [{"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}]}, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table."}, {"label": "section_header", "id": 7, "page_no": 129, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 63.8327522277832, "t": 321.6274108886719, "r": 231.46431000000004, "b": 334.95697021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.964327871799469, "cells": [{"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.2 Modifying definitions"}, {"label": "text", "id": 8, "page_no": 129, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9163360595703, "t": 348.02764892578125, "r": 547.19885, "b": 394.3303527832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9876542687416077, "cells": [{"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}]}, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition."}, {"label": "text", "id": 9, "page_no": 129, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8429718017578, "t": 406.0337829589844, "r": 547.2923, "b": 452.2233581542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9873954057693481, "cells": [{"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}]}, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process."}, {"label": "section_header", "id": 10, "page_no": 129, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.0130844116211, "t": 471.7661437988281, "r": 214.6126708984375, "b": 484.9178771972656, "coord_origin": "TOPLEFT"}, "confidence": 0.9660051465034485, "cells": [{"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.3 Turning on and off"}, {"label": "text", "id": 11, "page_no": 129, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.03684997558594, "t": 498.14910888671875, "r": 547.18286, "b": 556.083740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9864468574523926, "cells": [{"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table."}, {"label": "section_header", "id": 12, "page_no": 129, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.14586639404297, "t": 644.4866333007812, "r": 183.93999, "b": 657.650634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9669332504272461, "cells": [{"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.4 Regenerating"}, {"label": "text", "id": 13, "page_no": 129, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.13162231445312, "t": 670.6488647460938, "r": 547.32727, "b": 692.8422241210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9813348054885864, "cells": [{"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects."}, {"label": "text", "id": 14, "page_no": 129, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.16134643554688, "t": 573.9788818359375, "r": 541.13116, "b": 620.4790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9856665730476379, "cells": [{"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages."}], "body": [{"label": "section_header", "id": 2, "page_no": 129, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.16378021240234, "t": 73.54357147216797, "r": 449.79186999999996, "b": 89.48138427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9686716198921204, "cells": [{"id": 2, "text": "7.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.246155, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Managing row permissions and column masks", "bbox": {"l": 91.735367, "t": 74.34069999999997, "r": 449.79186999999996, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "7.1 Managing row permissions and column masks"}, {"label": "text", "id": 3, "page_no": 129, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75418090820312, "t": 106.12907409667969, "r": 541.12109, "b": 116.29986572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9501754641532898, "cells": [{"id": 4, "text": "This section focuses on the management of the RCAC row permissions and column masks.", "bbox": {"l": 136.8, "t": 106.6087, "r": 541.12109, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "This section focuses on the management of the RCAC row permissions and column masks."}, {"label": "section_header", "id": 4, "page_no": 129, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.90059280395508, "t": 135.95755004882812, "r": 228.30336000000003, "b": 148.8716583251953, "coord_origin": "TOPLEFT"}, "confidence": 0.9683852195739746, "cells": [{"id": 5, "text": "7.1.1", "bbox": {"l": 64.800003, "t": 136.49463000000003, "r": 94.272484, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Source management", "bbox": {"l": 97.956543, "t": 136.49463000000003, "r": 228.30336000000003, "b": 148.48266999999998, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.1 Source management"}, {"label": "text", "id": 5, "page_no": 129, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.94558715820312, "t": 161.98435974121094, "r": 546.4278, "b": 208.3597412109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878652691841125, "cells": [{"id": 7, "text": "The SQL statements that are used to define row permissions and column masks should be ", "bbox": {"l": 136.8, "t": 162.64868, "r": 540.84125, "b": 171.86168999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "managed with a change management process. Ideally, you already are using a change ", "bbox": {"l": 136.8, "t": 174.6485, "r": 522.78192, "b": 183.86150999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "management process for your database definitions, and that same process can be extended ", "bbox": {"l": 136.8, "t": 186.64832, "r": 546.4278, "b": 195.86132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "to cover your RCAC definitions.", "bbox": {"l": 136.8, "t": 198.64813000000004, "r": 275.15433, "b": 207.86114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL statements that are used to define row permissions and column masks should be managed with a change management process. Ideally, you already are using a change management process for your database definitions, and that same process can be extended to cover your RCAC definitions."}, {"label": "text", "id": 6, "page_no": 129, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.89431762695312, "t": 220.08180236816406, "r": 547.2934, "b": 301.81982, "coord_origin": "TOPLEFT"}, "confidence": 0.9883837699890137, "cells": [{"id": 11, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the ", "bbox": {"l": 136.8, "t": 220.60790999999995, "r": 542.61035, "b": 229.82092, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RCAC definitions to the same source file as the table definition. The benefit of this approach ", "bbox": {"l": 136.8, "t": 232.60772999999995, "r": 545.20575, "b": 241.82074, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "is that it keeps all DDL that is related to a table in a single source file. The downside is that if ", "bbox": {"l": 136.80002, "t": 244.60753999999997, "r": 546.14105, "b": 253.82056, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "you must re-create only the RCAC definitions and leave the table unchanged, then you must ", "bbox": {"l": 136.80005, "t": 256.60735999999997, "r": 545.83148, "b": 265.82037, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "identify and extract only the RCAC definitions from the source file. There are situations where ", "bbox": {"l": 136.80005, "t": 268.60717999999997, "r": 547.24664, "b": 277.82019, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "the row permissions and column masks must be changed or re-created without changing the ", "bbox": {"l": 136.80005, "t": 280.60703, "r": 547.2934, "b": 289.82001, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "definition of the associated table.", "bbox": {"l": 136.80005, "t": 292.60684000000003, "r": 282.08453, "b": 301.81982, "coord_origin": "TOPLEFT"}}]}, "text": "If you are using SQL DDL to define your DB2 tables, then you have the option of adding the RCAC definitions to the same source file as the table definition. The benefit of this approach is that it keeps all DDL that is related to a table in a single source file. The downside is that if you must re-create only the RCAC definitions and leave the table unchanged, then you must identify and extract only the RCAC definitions from the source file. There are situations where the row permissions and column masks must be changed or re-created without changing the definition of the associated table."}, {"label": "section_header", "id": 7, "page_no": 129, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 63.8327522277832, "t": 321.6274108886719, "r": 231.46431000000004, "b": 334.95697021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.964327871799469, "cells": [{"id": 18, "text": "7.1.2", "bbox": {"l": 64.800003, "t": 322.49472, "r": 94.315964, "b": 334.4827, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modifying definitions", "bbox": {"l": 98.005455, "t": 322.49472, "r": 231.46431000000004, "b": 334.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.2 Modifying definitions"}, {"label": "text", "id": 8, "page_no": 129, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9163360595703, "t": 348.02764892578125, "r": 547.19885, "b": 394.3303527832031, "coord_origin": "TOPLEFT"}, "confidence": 0.9876542687416077, "cells": [{"id": 20, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be ", "bbox": {"l": 136.8, "t": 348.64871, "r": 541.84814, "b": 357.86169, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "re-created to change the data access behavior for that table. Usage of the ", "bbox": {"l": 136.8, "t": 360.64853, "r": 463.4190699999999, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "OR REPLACE", "bbox": {"l": 463.38042999999993, "t": 360.79791000000006, "r": 513.05994, "b": 369.6225, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": " clause ", "bbox": {"l": 513.05994, "t": 360.64853, "r": 547.19885, "b": 369.86151, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "on the ", "bbox": {"l": 136.80002, "t": 372.64834999999994, "r": 167.34138, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CREATE MASK", "bbox": {"l": 167.34036, "t": 372.79773, "r": 222.29962, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": " and ", "bbox": {"l": 222.30063, "t": 372.64834999999994, "r": 244.62298999999996, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION", "bbox": {"l": 244.56022999999996, "t": 372.79773, "r": 329.51904, "b": 381.62231, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": " SQL statements simplifies the re-creation ", "bbox": {"l": 329.52002, "t": 372.64834999999994, "r": 517.78992, "b": 381.86133, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "process by folding in the deletion of the existing RCAC definition.", "bbox": {"l": 136.8, "t": 384.64816, "r": 422.41983, "b": 393.86115, "coord_origin": "TOPLEFT"}}]}, "text": "After RCAC is activated for a table, the row permission and column mask definitions can be re-created to change the data access behavior for that table. Usage of the OR REPLACE clause on the CREATE MASK and CREATE PERMISSION SQL statements simplifies the re-creation process by folding in the deletion of the existing RCAC definition."}, {"label": "text", "id": 9, "page_no": 129, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.8429718017578, "t": 406.0337829589844, "r": 547.2923, "b": 452.2233581542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9873954057693481, "cells": [{"id": 30, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with ", "bbox": {"l": 136.8, "t": 406.60797, "r": 539.65204, "b": 415.82095, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "your applications and identify tweaks that must be made to your RCAC implementation. ", "bbox": {"l": 136.79999, "t": 418.60779, "r": 524.70508, "b": 427.82077, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the ", "bbox": {"l": 136.79999, "t": 430.6076, "r": 547.2923, "b": 439.82059, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "table during the process.", "bbox": {"l": 136.79999, "t": 442.60742, "r": 245.98248, "b": 451.82040000000006, "coord_origin": "TOPLEFT"}}]}, "text": "This capability makes it easy to change your RCAC definitions as you test the controls with your applications and identify tweaks that must be made to your RCAC implementation. However, re-creation of RCAC definitions does require an exclusive lock to be acquired on the table during the process."}, {"label": "section_header", "id": 10, "page_no": 129, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.0130844116211, "t": 471.7661437988281, "r": 214.6126708984375, "b": 484.9178771972656, "coord_origin": "TOPLEFT"}, "confidence": 0.9660051465034485, "cells": [{"id": 34, "text": "7.1.3", "bbox": {"l": 64.800003, "t": 472.49472, "r": 94.159073, "b": 484.4827, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Turning on and off", "bbox": {"l": 97.828957, "t": 472.49472, "r": 214.43356, "b": 484.4827, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.3 Turning on and off"}, {"label": "text", "id": 11, "page_no": 129, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.03684997558594, "t": 498.14910888671875, "r": 547.18286, "b": 556.083740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9864468574523926, "cells": [{"id": 36, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ", "bbox": {"l": 136.8, "t": 498.64862, "r": 473.00781, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "ALTER", "bbox": {"l": 472.92017, "t": 498.798, "r": 497.9397000000001, "b": 507.62259, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": " statement ", "bbox": {"l": 497.9397000000001, "t": 498.64862, "r": 547.18286, "b": 507.8616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "can turn on and off row permissions and column masks. The ", "bbox": {"l": 136.80008, "t": 510.64844, "r": 406.95114, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER MASK", "bbox": {"l": 406.98001, "t": 510.79782, "r": 456.89954000000006, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " and A", "bbox": {"l": 456.9603, "t": 510.64844, "r": 485.8443, "b": 519.86142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "LTER ", "bbox": {"l": 485.8204, "t": 510.79782, "r": 510.78018, "b": 519.62241, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "PERMISSION", "bbox": {"l": 136.80011, "t": 522.79764, "r": 186.71962, "b": 531.62222, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " statements allow an individual row permission or column mask to be turned off ", "bbox": {"l": 186.78038, "t": 522.64825, "r": 538.5675, "b": 531.86124, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "with the ", "bbox": {"l": 136.80011, "t": 534.64804, "r": 174.01068, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "DISABLE", "bbox": {"l": 173.99971, "t": 534.79745, "r": 208.97923, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " option and back on with the ", "bbox": {"l": 208.97923, "t": 534.64804, "r": 336.03802, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ENABLE", "bbox": {"l": 336.05887, "t": 534.79745, "r": 366.05838, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": " option. The ", "bbox": {"l": 365.99863, "t": 534.64804, "r": 421.61823, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ALTER TABLE", "bbox": {"l": 421.5585, "t": 534.79745, "r": 476.51778999999993, "b": 543.62201, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": " statement can ", "bbox": {"l": 476.57855, "t": 534.64804, "r": 544.97375, "b": 543.86105, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "deactivate enforcement of all the row permissions and column masks for a single table.", "bbox": {"l": 136.79816, "t": 546.64786, "r": 520.03705, "b": 555.86086, "coord_origin": "TOPLEFT"}}]}, "text": "As described in 3.1.2, \u201cEnabling and activating RCAC\u201d on page 16, the SQL ALTER statement can turn on and off row permissions and column masks. The ALTER MASK and A LTER PERMISSION statements allow an individual row permission or column mask to be turned off with the DISABLE option and back on with the ENABLE option. The ALTER TABLE statement can deactivate enforcement of all the row permissions and column masks for a single table."}, {"label": "section_header", "id": 12, "page_no": 129, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.14586639404297, "t": 644.4866333007812, "r": 183.93999, "b": 657.650634765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9669332504272461, "cells": [{"id": 53, "text": "7.1.4", "bbox": {"l": 64.800003, "t": 645.47462, "r": 94.598396, "b": 657.46263, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "Regenerating", "bbox": {"l": 98.323196, "t": 645.47462, "r": 183.93999, "b": 657.46263, "coord_origin": "TOPLEFT"}}]}, "text": "7.1.4 Regenerating"}, {"label": "text", "id": 13, "page_no": 129, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.13162231445312, "t": 670.6488647460938, "r": 547.32727, "b": 692.8422241210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9813348054885864, "cells": [{"id": 55, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option ", "bbox": {"l": 136.8, "t": 671.62862, "r": 547.32727, "b": 680.84162, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "can be useful with more complex RCAC definitions that reference other DB2 objects.", "bbox": {"l": 136.8, "t": 683.62843, "r": 509.6644600000001, "b": 692.8414310000001, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 also can regenerate an existing row permission or column mask. This regenerate option can be useful with more complex RCAC definitions that reference other DB2 objects."}, {"label": "text", "id": 14, "page_no": 129, "cluster": {"id": 14, "label": "text", "bbox": {"l": 142.16134643554688, "t": 573.9788818359375, "r": 541.13116, "b": 620.4790649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9856665730476379, "cells": [{"id": 57, "text": "Important:", "bbox": {"l": 142.8, "t": 574.66862, "r": 192.41673, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": " Although these capabilities make it easy to temporarily turn off RCAC security ", "bbox": {"l": 192.41974, "t": 574.66862, "r": 541.13116, "b": 583.88162, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "so that you can make environment or application changes, these processes require an ", "bbox": {"l": 142.799, "t": 586.66843, "r": 526.54175, "b": 595.8814199999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully ", "bbox": {"l": 142.799, "t": 598.66823, "r": 538.427, "b": 607.88123, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "to avoid disruptions and outages.", "bbox": {"l": 142.799, "t": 610.66803, "r": 289.06061, "b": 619.88103, "coord_origin": "TOPLEFT"}}]}, "text": "Important: Although these capabilities make it easy to temporarily turn off RCAC security so that you can make environment or application changes, these processes require an exclusive lock to be obtained on a table. Therefore, this activity must be planned carefully to avoid disruptions and outages."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 129, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.35222625732422, "t": 754.2322998046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9273734092712402, "cells": [{"id": 0, "text": "114 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "114"}, {"label": "page_footer", "id": 1, "page_no": 129, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.60916137695312, "t": 754.7075805664062, "r": 339.81958, "b": 763.9705200195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9511194229125977, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 130, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 283.8012390136719, "t": 754.84130859375, "r": 518.01208, "b": 764.0040283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9527303576469421, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0354614257812, "t": 754.32568359375, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183745980262756, "cells": [{"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9884796142578, "t": 70.43203735351562, "r": 547.20105, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9827796220779419, "cells": [{"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.99624633789062, "t": 164.5958709716797, "r": 547.16022, "b": 211.07290649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9867848753929138, "cells": [{"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 63.91755676269531, "t": 238.19967651367188, "r": 536.6239, "b": 254.27833557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9644711017608643, "cells": [{"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8260498046875, "t": 270.5757751464844, "r": 547.26471, "b": 292.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9742122888565063, "cells": [{"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 63.97272872924805, "t": 312.4022216796875, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.955165684223175, "cells": [{"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.9362335205078, "t": 338.6729431152344, "r": 547.16217, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9810709357261658, "cells": [{"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.97621154785156, "t": 396.52679443359375, "r": 547.22571, "b": 430.947021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9845772385597229, "cells": [{"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 130, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.8012390136719, "t": 754.84130859375, "r": 518.01208, "b": 764.0040283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9527303576469421, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 130, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0354614257812, "t": 754.32568359375, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183745980262756, "cells": [{"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "115"}, {"label": "text", "id": 2, "page_no": 130, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9884796142578, "t": 70.43203735351562, "r": 547.20105, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9827796220779419, "cells": [{"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table."}, {"label": "text", "id": 3, "page_no": 130, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99624633789062, "t": 164.5958709716797, "r": 547.16022, "b": 211.07290649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9867848753929138, "cells": [{"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error."}, {"label": "section_header", "id": 4, "page_no": 130, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.91755676269531, "t": 238.19967651367188, "r": 536.6239, "b": 254.27833557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9644711017608643, "cells": [{"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2 Managing tables with row permissions and column masks"}, {"label": "text", "id": 5, "page_no": 130, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8260498046875, "t": 270.5757751464844, "r": 547.26471, "b": 292.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9742122888565063, "cells": [{"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section examines the object management considerations after RCAC is added to a DB2 table."}, {"label": "section_header", "id": 6, "page_no": 130, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 63.97272872924805, "t": 312.4022216796875, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.955165684223175, "cells": [{"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.1 Save and restore"}, {"label": "text", "id": 7, "page_no": 130, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9362335205078, "t": 338.6729431152344, "r": 547.16217, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9810709357261658, "cells": [{"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC."}, {"label": "text", "id": 8, "page_no": 130, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.97621154785156, "t": 396.52679443359375, "r": 547.22571, "b": 430.947021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9845772385597229, "cells": [{"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging."}], "body": [{"label": "text", "id": 2, "page_no": 130, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9884796142578, "t": 70.43203735351562, "r": 547.20105, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9827796220779419, "cells": [{"id": 2, "text": "For example, consider a row permission on an ACCOUNTS table ", "bbox": {"l": 136.8002, "t": 71.50903000000005, "r": 426.74084, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "(PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and ", "bbox": {"l": 136.8002, "t": 83.50885000000017, "r": 541.2251, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 95.50867000000005, "r": 547.20105, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "changes, DB2 does not check to determine whether the change to the CUSTOMERS table ", "bbox": {"l": 136.8002, "t": 107.50847999999996, "r": 539.45013, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "breaks the ACCOUNTS table row permission. If this table definition change does break the ", "bbox": {"l": 136.8002, "t": 119.50829999999996, "r": 540.14032, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "row permission, an error does not surface until an application tries to read rows from the ", "bbox": {"l": 136.8002, "t": 131.50811999999996, "r": 528.31085, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ACCOUNTS table.", "bbox": {"l": 136.8002, "t": 143.50793, "r": 219.39151, "b": 152.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, consider a row permission on an ACCOUNTS table (PERMISSION1_ON_ACCOUNTS). The ACCOUNTS table row permission references and compares columns in the CUSTOMERS table. When the definition of the CUSTOMERS table changes, DB2 does not check to determine whether the change to the CUSTOMERS table breaks the ACCOUNTS table row permission. If this table definition change does break the row permission, an error does not surface until an application tries to read rows from the ACCOUNTS table."}, {"label": "text", "id": 3, "page_no": 130, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.99624633789062, "t": 164.5958709716797, "r": 547.16022, "b": 211.07290649414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9867848753929138, "cells": [{"id": 9, "text": "Instead of waiting for an application to detect this error, the ", "bbox": {"l": 136.8002, "t": 165.52752999999996, "r": 395.05807, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "REGENERATE", "bbox": {"l": 394.98032, "t": 165.67693999999995, "r": 444.95959, "b": 174.50153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " option can be used on ", "bbox": {"l": 444.9606, "t": 165.52752999999996, "r": 547.16022, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the ACCOUNTS row permission. The ", "bbox": {"l": 136.8002, "t": 177.52733999999998, "r": 304.96188, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "REGENERATE", "bbox": {"l": 304.86029, "t": 177.67675999999994, "r": 354.83957, "b": 186.50134000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": " option returns an error if the change in the ", "bbox": {"l": 354.84058, "t": 177.52733999999998, "r": 546.79071, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "CUSTOMERS table definition causes the row permission to be invalid. In this way, the row ", "bbox": {"l": 136.80025, "t": 189.52715999999998, "r": 536.28687, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "permission can be proactively corrected before an application discovers the error.", "bbox": {"l": 136.80025, "t": 201.52697999999998, "r": 495.64507999999995, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Instead of waiting for an application to detect this error, the REGENERATE option can be used on the ACCOUNTS row permission. The REGENERATE option returns an error if the change in the CUSTOMERS table definition causes the row permission to be invalid. In this way, the row permission can be proactively corrected before an application discovers the error."}, {"label": "section_header", "id": 4, "page_no": 130, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 63.91755676269531, "t": 238.19967651367188, "r": 536.6239, "b": 254.27833557128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9644711017608643, "cells": [{"id": 17, "text": "7.2", "bbox": {"l": 64.800003, "t": 239.22058000000004, "r": 87.193398, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Managing tables with row permissions and column masks", "bbox": {"l": 91.672058, "t": 239.22058000000004, "r": 536.6239, "b": 253.98357999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2 Managing tables with row permissions and column masks"}, {"label": "text", "id": 5, "page_no": 130, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8260498046875, "t": 270.5757751464844, "r": 547.26471, "b": 292.70154, "coord_origin": "TOPLEFT"}, "confidence": 0.9742122888565063, "cells": [{"id": 19, "text": "This section examines the object management considerations after RCAC is added to a DB2 ", "bbox": {"l": 136.8, "t": 271.48870999999997, "r": 547.26471, "b": 280.70172, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "table.", "bbox": {"l": 136.8, "t": 283.48856, "r": 160.85938, "b": 292.70154, "coord_origin": "TOPLEFT"}}]}, "text": "This section examines the object management considerations after RCAC is added to a DB2 table."}, {"label": "section_header", "id": 6, "page_no": 130, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 63.97272872924805, "t": 312.4022216796875, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.955165684223175, "cells": [{"id": 21, "text": "7.2.1", "bbox": {"l": 64.800003, "t": 313.37473, "r": 94.395134, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Save and restore", "bbox": {"l": 98.094528, "t": 313.37473, "r": 205.33696, "b": 325.36269999999996, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.1 Save and restore"}, {"label": "text", "id": 7, "page_no": 130, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9362335205078, "t": 338.6729431152344, "r": 547.16217, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9810709357261658, "cells": [{"id": 23, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are ", "bbox": {"l": 136.8, "t": 339.52872, "r": 530.53082, "b": 348.7417, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "automatically saved and restored when the DB2 table object is saved and restored. ", "bbox": {"l": 136.8, "t": 351.52853, "r": 505.7432600000001, "b": 360.74152, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Therefore, no adjustments must be made to your database backup process to accommodate ", "bbox": {"l": 136.8, "t": 363.52835, "r": 547.16217, "b": 372.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "RCAC.", "bbox": {"l": 136.8, "t": 375.52817, "r": 167.29852, "b": 384.74115000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Row permissions and column masks are stored in the DB2 table object itself, so they are automatically saved and restored when the DB2 table object is saved and restored. Therefore, no adjustments must be made to your database backup process to accommodate RCAC."}, {"label": "text", "id": 8, "page_no": 130, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.97621154785156, "t": 396.52679443359375, "r": 547.22571, "b": 430.947021484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9845772385597229, "cells": [{"id": 27, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference ", "bbox": {"l": 136.8, "t": 397.48798, "r": 547.22571, "b": 406.70096, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "other DB2 objects other than the table over which they are defined. When the RCAC definition ", "bbox": {"l": 136.8, "t": 409.48779, "r": 547.14392, "b": 418.70078, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "has dependencies on other DB2 objects, the restore process is much more challenging.", "bbox": {"l": 136.8, "t": 421.48761, "r": 523.84241, "b": 430.70059000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Save and restore processing works fine with RCAC if the RCAC definition does not reference other DB2 objects other than the table over which they are defined. When the RCAC definition has dependencies on other DB2 objects, the restore process is much more challenging."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 130, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.8012390136719, "t": 754.84130859375, "r": 518.01208, "b": 764.0040283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9527303576469421, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 130, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0354614257812, "t": 754.32568359375, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9183745980262756, "cells": [{"id": 1, "text": "115", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "115"}]}}, {"page_no": 131, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.29827880859375, "t": 754.2285766601562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9285372495651245, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.44544219970703, "t": 754.6015625, "r": 339.8977355957031, "b": 763.9843139648438, "coord_origin": "TOPLEFT"}, "confidence": 0.954731285572052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.94534301757812, "t": 70.57475280761719, "r": 546.44183, "b": 200.73284912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9859393835067749, "cells": [{"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.7970428466797, "t": 456.8849182128906, "r": 333.88006591796875, "b": 466.27325439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9470012187957764, "cells": [{"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.7681427001953, "t": 482.7886657714844, "r": 547.26556, "b": 553.0422973632812, "coord_origin": "TOPLEFT"}, "confidence": 0.986469030380249, "cells": [{"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 63.921077728271484, "t": 572.3475952148438, "r": 196.4101, "b": 585.6023559570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9667927026748657, "cells": [{"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.8064727783203, "t": 598.497802734375, "r": 538.52258, "b": 645.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.9099884033203, "t": 656.6238403320312, "r": 542.69781, "b": 691.0518188476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9842554926872253, "cells": [{"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.79965209960938, "t": 702.5816040039062, "r": 524.25989, "b": 724.7844848632812, "coord_origin": "TOPLEFT"}, "confidence": 0.97635817527771, "cells": [{"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 136.1027374267578, "t": 215.22740173339844, "r": 522.8739013671875, "b": 453.6589050292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9824627637863159, "cells": [{"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 131, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29827880859375, "t": 754.2285766601562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9285372495651245, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "116"}, {"label": "page_footer", "id": 1, "page_no": 131, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.44544219970703, "t": 754.6015625, "r": 339.8977355957031, "b": 763.9843139648438, "coord_origin": "TOPLEFT"}, "confidence": 0.954731285572052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 131, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.94534301757812, "t": 70.57475280761719, "r": 546.44183, "b": 200.73284912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9859393835067749, "cells": [{"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026 SELECT C.CUSTOMER_ID FROM CUSTOMERS C \u2026). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1."}, {"label": "caption", "id": 3, "page_no": 131, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.7970428466797, "t": 456.8849182128906, "r": 333.88006591796875, "b": 466.27325439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9470012187957764, "cells": [{"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7-1 Restoring tables to different schemas"}, {"label": "text", "id": 4, "page_no": 131, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7681427001953, "t": 482.7886657714844, "r": 547.26556, "b": 553.0422973632812, "coord_origin": "TOPLEFT"}, "confidence": 0.986469030380249, "cells": [{"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}]}, "text": "The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then run the generated script."}, {"label": "section_header", "id": 5, "page_no": 131, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 63.921077728271484, "t": 572.3475952148438, "r": 196.4101, "b": 585.6023559570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9667927026748657, "cells": [{"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.2 Table migration"}, {"label": "text", "id": 6, "page_no": 131, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8064727783203, "t": 598.497802734375, "r": 538.52258, "b": 645.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}]}, "text": "There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes."}, {"label": "text", "id": 7, "page_no": 131, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9099884033203, "t": 656.6238403320312, "r": 542.69781, "b": 691.0518188476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9842554926872253, "cells": [{"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}]}, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing."}, {"label": "text", "id": 8, "page_no": 131, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.79965209960938, "t": 702.5816040039062, "r": 524.25989, "b": 724.7844848632812, "coord_origin": "TOPLEFT"}, "confidence": 0.97635817527771, "cells": [{"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}]}, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas."}, {"label": "picture", "id": 9, "page_no": 131, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.1027374267578, "t": 215.22740173339844, "r": 522.8739013671875, "b": 453.6589050292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9824627637863159, "cells": [{"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 131, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.94534301757812, "t": 70.57475280761719, "r": 546.44183, "b": 200.73284912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9859393835067749, "cells": [{"id": 2, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 531.61835, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "name for the schema long name of BANK_SCHEMA) is saved and restored into a library ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 530.71289, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 545.21863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 490.46466, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "SELECT ", "bbox": {"l": 490.43976000000004, "t": 107.65752999999995, "r": 525.3595, "b": 116.48212000000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "C.CUSTOMER_ID FROM CUSTOMERS C", "bbox": {"l": 136.79999, "t": 119.65734999999995, "r": 286.67804, "b": 128.48193000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "\u2026). After the restore operation, the ACCOUNTS row ", "bbox": {"l": 286.73981, "t": 119.50792999999999, "r": 521.1106, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 ", "bbox": {"l": 136.79997, "t": 131.50775, "r": 513.90448, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "explicitly qualifies all object references when the row permission or column mask is created. ", "bbox": {"l": 136.79996, "t": 143.50757, "r": 544.04651, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The restore processing does not change the explicit qualification from BANK_SCHEMA to ", "bbox": {"l": 136.79996, "t": 155.50739, "r": 535.98975, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 ", "bbox": {"l": 136.79996, "t": 167.5072, "r": 535.21295, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "objects residing in a different schema, even though it was not created that way originally. For ", "bbox": {"l": 136.79996, "t": 179.50702, "r": 546.44183, "b": 188.72002999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "more details, see Figure 7-1.", "bbox": {"l": 136.79996, "t": 191.50684, "r": 263.8049, "b": 200.71984999999995, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that the BANKSCHEMA library (which is the system name or short name for the schema long name of BANK_SCHEMA) is saved and restored into a library named BANK_TEST. Recall from the example in 7.1.4, \u201cRegenerating\u201d on page 114 that the row permission on the ACCOUNTS table references the CUSTOMERS table (\u2026 SELECT C.CUSTOMER_ID FROM CUSTOMERS C \u2026). After the restore operation, the ACCOUNTS row permission still references the CUSTOMERS table in BANK_SCHEMA because DB2 explicitly qualifies all object references when the row permission or column mask is created. The restore processing does not change the explicit qualification from BANK_SCHEMA to BANK_TEST. As a result, the restored ACCOUNTS row permission now depends on DB2 objects residing in a different schema, even though it was not created that way originally. For more details, see Figure 7-1."}, {"label": "caption", "id": 3, "page_no": 131, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.7970428466797, "t": 456.8849182128906, "r": 333.88006591796875, "b": 466.27325439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9470012187957764, "cells": [{"id": 15, "text": "Figure 7-1 Restoring tables to different schemas", "bbox": {"l": 136.8, "t": 457.27798, "r": 333.25101, "b": 465.603, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7-1 Restoring tables to different schemas"}, {"label": "text", "id": 4, "page_no": 131, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.7681427001953, "t": 482.7886657714844, "r": 547.26556, "b": 553.0422973632812, "coord_origin": "TOPLEFT"}, "confidence": 0.986469030380249, "cells": [{"id": 16, "text": "The only way to fix this issue is to re-create the row permission or column mask after the ", "bbox": {"l": 136.8, "t": 483.22873, "r": 529.77881, "b": 492.44171, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "restore operation. Re-creation of the row permission or column mask is required only for ", "bbox": {"l": 136.8, "t": 495.22855, "r": 528.1543, "b": 504.44153, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC ", "bbox": {"l": 136.8, "t": 507.22836, "r": 528.0686, "b": 516.44135, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "definitions instead of a subset. For example, generate the SQL using System i Navigator, ", "bbox": {"l": 136.8, "t": 519.2281800000001, "r": 531.37744, "b": 528.4411600000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then ", "bbox": {"l": 136.8, "t": 531.22797, "r": 547.26556, "b": 540.44098, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "run the generated script.", "bbox": {"l": 136.8, "t": 543.22778, "r": 245.34109, "b": 552.44078, "coord_origin": "TOPLEFT"}}]}, "text": "The only way to fix this issue is to re-create the row permission or column mask after the restore operation. Re-creation of the row permission or column mask is required only for definitions that reference other DB2 objects, but it is simpler to re-create all of the RCAC definitions instead of a subset. For example, generate the SQL using System i Navigator, clear the \u201cSchema qualify names for objects\u201d and select the \u201cOR REPLACE clause\u201d, and then run the generated script."}, {"label": "section_header", "id": 5, "page_no": 131, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 63.921077728271484, "t": 572.3475952148438, "r": 196.4101, "b": 585.6023559570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9667927026748657, "cells": [{"id": 22, "text": "7.2.2", "bbox": {"l": 64.800003, "t": 573.11472, "r": 94.223091, "b": 585.10272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table migration", "bbox": {"l": 97.90097, "t": 573.11472, "r": 196.4101, "b": 585.10272, "coord_origin": "TOPLEFT"}}]}, "text": "7.2.2 Table migration"}, {"label": "text", "id": 6, "page_no": 131, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8064727783203, "t": 598.497802734375, "r": 538.52258, "b": 645.066162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9866422414779663, "cells": [{"id": 24, "text": "There are several IBM i CL commands, such as Move Object (", "bbox": {"l": 136.8, "t": 599.26872, "r": 411.69705, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "MOVOBJ", "bbox": {"l": 411.66016, "t": 599.41812, "r": 441.59990999999997, "b": 608.2426800000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "), Create Duplicate ", "bbox": {"l": 441.65967, "t": 599.26872, "r": 527.79877, "b": 608.48172, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Object (", "bbox": {"l": 136.79999, "t": 611.2685200000001, "r": 171.80441, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CRTDUPOBJ", "bbox": {"l": 171.77951, "t": 611.41792, "r": 216.71902, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "), and Copy Library (", "bbox": {"l": 216.77979, "t": 611.2685200000001, "r": 307.79428, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CPYLIB", "bbox": {"l": 307.73947, "t": 611.41792, "r": 337.73901, "b": 620.24248, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "), which are used to migrate a table from one ", "bbox": {"l": 337.73999, "t": 611.2685200000001, "r": 538.52258, "b": 620.48152, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "library to another one. Often, this migration is done to create different versions of the table ", "bbox": {"l": 136.79997, "t": 623.26833, "r": 535.95691, "b": 632.48132, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "that can be used for development or testing purposes. ", "bbox": {"l": 136.79997, "t": 635.26813, "r": 377.78326, "b": 644.48112, "coord_origin": "TOPLEFT"}}]}, "text": "There are several IBM i CL commands, such as Move Object ( MOVOBJ ), Create Duplicate Object ( CRTDUPOBJ ), and Copy Library ( CPYLIB ), which are used to migrate a table from one library to another one. Often, this migration is done to create different versions of the table that can be used for development or testing purposes."}, {"label": "text", "id": 7, "page_no": 131, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9099884033203, "t": 656.6238403320312, "r": 542.69781, "b": 691.0518188476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9842554926872253, "cells": [{"id": 34, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the ", "bbox": {"l": 136.79997, "t": 657.22794, "r": 535.00952, "b": 666.44093, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "RCAC definition references other DB2 objects, then IBM i CL commands do not change the ", "bbox": {"l": 136.79997, "t": 669.22774, "r": 542.69781, "b": 678.44074, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "schema names that are explicitly qualified by the DB2 internal RCAC processing.", "bbox": {"l": 136.79997, "t": 681.22755, "r": 494.12694999999997, "b": 690.44055, "coord_origin": "TOPLEFT"}}]}, "text": "The migration of a table with RCAC has the same challenges as restore processing. If the RCAC definition references other DB2 objects, then IBM i CL commands do not change the schema names that are explicitly qualified by the DB2 internal RCAC processing."}, {"label": "text", "id": 8, "page_no": 131, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.79965209960938, "t": 702.5816040039062, "r": 524.25989, "b": 724.7844848632812, "coord_origin": "TOPLEFT"}, "confidence": 0.97635817527771, "cells": [{"id": 37, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of ", "bbox": {"l": 136.79997, "t": 703.247116, "r": 524.25989, "b": 712.460121, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "references to DB2 objects in other schemas. ", "bbox": {"l": 136.79997, "t": 715.246925, "r": 335.79077, "b": 724.45993, "coord_origin": "TOPLEFT"}}]}, "text": "Again, re-creating the row permission or column mask is the only way to fix the issue of references to DB2 objects in other schemas."}, {"label": "picture", "id": 9, "page_no": 131, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 136.1027374267578, "t": 215.22740173339844, "r": 522.8739013671875, "b": 453.6589050292969, "coord_origin": "TOPLEFT"}, "confidence": 0.9824627637863159, "cells": [{"id": 39, "text": "Move", "bbox": {"l": 316.2662, "t": 220.88775999999996, "r": 344.72815, "b": 231.39691000000005, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Copy", "bbox": {"l": 318.01773, "t": 235.63744999999994, "r": 342.92993, "b": 246.14661, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "BANK SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.97681, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "BANK TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.81213, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Duplicate", "bbox": {"l": 306.95551, "t": 250.38702, "r": 354.05246, "b": 260.89617999999996, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Restore", "bbox": {"l": 311.56479, "t": 265.13671999999997, "r": 349.3006, "b": 275.64586999999995, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "BANK_SCHEMA", "bbox": {"l": 196.3947, "t": 287.32263000000006, "r": 273.95575, "b": 297.83176, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "BANK_TEST", "bbox": {"l": 397.38919, "t": 286.03204, "r": 454.89566, "b": 296.54117, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNTS", "bbox": {"l": 161.9789, "t": 307.9545, "r": 208.89331, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNTS", "bbox": {"l": 352.83301, "t": 307.9545, "r": 399.74747, "b": 316.71362, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "CUSTOMERS", "bbox": {"l": 257.8822, "t": 354.96887, "r": 310.7991, "b": 363.728, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Pe", "bbox": {"l": 198.0847, "t": 334.38089, "r": 208.51683, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "rmission", "bbox": {"l": 208.52605, "t": 334.38089, "r": 244.6942, "b": 343.14001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "CUSTOMERS", "bbox": {"l": 449.93481, "t": 355.27618, "r": 502.85172000000006, "b": 364.03531, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Pe", "bbox": {"l": 390.1373, "t": 334.68817, "r": 400.56946, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "rmission", "bbox": {"l": 400.57867, "t": 334.68817, "r": 436.74683, "b": 343.4473, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 158.7216, "t": 431.38046, "r": 311.55884, "b": 439.62183, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "References BANK_SCHEMA.CUSTOMERS", "bbox": {"l": 350.7742, "t": 431.68777, "r": 503.61142000000007, "b": 439.92914, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 131, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.29827880859375, "t": 754.2285766601562, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9285372495651245, "cells": [{"id": 0, "text": "116 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "116"}, {"label": "page_footer", "id": 1, "page_no": 131, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.44544219970703, "t": 754.6015625, "r": 339.8977355957031, "b": 763.9843139648438, "coord_origin": "TOPLEFT"}, "confidence": 0.954731285572052, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 132, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 283.7824401855469, "t": 754.8123779296875, "r": 518.01208, "b": 764.00732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9508650898933411, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0186157226562, "t": 754.230224609375, "r": 547.265380859375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163357019424438, "cells": [{"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.03428649902344, "t": 70.103271484375, "r": 396.18387, "b": 86.66415405273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9635764956474304, "cells": [{"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9032745361328, "t": 102.72404479980469, "r": 546.32922, "b": 172.8615264892578, "coord_origin": "TOPLEFT"}, "confidence": 0.9850849509239197, "cells": [{"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.86427307128906, "t": 184.6098175048828, "r": 547.29333, "b": 255.25311279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875213503837585, "cells": [{"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.72532653808594, "t": 266.5744934082031, "r": 546.21472, "b": 300.73944, "coord_origin": "TOPLEFT"}, "confidence": 0.9673486948013306, "cells": [{"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6563262939453, "t": 307.4368591308594, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}, "confidence": 0.910222053527832, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 150.67897033691406, "t": 324.8032531738281, "r": 545.99457, "b": 346.948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.8444021940231323, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.60202026367188, "t": 353.90203857421875, "r": 387.59177, "b": 364.74249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9257392883300781, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.6260986328125, "t": 370.6153259277344, "r": 546.2595825195312, "b": 392.73980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7952681183815002, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 132, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.7824401855469, "t": 754.8123779296875, "r": 518.01208, "b": 764.00732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9508650898933411, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 132, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0186157226562, "t": 754.230224609375, "r": 547.265380859375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163357019424438, "cells": [{"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "117"}, {"label": "section_header", "id": 2, "page_no": 132, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03428649902344, "t": 70.103271484375, "r": 396.18387, "b": 86.66415405273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9635764956474304, "cells": [{"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "7.3 Monitoring and auditing function usage"}, {"label": "text", "id": 3, "page_no": 132, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9032745361328, "t": 102.72404479980469, "r": 546.32922, "b": 172.8615264892578, "coord_origin": "TOPLEFT"}, "confidence": 0.9850849509239197, "cells": [{"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events."}, {"label": "text", "id": 4, "page_no": 132, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.86427307128906, "t": 184.6098175048828, "r": 547.29333, "b": 255.25311279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875213503837585, "cells": [{"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization\u2019s data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed."}, {"label": "text", "id": 5, "page_no": 132, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.72532653808594, "t": 266.5744934082031, "r": 546.21472, "b": 300.73944, "coord_origin": "TOPLEFT"}, "confidence": 0.9673486948013306, "cells": [{"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}]}, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents:"}, {"label": "list_item", "id": 6, "page_no": 132, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6563262939453, "t": 307.4368591308594, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}, "confidence": 0.910222053527832, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide , found at:"}, {"label": "list_item", "id": 7, "page_no": 132, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.67897033691406, "t": 324.8032531738281, "r": 545.99457, "b": 346.948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.8444021940231323, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 8, "page_no": 132, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60202026367188, "t": 353.90203857421875, "r": 387.59177, "b": 364.74249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9257392883300781, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide , found at:"}, {"label": "list_item", "id": 9, "page_no": 132, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.6260986328125, "t": 370.6153259277344, "r": 546.2595825195312, "b": 392.73980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7952681183815002, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}], "body": [{"label": "section_header", "id": 2, "page_no": 132, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03428649902344, "t": 70.103271484375, "r": 396.18387, "b": 86.66415405273438, "coord_origin": "TOPLEFT"}, "confidence": 0.9635764956474304, "cells": [{"id": 2, "text": "7.3", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 87.32769, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Monitoring and auditing function usage", "bbox": {"l": 91.833237, "t": 71.22069999999997, "r": 396.18387, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "7.3 Monitoring and auditing function usage"}, {"label": "text", "id": 3, "page_no": 132, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9032745361328, "t": 102.72404479980469, "r": 546.32922, "b": 172.8615264892578, "coord_origin": "TOPLEFT"}, "confidence": 0.9850849509239197, "cells": [{"id": 4, "text": "While establishing proper roles for users, separating duties using function usage IDs, and ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 533.2309, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "defining RCAC policies allows you to implement an effective and pervasive data access ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 524.80878, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "control scheme. How do you monitor and audit everyone who is involved in the ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 485.689, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "implementation of that scheme? The answer is to use IBM i journaling. A special journal that ", "bbox": {"l": 136.8, "t": 139.48816, "r": 546.32922, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "is called QAUDJRN, also known as the ", "bbox": {"l": 136.8, "t": 151.48798, "r": 311.74442, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "audit journal", "bbox": {"l": 311.64001, "t": 150.96497, "r": 369.36407, "b": 161.02270999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": ", can provide a record and audit trail of ", "bbox": {"l": 369.35999, "t": 151.48870999999997, "r": 542.42297, "b": 160.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "many security relevant events that occur on the system, including RCAC-related events.", "bbox": {"l": 136.79996, "t": 163.48852999999997, "r": 523.64832, "b": 172.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "While establishing proper roles for users, separating duties using function usage IDs, and defining RCAC policies allows you to implement an effective and pervasive data access control scheme. How do you monitor and audit everyone who is involved in the implementation of that scheme? The answer is to use IBM i journaling. A special journal that is called QAUDJRN, also known as the audit journal , can provide a record and audit trail of many security relevant events that occur on the system, including RCAC-related events."}, {"label": "text", "id": 4, "page_no": 132, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.86427307128906, "t": 184.6098175048828, "r": 547.29333, "b": 255.25311279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9875213503837585, "cells": [{"id": 12, "text": "The tasks and operations of security administrators and database engineers who are ", "bbox": {"l": 136.79996, "t": 185.50811999999996, "r": 514.04791, "b": 194.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "collaborating can (and should) be effectively monitored and audited to ensure that the ", "bbox": {"l": 136.79996, "t": 197.50793, "r": 516.71832, "b": 206.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "organization\u2019s data access control and governance policies are in place and enabled. For ", "bbox": {"l": 136.79996, "t": 209.50775, "r": 532.58826, "b": 218.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "example, the Database Engineers can be involved in designing and developing functions and ", "bbox": {"l": 136.79996, "t": 221.50757, "r": 547.29333, "b": 230.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "triggers that must be secured using the SECURE attribute. Otherwise, without properly ", "bbox": {"l": 136.79996, "t": 233.50739, "r": 522.2171, "b": 242.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "securing functions and triggers, the RCAC controls can be bypassed.", "bbox": {"l": 136.79996, "t": 245.5072, "r": 442.06406, "b": 254.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The tasks and operations of security administrators and database engineers who are collaborating can (and should) be effectively monitored and audited to ensure that the organization\u2019s data access control and governance policies are in place and enabled. For example, the Database Engineers can be involved in designing and developing functions and triggers that must be secured using the SECURE attribute. Otherwise, without properly securing functions and triggers, the RCAC controls can be bypassed."}, {"label": "text", "id": 5, "page_no": 132, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.72532653808594, "t": 266.5744934082031, "r": 546.21472, "b": 300.73944, "coord_origin": "TOPLEFT"}, "confidence": 0.9673486948013306, "cells": [{"id": 18, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. ", "bbox": {"l": 136.79996, "t": 267.52679, "r": 546.21472, "b": 276.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "More information about the journaling of RCAC operations can be found in the following ", "bbox": {"l": 136.79996, "t": 279.52661, "r": 525.30579, "b": 288.73962, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "documents:", "bbox": {"l": 136.79996, "t": 291.52646, "r": 188.45851, "b": 300.73944, "coord_origin": "TOPLEFT"}}]}, "text": "A new journal entry type of \u201cAX\u201d for journal entry code \u201cT\u201d (audit trail) is now used for RCAC. More information about the journaling of RCAC operations can be found in the following documents:"}, {"label": "list_item", "id": 6, "page_no": 132, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6563262939453, "t": 307.4368591308594, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}, "confidence": 0.910222053527832, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 308.65564, "r": 141.77995, "b": 317.43042, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20012, "t": 308.50626, "r": 352.84631, "b": 317.71924, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ", found at:", "bbox": {"l": 352.67999, "t": 308.50626, "r": 396.89444, "b": 317.71924, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide , found at:"}, {"label": "list_item", "id": 7, "page_no": 132, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.67897033691406, "t": 324.8032531738281, "r": 545.99457, "b": 346.948974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.8444021940231323, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 325.63544, "r": 545.99457, "b": 334.41022, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 337.63525000000004, "r": 211.1394, "b": 346.41003, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 8, "page_no": 132, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60202026367188, "t": 353.90203857421875, "r": 387.59177, "b": 364.74249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9257392883300781, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 354.67484, "r": 141.77997, "b": 363.44962, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 354.52545, "r": 343.57654, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ", found at:", "bbox": {"l": 343.38031, "t": 354.52545, "r": 387.59177, "b": 363.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide , found at:"}, {"label": "list_item", "id": 9, "page_no": 132, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.6260986328125, "t": 370.6153259277344, "r": 546.2595825195312, "b": 392.73980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7952681183815002, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20012, "t": 371.65463, "r": 545.99451, "b": 380.42941, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20012, "t": 383.65445, "r": 201.11963, "b": 392.42923, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 132, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 283.7824401855469, "t": 754.8123779296875, "r": 518.01208, "b": 764.00732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9508650898933411, "cells": [{"id": 0, "text": "Chapter 7. Row and Column Access Control management ", "bbox": {"l": 284.39999, "t": 755.538002, "r": 518.01208, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 7. Row and Column Access Control management"}, {"label": "page_footer", "id": 1, "page_no": 132, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0186157226562, "t": 754.230224609375, "r": 547.265380859375, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163357019424438, "cells": [{"id": 1, "text": "117", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "117"}]}}, {"page_no": 133, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.53031158447266, "t": 754.076416015625, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9196769595146179, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.5851821899414, "t": 754.4262084960938, "r": 340.1449890136719, "b": 764.1357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9428929090499878, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 133, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53031158447266, "t": 754.076416015625, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9196769595146179, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "118"}, {"label": "page_footer", "id": 1, "page_no": 133, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.5851821899414, "t": 754.4262084960938, "r": 340.1449890136719, "b": 764.1357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9428929090499878, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 133, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53031158447266, "t": 754.076416015625, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9196769595146179, "cells": [{"id": 0, "text": "118 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "118"}, {"label": "page_footer", "id": 1, "page_no": 133, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.5851821899414, "t": 754.4262084960938, "r": 340.1449890136719, "b": 764.1357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9428929090499878, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 134, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.695404052734375, "t": 754.7307739257812, "r": 257.24335, "b": 764.0828247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9506158828735352, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0399169921875, "t": 754.2144165039062, "r": 547.2623901367188, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.925187349319458, "cells": [{"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.7628173828125, "t": 253.29893493652344, "r": 479.93341, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9399341940879822, "cells": [{"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.9272003173828, "t": 347.94287109375, "r": 538.46985, "b": 394.585205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859251379966736, "cells": [{"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9006805419922, "t": 406.127197265625, "r": 347.41208, "b": 416.26715087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.945638120174408, "cells": [{"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.63284301757812, "t": 422.662109375, "r": 411.53955, "b": 432.9858703613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9510299563407898, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.8564910888672, "t": 434.4798278808594, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}, "confidence": 0.9291093945503235, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 500.39999, "t": 93.13899230957031, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7733241319656372, "cells": [{"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 32.17782974243164, "t": 70.58657836914062, "r": 238.9773712158203, "b": 238.30882263183594, "coord_origin": "TOPLEFT"}, "confidence": 0.722669243812561, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 134, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.695404052734375, "t": 754.7307739257812, "r": 257.24335, "b": 764.0828247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9506158828735352, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 134, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0399169921875, "t": 754.2144165039062, "r": 547.2623901367188, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.925187349319458, "cells": [{"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "119"}, {"label": "text", "id": 2, "page_no": 134, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 8."}, {"label": "section_header", "id": 3, "page_no": 134, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.7628173828125, "t": 253.29893493652344, "r": 479.93341, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9399341940879822, "cells": [{"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Designing and planning for success"}, {"label": "text", "id": 4, "page_no": 134, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9272003173828, "t": 347.94287109375, "r": 538.46985, "b": 394.585205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859251379966736, "cells": [{"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing."}, {"label": "text", "id": 5, "page_no": 134, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9006805419922, "t": 406.127197265625, "r": 347.41208, "b": 416.26715087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.945638120174408, "cells": [{"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 134, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.63284301757812, "t": 422.662109375, "r": 411.53955, "b": 432.9858703613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9510299563407898, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementing RCAC with good design and proper planning"}, {"label": "list_item", "id": 7, "page_no": 134, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8564910888672, "t": 434.4798278808594, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}, "confidence": 0.9291093945503235, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i Center of Excellence"}, {"label": "text", "id": 8, "page_no": 134, "cluster": {"id": 8, "label": "text", "bbox": {"l": 500.39999, "t": 93.13899230957031, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7733241319656372, "cells": [{"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "picture", "id": 9, "page_no": 134, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 32.17782974243164, "t": 70.58657836914062, "r": 238.9773712158203, "b": 238.30882263183594, "coord_origin": "TOPLEFT"}, "confidence": 0.722669243812561, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 134, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 8.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 8."}, {"label": "section_header", "id": 3, "page_no": 134, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.7628173828125, "t": 253.29893493652344, "r": 479.93341, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9399341940879822, "cells": [{"id": 3, "text": "Designing and planning for ", "bbox": {"l": 136.8, "t": 254.88635, "r": 479.93341, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "success", "bbox": {"l": 136.8, "t": 285.84671, "r": 239.39761, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Designing and planning for success"}, {"label": "text", "id": 4, "page_no": 134, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9272003173828, "t": 347.94287109375, "r": 538.46985, "b": 394.585205078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9859251379966736, "cells": [{"id": 5, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on ", "bbox": {"l": 136.8, "t": 348.70871, "r": 538.46985, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "knowledge and skills, designing and planning are fundamental aspects. This chapter ", "bbox": {"l": 136.79999, "t": 360.70853, "r": 511.88861, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "describes the need for a deep understanding of the technology, and good design, proper ", "bbox": {"l": 136.79996, "t": 372.7083400000001, "r": 529.5744, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "planning, and adequate testing.", "bbox": {"l": 136.79996, "t": 384.70816, "r": 276.33261, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Although successfully implementing Row and Column Access Control (RCAC) is based on knowledge and skills, designing and planning are fundamental aspects. This chapter describes the need for a deep understanding of the technology, and good design, proper planning, and adequate testing."}, {"label": "text", "id": 5, "page_no": 134, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9006805419922, "t": 406.127197265625, "r": 347.41208, "b": 416.26715087890625, "coord_origin": "TOPLEFT"}, "confidence": 0.945638120174408, "cells": [{"id": 9, "text": "The following topics are covered in this chapter:", "bbox": {"l": 136.79996, "t": 406.7277199999999, "r": 347.41208, "b": 415.9407, "coord_origin": "TOPLEFT"}}]}, "text": "The following topics are covered in this chapter:"}, {"label": "list_item", "id": 6, "page_no": 134, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.63284301757812, "t": 422.662109375, "r": 411.53955, "b": 432.9858703613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9510299563407898, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 423.85689999999994, "r": 141.77995, "b": 432.63168, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 151.20012, "t": 423.70752, "r": 411.53955, "b": 432.9205, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Implementing RCAC with good design and proper planning"}, {"label": "list_item", "id": 7, "page_no": 134, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.8564910888672, "t": 434.4798278808594, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}, "confidence": 0.9291093945503235, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79996, "t": 435.85672000000005, "r": 141.77995, "b": 444.63149999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "DB2 for i Center of Excellence", "bbox": {"l": 151.20012, "t": 435.70733999999993, "r": 284.81952, "b": 444.92032, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i Center of Excellence"}, {"label": "text", "id": 8, "page_no": 134, "cluster": {"id": 8, "label": "text", "bbox": {"l": 500.39999, "t": 93.13899230957031, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7733241319656372, "cells": [{"id": 14, "text": "8", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "picture", "id": 9, "page_no": 134, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 32.17782974243164, "t": 70.58657836914062, "r": 238.9773712158203, "b": 238.30882263183594, "coord_origin": "TOPLEFT"}, "confidence": 0.722669243812561, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 134, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.695404052734375, "t": 754.7307739257812, "r": 257.24335, "b": 764.0828247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9506158828735352, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 134, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0399169921875, "t": 754.2144165039062, "r": 547.2623901367188, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.925187349319458, "cells": [{"id": 1, "text": "119", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "119"}]}}, {"page_no": 135, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.42459869384766, "t": 754.2553100585938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.930542528629303, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.57987976074219, "t": 754.646240234375, "r": 339.84716796875, "b": 764.02783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9501276612281799, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.5673599243164, "t": 73.4725112915039, "r": 544.55121, "b": 90.01676940917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9646757245063782, "cells": [{"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9280242919922, "t": 105.88225555419922, "r": 544.7099, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9831311702728271, "cells": [{"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.055419921875, "t": 151.780517578125, "r": 545.35938, "b": 198.01513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9863764643669128, "cells": [{"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8184356689453, "t": 209.97195434570312, "r": 547.25061, "b": 267.85925, "coord_origin": "TOPLEFT"}, "confidence": 0.988143265247345, "cells": [{"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.80397033691406, "t": 280.05120849609375, "r": 500.55725, "b": 290.4837951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9292261004447937, "cells": [{"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.56689453125, "t": 296.6219787597656, "r": 429.45065, "b": 307.35797119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9498389363288879, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.60137939453125, "t": 308.7406311035156, "r": 351.64917, "b": 319.1260070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.942351758480072, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.644775390625, "t": 320.5731201171875, "r": 491.77822999999995, "b": 331.0446472167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9509508013725281, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.75515747070312, "t": 332.263427734375, "r": 426.24567, "b": 343.17962646484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9367370009422302, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.80447387695312, "t": 344.1607666015625, "r": 433.24645999999996, "b": 355.1954040527344, "coord_origin": "TOPLEFT"}, "confidence": 0.9496915936470032, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.60531616210938, "t": 356.711669921875, "r": 383.57187, "b": 367.0285339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9547297358512878, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.60353088378906, "t": 378.73797607421875, "r": 547.24536, "b": 461.1492614746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9838752746582031, "cells": [{"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.79904174804688, "t": 472.91790771484375, "r": 547.1958, "b": 531.1986694335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882535934448242, "cells": [{"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.42830657958984, "t": 558.0595703125, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}, "confidence": 0.9633642435073853, "cells": [{"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 135.96109008789062, "t": 590.4443359375, "r": 533.23181, "b": 649.4010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875909090042114, "cells": [{"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 136.06277465820312, "t": 660.7098999023438, "r": 547.2406, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9721947908401489, "cells": [{"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 135, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42459869384766, "t": 754.2553100585938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.930542528629303, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "120"}, {"label": "page_footer", "id": 1, "page_no": 135, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57987976074219, "t": 754.646240234375, "r": 339.84716796875, "b": 764.02783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9501276612281799, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 135, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.5673599243164, "t": 73.4725112915039, "r": 544.55121, "b": 90.01676940917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9646757245063782, "cells": [{"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "8.1 Implementing RCAC with good design and proper planning"}, {"label": "text", "id": 3, "page_no": 135, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9280242919922, "t": 105.88225555419922, "r": 544.7099, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9831311702728271, "cells": [{"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i."}, {"label": "text", "id": 4, "page_no": 135, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.055419921875, "t": 151.780517578125, "r": 545.35938, "b": 198.01513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9863764643669128, "cells": [{"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility."}, {"label": "text", "id": 5, "page_no": 135, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8184356689453, "t": 209.97195434570312, "r": 547.25061, "b": 267.85925, "coord_origin": "TOPLEFT"}, "confidence": 0.988143265247345, "cells": [{"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}]}, "text": "This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read."}, {"label": "text", "id": 6, "page_no": 135, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.80397033691406, "t": 280.05120849609375, "r": 500.55725, "b": 290.4837951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9292261004447937, "cells": [{"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This paper has described the following pervasive power and advantages of RCAC:"}, {"label": "list_item", "id": 7, "page_no": 135, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56689453125, "t": 296.6219787597656, "r": 429.45065, "b": 307.35797119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9498389363288879, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Access can be controlled through simple or sophisticated logic."}, {"label": "list_item", "id": 8, "page_no": 135, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60137939453125, "t": 308.7406311035156, "r": 351.64917, "b": 319.1260070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.942351758480072, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Virtually no application changes are required."}, {"label": "list_item", "id": 9, "page_no": 135, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.644775390625, "t": 320.5731201171875, "r": 491.77822999999995, "b": 331.0446472167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9509508013725281, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The implementation of the access policy is part of the DB2 data access layer."}, {"label": "list_item", "id": 10, "page_no": 135, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.75515747070312, "t": 332.263427734375, "r": 426.24567, "b": 343.17962646484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9367370009422302, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table data is protected regardless of the interface that is used."}, {"label": "list_item", "id": 11, "page_no": 135, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.80447387695312, "t": 344.1607666015625, "r": 433.24645999999996, "b": 355.1954040527344, "coord_origin": "TOPLEFT"}, "confidence": 0.9496915936470032, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No user is inherently exempted from the access control policies."}, {"label": "list_item", "id": 12, "page_no": 135, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.60531616210938, "t": 356.711669921875, "r": 383.57187, "b": 367.0285339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9547297358512878, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Groups of users can share policies and permissions."}, {"label": "text", "id": 13, "page_no": 135, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.60353088378906, "t": 378.73797607421875, "r": 547.24536, "b": 461.1492614746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9838752746582031, "cells": [{"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}]}, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance."}, {"label": "text", "id": 14, "page_no": 135, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.79904174804688, "t": 472.91790771484375, "r": 547.1958, "b": 531.1986694335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882535934448242, "cells": [{"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}]}, "text": "With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown."}, {"label": "section_header", "id": 15, "page_no": 135, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.42830657958984, "t": 558.0595703125, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}, "confidence": 0.9633642435073853, "cells": [{"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}]}, "text": "8.2 DB2 for i Center of Excellence"}, {"label": "text", "id": 16, "page_no": 135, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.96109008789062, "t": 590.4443359375, "r": 533.23181, "b": 649.4010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875909090042114, "cells": [{"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}]}, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design."}, {"label": "text", "id": 17, "page_no": 135, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.06277465820312, "t": 660.7098999023438, "r": 547.2406, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9721947908401489, "cells": [{"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}]}, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com ."}], "body": [{"label": "section_header", "id": 2, "page_no": 135, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.5673599243164, "t": 73.4725112915039, "r": 544.55121, "b": 90.01676940917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9646757245063782, "cells": [{"id": 2, "text": "8.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.191185, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Implementing RCAC with good design and proper planning", "bbox": {"l": 91.669403, "t": 74.34069999999997, "r": 544.55121, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "8.1 Implementing RCAC with good design and proper planning"}, {"label": "text", "id": 3, "page_no": 135, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9280242919922, "t": 105.88225555419922, "r": 544.7099, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9831311702728271, "cells": [{"id": 4, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled ", "bbox": {"l": 136.8, "t": 106.6087, "r": 544.7099, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "and governed by a set of data-centric policies that are defined with SQL and implemented ", "bbox": {"l": 136.80002, "t": 118.60852, "r": 535.37122, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "within DB2 for i.", "bbox": {"l": 136.80002, "t": 130.60834, "r": 206.53296, "b": 139.82135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "By using RCAC, the row and column data that is returned to the requester can be controlled and governed by a set of data-centric policies that are defined with SQL and implemented within DB2 for i."}, {"label": "text", "id": 4, "page_no": 135, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.055419921875, "t": 151.780517578125, "r": 545.35938, "b": 198.01513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9863764643669128, "cells": [{"id": 7, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level ", "bbox": {"l": 136.80002, "t": 152.62793, "r": 520.39148, "b": 161.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with ", "bbox": {"l": 136.80002, "t": 164.62775, "r": 544.76562, "b": 173.84076000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "the data owner and security officer, can ensure that users have access to the data based on ", "bbox": {"l": 136.80002, "t": 176.62756000000002, "r": 545.35938, "b": 185.84058000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "their level of authorization and responsibility.", "bbox": {"l": 136.80002, "t": 188.62738000000002, "r": 332.01102, "b": 197.84038999999996, "coord_origin": "TOPLEFT"}}]}, "text": "RCAC provides fine-grained access control and is complementary to IBM i object-level security. With the new RCAC feature of DB2 for i, the database engineer, in partnership with the data owner and security officer, can ensure that users have access to the data based on their level of authorization and responsibility."}, {"label": "text", "id": 5, "page_no": 135, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8184356689453, "t": 209.97195434570312, "r": 547.25061, "b": 267.85925, "coord_origin": "TOPLEFT"}, "confidence": 0.988143265247345, "cells": [{"id": 11, "text": "This situation also can include separation of duties, such as allowing the application ", "bbox": {"l": 136.80002, "t": 210.64697, "r": 508.75708, "b": 219.85999000000004, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "developers to design and implement the solutions, but restricting them from accessing the ", "bbox": {"l": 136.80002, "t": 222.64679, "r": 535.40131, "b": 231.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "production data based on policy. Just because someone writes and owns the program, it does ", "bbox": {"l": 136.80002, "t": 234.64661, "r": 547.25061, "b": 243.85961999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "not mean that they have access to all the sensitive data that their program can potentially ", "bbox": {"l": 136.80002, "t": 246.64642000000003, "r": 532.39722, "b": 255.85943999999995, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "read.", "bbox": {"l": 136.80002, "t": 258.64624000000003, "r": 159.58949, "b": 267.85925, "coord_origin": "TOPLEFT"}}]}, "text": "This situation also can include separation of duties, such as allowing the application developers to design and implement the solutions, but restricting them from accessing the production data based on policy. Just because someone writes and owns the program, it does not mean that they have access to all the sensitive data that their program can potentially read."}, {"label": "text", "id": 6, "page_no": 135, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.80397033691406, "t": 280.05120849609375, "r": 500.55725, "b": 290.4837951660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9292261004447937, "cells": [{"id": 16, "text": "This paper has described the following pervasive power and advantages of RCAC:", "bbox": {"l": 136.80002, "t": 280.60608, "r": 500.55725, "b": 289.81906000000004, "coord_origin": "TOPLEFT"}}]}, "text": "This paper has described the following pervasive power and advantages of RCAC:"}, {"label": "list_item", "id": 7, "page_no": 135, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.56689453125, "t": 296.6219787597656, "r": 429.45065, "b": 307.35797119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9498389363288879, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 297.79504, "r": 141.78001, "b": 306.56982, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Access can be controlled through simple or sophisticated logic.", "bbox": {"l": 151.20018, "t": 297.64566, "r": 429.45065, "b": 306.85864, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Access can be controlled through simple or sophisticated logic."}, {"label": "list_item", "id": 8, "page_no": 135, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.60137939453125, "t": 308.7406311035156, "r": 351.64917, "b": 319.1260070800781, "coord_origin": "TOPLEFT"}, "confidence": 0.942351758480072, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 309.79486, "r": 141.78101, "b": 318.56964, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Virtually no application changes are required.", "bbox": {"l": 151.20117, "t": 309.64548, "r": 351.64917, "b": 318.8584599999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Virtually no application changes are required."}, {"label": "list_item", "id": 9, "page_no": 135, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.644775390625, "t": 320.5731201171875, "r": 491.77822999999995, "b": 331.0446472167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9509508013725281, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 321.79468, "r": 141.78101, "b": 330.56946, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The implementation of the access policy is part of the DB2 data access layer.", "bbox": {"l": 151.20117, "t": 321.64529000000005, "r": 491.77822999999995, "b": 330.85828000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The implementation of the access policy is part of the DB2 data access layer."}, {"label": "list_item", "id": 10, "page_no": 135, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.75515747070312, "t": 332.263427734375, "r": 426.24567, "b": 343.17962646484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9367370009422302, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 333.79449, "r": 141.78101, "b": 342.56927, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Table data is protected regardless of the interface that is used.", "bbox": {"l": 151.20117, "t": 333.64511, "r": 426.24567, "b": 342.85809, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Table data is protected regardless of the interface that is used."}, {"label": "list_item", "id": 11, "page_no": 135, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.80447387695312, "t": 344.1607666015625, "r": 433.24645999999996, "b": 355.1954040527344, "coord_origin": "TOPLEFT"}, "confidence": 0.9496915936470032, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 345.79431, "r": 141.78101, "b": 354.56909, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "No user is inherently exempted from the access control policies.", "bbox": {"l": 151.20117, "t": 345.64493, "r": 433.24645999999996, "b": 354.85791, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No user is inherently exempted from the access control policies."}, {"label": "list_item", "id": 12, "page_no": 135, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.60531616210938, "t": 356.711669921875, "r": 383.57187, "b": 367.0285339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.9547297358512878, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 357.79413, "r": 141.78099, "b": 366.56891, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Groups of users can share policies and permissions.", "bbox": {"l": 151.20116, "t": 357.64474, "r": 383.57187, "b": 366.85773, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Groups of users can share policies and permissions."}, {"label": "text", "id": 13, "page_no": 135, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.60353088378906, "t": 378.73797607421875, "r": 547.24536, "b": 461.1492614746094, "coord_origin": "TOPLEFT"}, "confidence": 0.9838752746582031, "cells": [{"id": 29, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, ", "bbox": {"l": 136.80099, "t": 379.60454999999996, "r": 547.24536, "b": 388.81753999999995, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "and monitored deployment are critical for success. This includes the usage of quality ", "bbox": {"l": 136.80099, "t": 391.60437, "r": 512.45325, "b": 400.81735, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "assurance testing, and realistic performance and scalability exercises that serve to ", "bbox": {"l": 136.80099, "t": 403.60419, "r": 503.2384, "b": 412.81717, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrate that all of your requirements are being met. As part of the verification process, ", "bbox": {"l": 136.802, "t": 415.60400000000004, "r": 541.73065, "b": 424.81699000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the usage of in-depth proofs of concepts and proofs of technology are recommended, if not ", "bbox": {"l": 136.802, "t": 427.60382, "r": 541.32037, "b": 436.8168, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "essential. When RCAC is activated, the results of queries can change. Anticipating this ", "bbox": {"l": 136.802, "t": 439.60364, "r": 522.3526, "b": 448.81662, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "change and realizing the effects of RCAC before going live are of the utmost importance.", "bbox": {"l": 136.802, "t": 451.60345, "r": 528.17004, "b": 460.81644, "coord_origin": "TOPLEFT"}}]}, "text": "A deep understanding of the technology, and proper planning, good design, adequate testing, and monitored deployment are critical for success. This includes the usage of quality assurance testing, and realistic performance and scalability exercises that serve to demonstrate that all of your requirements are being met. As part of the verification process, the usage of in-depth proofs of concepts and proofs of technology are recommended, if not essential. When RCAC is activated, the results of queries can change. Anticipating this change and realizing the effects of RCAC before going live are of the utmost importance."}, {"label": "text", "id": 14, "page_no": 135, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.79904174804688, "t": 472.91790771484375, "r": 547.1958, "b": 531.1986694335938, "coord_origin": "TOPLEFT"}, "confidence": 0.9882535934448242, "cells": [{"id": 36, "text": "With the ever-growing value of data, and the vast and varied database technology that is ", "bbox": {"l": 136.802, "t": 473.62302, "r": 529.30786, "b": 482.836, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "available today, it is crucial to have a person or persons on staff who specialize in data-centric ", "bbox": {"l": 136.802, "t": 485.62283, "r": 547.11536, "b": 494.83582, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "design, development, and deployment. This role and responsibility falls on the database ", "bbox": {"l": 136.802, "t": 497.62265, "r": 526.18219, "b": 506.83563, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "engineer. With the availability of DB2 RCAC, the importance of full-time database engineering ", "bbox": {"l": 136.802, "t": 509.62247, "r": 547.1958, "b": 518.83545, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "has grown.", "bbox": {"l": 136.802, "t": 521.62228, "r": 185.39784, "b": 530.83527, "coord_origin": "TOPLEFT"}}]}, "text": "With the ever-growing value of data, and the vast and varied database technology that is available today, it is crucial to have a person or persons on staff who specialize in data-centric design, development, and deployment. This role and responsibility falls on the database engineer. With the availability of DB2 RCAC, the importance of full-time database engineering has grown."}, {"label": "section_header", "id": 15, "page_no": 135, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.42830657958984, "t": 558.0595703125, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}, "confidence": 0.9633642435073853, "cells": [{"id": 41, "text": "8.2", "bbox": {"l": 64.800003, "t": 559.3207199999999, "r": 87.389702, "b": 574.08372, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "DB2 for i Center of Excellence", "bbox": {"l": 91.907631, "t": 559.3207199999999, "r": 324.01276, "b": 574.08372, "coord_origin": "TOPLEFT"}}]}, "text": "8.2 DB2 for i Center of Excellence"}, {"label": "text", "id": 16, "page_no": 135, "cluster": {"id": 16, "label": "text", "bbox": {"l": 135.96109008789062, "t": 590.4443359375, "r": 533.23181, "b": 649.4010009765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875909090042114, "cells": [{"id": 43, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of ", "bbox": {"l": 136.8, "t": 591.64862, "r": 532.66528, "b": 600.86162, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Excellence team offers an RCAC education and consulting workshop. In addition to ", "bbox": {"l": 136.8, "t": 603.64842, "r": 506.34979, "b": 612.8614200000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "knowledge transfer, a working session allows for a review of your data access control ", "bbox": {"l": 136.8, "t": 615.64822, "r": 514.10956, "b": 624.86122, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "requirements, review of the current environment, solution ideation, and high-level solution ", "bbox": {"l": 136.8, "t": 627.6480300000001, "r": 533.23181, "b": 636.86102, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "design. ", "bbox": {"l": 136.8, "t": 639.64783, "r": 171.82933, "b": 648.86082, "coord_origin": "TOPLEFT"}}]}, "text": "To further assist you with understanding and implementing RCAC, the DB2 for i Center of Excellence team offers an RCAC education and consulting workshop. In addition to knowledge transfer, a working session allows for a review of your data access control requirements, review of the current environment, solution ideation, and high-level solution design."}, {"label": "text", "id": 17, "page_no": 135, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.06277465820312, "t": 660.7098999023438, "r": 547.2406, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9721947908401489, "cells": [{"id": 48, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at ", "bbox": {"l": 136.8, "t": 661.6673900000001, "r": 547.2406, "b": 670.88039, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "mcain@us.ibm.com", "bbox": {"l": 136.8, "t": 673.8166, "r": 216.71902, "b": 682.59136, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": ".", "bbox": {"l": 216.7798, "t": 673.6672, "r": 219.54867999999996, "b": 682.8802000000001, "coord_origin": "TOPLEFT"}}]}, "text": "If you are interested in engaging with the DB2 for i Center of Excellence, contact Mike Cain at mcain@us.ibm.com ."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 135, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.42459869384766, "t": 754.2553100585938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.930542528629303, "cells": [{"id": 0, "text": "120 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "120"}, {"label": "page_footer", "id": 1, "page_no": 135, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57987976074219, "t": 754.646240234375, "r": 339.84716796875, "b": 764.02783203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9501276612281799, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 136, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.67854309082031, "t": 754.6529541015625, "r": 257.24335, "b": 764.1146850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9381327033042908, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0882568359375, "t": 754.2919311523438, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215134382247925, "cells": [{"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.2744140625, "r": 485.79715000000004, "b": 310.868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.931329607963562, "cells": [{"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.599853515625, "t": 347.8815612792969, "r": 539.84735, "b": 394.2618408203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9735324382781982, "cells": [{"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.52754211425781, "t": 405.9345397949219, "r": 332.9858703613281, "b": 415.5800476074219, "coord_origin": "TOPLEFT"}, "confidence": 0.7840588688850403, "cells": [{"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "code", "bbox": {"l": 62.520992279052734, "t": 420.8819580078125, "r": 541.13666, "b": 730.4379272460938, "coord_origin": "TOPLEFT"}, "confidence": 0.8016359806060791, "cells": [{"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 496.9212951660156, "t": 92.56521606445312, "r": 526.1300659179688, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6984182596206665, "cells": [{"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 31.834123611450195, "t": 70.96026611328125, "r": 238.2196044921875, "b": 238.40943908691406, "coord_origin": "TOPLEFT"}, "confidence": 0.6705455780029297, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 136, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.67854309082031, "t": 754.6529541015625, "r": 257.24335, "b": 764.1146850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9381327033042908, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 136, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0882568359375, "t": 754.2919311523438, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215134382247925, "cells": [{"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "121"}, {"label": "text", "id": 2, "page_no": 136, "cluster": {"id": 2, "label": "text", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A."}, {"label": "section_header", "id": 3, "page_no": 136, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.2744140625, "r": 485.79715000000004, "b": 310.868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.931329607963562, "cells": [{"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Database definitions for the RCAC banking example"}, {"label": "text", "id": 4, "page_no": 136, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.599853515625, "t": 347.8815612792969, "r": 539.84735, "b": 394.2618408203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9735324382781982, "cells": [{"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and Column Access Control: Banking example\u201d on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example."}, {"label": "caption", "id": 5, "page_no": 136, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.52754211425781, "t": 405.9345397949219, "r": 332.9858703613281, "b": 415.5800476074219, "coord_origin": "TOPLEFT"}, "confidence": 0.7840588688850403, "cells": [{"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}]}, "text": "Example A-1 DDL script to implement the RCAC banking example"}, {"label": "code", "id": 6, "page_no": 136, "cluster": {"id": 6, "label": "code", "bbox": {"l": 62.520992279052734, "t": 420.8819580078125, "r": 541.13666, "b": 730.4379272460938, "coord_origin": "TOPLEFT"}, "confidence": 0.8016359806060791, "cells": [{"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}]}, "text": "/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL ,"}, {"label": "text", "id": 7, "page_no": 136, "cluster": {"id": 7, "label": "text", "bbox": {"l": 496.9212951660156, "t": 92.56521606445312, "r": 526.1300659179688, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6984182596206665, "cells": [{"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "A"}, {"label": "picture", "id": 8, "page_no": 136, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 31.834123611450195, "t": 70.96026611328125, "r": 238.2196044921875, "b": 238.40943908691406, "coord_origin": "TOPLEFT"}, "confidence": 0.6705455780029297, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 136, "cluster": {"id": 2, "label": "text", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Appendix A.", "bbox": {"l": 74.400002, "t": 268.54272000000003, "r": 115.15289, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A."}, {"label": "section_header", "id": 3, "page_no": 136, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.8, "t": 253.2744140625, "r": 485.79715000000004, "b": 310.868896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.931329607963562, "cells": [{"id": 3, "text": "Database definitions for the ", "bbox": {"l": 136.8, "t": 254.88635, "r": 485.79715000000004, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "RCAC banking example", "bbox": {"l": 136.8, "t": 285.84671, "r": 428.4878499999999, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Database definitions for the RCAC banking example"}, {"label": "text", "id": 4, "page_no": 136, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.599853515625, "t": 347.8815612792969, "r": 539.84735, "b": 394.2618408203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9735324382781982, "cells": [{"id": 5, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column ", "bbox": {"l": 136.8, "t": 348.70871, "r": 539.84735, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and ", "bbox": {"l": 136.8, "t": 360.70853, "r": 528.8894, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column Access Control: Banking example\u201d on page 37. The script that is shown in ", "bbox": {"l": 136.8, "t": 372.7083400000001, "r": 503.20746, "b": 381.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Example A-1 is the DDL script that is used to implement this example.", "bbox": {"l": 136.8, "t": 384.70816, "r": 445.51532, "b": 393.92114, "coord_origin": "TOPLEFT"}}]}, "text": "This appendix provides the database definitions or DDLs to re-create the Row and Column Access Control (RCAC) scenario that is described in Chapter 4, \u201cImplementing Row and Column Access Control: Banking example\u201d on page 37. The script that is shown in Example A-1 is the DDL script that is used to implement this example."}, {"label": "caption", "id": 5, "page_no": 136, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.52754211425781, "t": 405.9345397949219, "r": 332.9858703613281, "b": 415.5800476074219, "coord_origin": "TOPLEFT"}, "confidence": 0.7840588688850403, "cells": [{"id": 9, "text": "Example A-1 DDL script to implement the RCAC banking example", "bbox": {"l": 64.800003, "t": 406.75800000000004, "r": 332.5787, "b": 415.08301, "coord_origin": "TOPLEFT"}}]}, "text": "Example A-1 DDL script to implement the RCAC banking example"}, {"label": "code", "id": 6, "page_no": 136, "cluster": {"id": 6, "label": "code", "bbox": {"l": 62.520992279052734, "t": 420.8819580078125, "r": 541.13666, "b": 730.4379272460938, "coord_origin": "TOPLEFT"}, "confidence": 0.8016359806060791, "cells": [{"id": 10, "text": "/* Database Definitions for RCAC Bank Scenario */", "bbox": {"l": 64.800003, "t": 423.87332, "r": 284.99847, "b": 431.80231000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "/* Schema */", "bbox": {"l": 64.800003, "t": 434.85333, "r": 118.7397, "b": 442.78232, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; ", "bbox": {"l": 64.800003, "t": 445.89365, "r": 289.49847, "b": 453.82263000000006, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/* Global Variable */", "bbox": {"l": 64.800003, "t": 467.85364, "r": 159.1794, "b": 475.78262, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 478.89395, "r": 271.49847, "b": 486.82294, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "VARCHAR( 30) ; ", "bbox": {"l": 79.200005, "t": 489.87396, "r": 146.57941, "b": 497.80295, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; ", "bbox": {"l": 64.800003, "t": 511.89426, "r": 541.13666, "b": 519.8232399999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "/* Tables */", "bbox": {"l": 64.800003, "t": 533.85425, "r": 118.7397, "b": 541.78326, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CREATE TABLE BANK_SCHEMA.CUSTOMERS ( ", "bbox": {"l": 64.800003, "t": 555.8745700000001, "r": 231.05878999999996, "b": 563.80357, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 566.85457, "r": 407.21759, "b": 574.78357, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 577.89487, "r": 205.0191, "b": 585.8238699999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 588.87486, "r": 187.0191, "b": 596.80386, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 599.85486, "r": 160.07941, "b": 607.78386, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 610.89516, "r": 133.13971, "b": 618.82416, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 621.87515, "r": 384.77789, "b": 629.8041499999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 632.85515, "r": 398.27789, "b": 640.78415, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 643.89545, "r": 384.77789, "b": 651.8244500000001, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 654.87544, "r": 371.27789, "b": 662.80444, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 665.85544, "r": 375.77789, "b": 673.78444, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 676.89574, "r": 389.27789, "b": 684.82474, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 687.87574, "r": 380.27789, "b": 695.804741, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 698.916039, "r": 470.15729, "b": 706.845039, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 709.896042, "r": 420.71759, "b": 717.825043, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200005, "t": 720.876045, "r": 465.65729, "b": 728.80505, "coord_origin": "TOPLEFT"}}]}, "text": "/* Database Definitions for RCAC Bank Scenario */ /* Schema */ CREATE SCHEMA BANK_SCHEMA FOR SCHEMA BANKSCHEMA ; /* Global Variable */ CREATE VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID VARCHAR( 30) ; LABEL ON VARIABLE BANK_SCHEMA.CUSTOMER_LOGIN_ID IS 'Customer''s log in value passed by web application' ; /* Tables */ CREATE TABLE BANK_SCHEMA.CUSTOMERS ( CUSTOMER_ID FOR COLUMN CUSTO00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_NAME FOR COLUMN CUSTO00002 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_ADDRESS FOR COLUMN CUSTO00003 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_CITY FOR COLUMN CUSTO00004 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_STATE FOR COLUMN CUSTO00005 CHAR(2) CCSID 37 NOT NULL , CUSTOMER_PHONE FOR COLUMN CUSTO00006 CHAR(10) CCSID 37 NOT NULL , CUSTOMER_EMAIL FOR COLUMN CUSTO00007 VARCHAR(30) CCSID 37 NOT NULL , CUSTOMER_TAX_ID FOR COLUMN CUSTO00008 CHAR(11) CCSID 37 NOT NULL , CUSTOMER_DRIVERS_LICENSE_NUMBER FOR COLUMN CUSTO00012 CHAR(13) CCSID 37 DEFAULT NULL , CUSTOMER_LOGIN_ID FOR COLUMN CUSTO00009 VARCHAR(30) CCSID 37 DEFAULT NULL , CUSTOMER_SECURITY_QUESTION FOR COLUMN CUSTO00010 VARCHAR(100) CCSID 37 DEFAULT NULL ,"}, {"label": "text", "id": 7, "page_no": 136, "cluster": {"id": 7, "label": "text", "bbox": {"l": 496.9212951660156, "t": 92.56521606445312, "r": 526.1300659179688, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.6984182596206665, "cells": [{"id": 34, "text": "A", "bbox": {"l": 497.03989, "t": 93.16870000000006, "r": 525.89099, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "A"}, {"label": "picture", "id": 8, "page_no": 136, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 31.834123611450195, "t": 70.96026611328125, "r": 238.2196044921875, "b": 238.40943908691406, "coord_origin": "TOPLEFT"}, "confidence": 0.6705455780029297, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 136, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.67854309082031, "t": 754.6529541015625, "r": 257.24335, "b": 764.1146850585938, "coord_origin": "TOPLEFT"}, "confidence": 0.9381327033042908, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 136, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0882568359375, "t": 754.2919311523438, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9215134382247925, "cells": [{"id": 1, "text": "121", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "121"}]}}, {"page_no": 137, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.49662017822266, "t": 754.4017944335938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092414379119873, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.57022857666016, "t": 754.6959228515625, "r": 339.9194030761719, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9339437484741211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 63.45902633666992, "t": 70.63676452636719, "r": 546.53699, "b": 721.98095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7888815402984619, "cells": [{"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 137, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.49662017822266, "t": 754.4017944335938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092414379119873, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "122"}, {"label": "page_footer", "id": 1, "page_no": 137, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57022857666016, "t": 754.6959228515625, "r": 339.9194030761719, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9339437484741211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 137, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.45902633666992, "t": 70.63676452636719, "r": 546.53699, "b": 721.98095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7888815402984619, "cells": [{"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}]}, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) );"}], "body": [{"label": "code", "id": 2, "page_no": 137, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.45902633666992, "t": 70.63676452636719, "r": 546.53699, "b": 721.98095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.7888815402984619, "cells": [{"id": 2, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 71.67296999999996, "r": 497.09729000000004, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 82.65295000000015, "r": 546.53699, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 93.63292999999999, "r": 479.15759, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 104.67322000000001, "r": 352.37817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ", "bbox": {"l": 79.200302, "t": 115.65319999999997, "r": 389.2782, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 137.67352000000005, "r": 217.55908, "b": 145.60253999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK ", "bbox": {"l": 79.200302, "t": 148.6535, "r": 294.8988, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "UNIQUE( CUSTOMER_LOGIN_ID ) ; ", "bbox": {"l": 79.200302, "t": 159.69379000000004, "r": 214.01939, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 181.65381000000002, "r": 217.55908, "b": 189.58281999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK ", "bbox": {"l": 79.200302, "t": 192.69408999999996, "r": 339.8385, "b": 200.62311, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ", "bbox": {"l": 79.200302, "t": 203.67407000000003, "r": 357.8385, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ", "bbox": {"l": 79.200302, "t": 214.65404999999998, "r": 366.7782, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 236.67438000000004, "r": 217.55908, "b": 244.60339, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK ", "bbox": {"l": 79.200302, "t": 247.65436, "r": 294.8988, "b": 255.58336999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "CHECK( CUSTOMER_EMAIL <> '****@****' ) ", "bbox": {"l": 79.200302, "t": 258.69464000000005, "r": 263.45911, "b": 266.62366, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ", "bbox": {"l": 79.200302, "t": 269.67462, "r": 290.3988, "b": 277.60364000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 291.69495, "r": 217.55908, "b": 299.62393, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK ", "bbox": {"l": 79.200302, "t": 302.67496, "r": 308.3988, "b": 310.60393999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ", "bbox": {"l": 79.200302, "t": 313.65497, "r": 258.95911, "b": 321.58395, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT", "bbox": {"l": 79.200302, "t": 324.6952800000001, "r": 317.01254, "b": 332.62427, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ", "bbox": {"l": 79.200302, "t": 335.67529, "r": 303.8988, "b": 343.60428, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 357.69559, "r": 217.55908, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK ", "bbox": {"l": 79.200302, "t": 368.6756, "r": 348.8385, "b": 376.60458, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ", "bbox": {"l": 79.200302, "t": 379.65561, "r": 330.8385, "b": 387.58459, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ", "bbox": {"l": 79.200302, "t": 390.69592, "r": 398.2782, "b": 398.62491000000006, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ", "bbox": {"l": 79.200302, "t": 401.67592999999994, "r": 375.7782, "b": 409.60492, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 423.69622999999996, "r": 217.55908, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.200302, "t": 434.67624, "r": 353.3385, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ", "bbox": {"l": 79.200302, "t": 445.65625, "r": 299.3988, "b": 453.58524, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT", "bbox": {"l": 79.200302, "t": 456.69656, "r": 357.50146, "b": 464.62555, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ", "bbox": {"l": 79.200302, "t": 467.67657, "r": 344.3385, "b": 475.60556, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800301, "t": 489.69687, "r": 217.55908, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK ", "bbox": {"l": 79.200302, "t": 500.67688, "r": 299.3988, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ", "bbox": {"l": 79.200302, "t": 511.65689, "r": 510.59729000000004, "b": 519.58588, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; ", "bbox": {"l": 79.200302, "t": 522.6972000000001, "r": 294.8988, "b": 530.62619, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ", "bbox": {"l": 64.800301, "t": 544.65721, "r": 226.55908, "b": 552.5862099999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200302, "t": 555.69751, "r": 303.8988, "b": 563.62651, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200302, "t": 566.67751, "r": 205.01939, "b": 574.6065100000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200302, "t": 577.6575, "r": 187.01939, "b": 585.5865, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200302, "t": 588.6978, "r": 160.0797, "b": 596.6268, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CACHE 20 ), ", "bbox": {"l": 79.200302, "t": 599.6777999999999, "r": 133.14, "b": 607.6068, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "CUSTOMER_ID FOR COLUMN CUSTID", "bbox": {"l": 79.200302, "t": 610.65779, "r": 217.35544, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "INTEGER NOT NULL , ", "bbox": {"l": 226.88337999999996, "t": 610.65779, "r": 317.3988, "b": 618.5867900000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 621.69809, "r": 389.2782, "b": 629.62709, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200302, "t": 632.67809, "r": 366.7782, "b": 640.60709, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200302, "t": 643.71838, "r": 393.7782, "b": 651.64738, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ", "bbox": {"l": 79.200302, "t": 654.69838, "r": 357.8385, "b": 662.62738, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL", "bbox": {"l": 79.200302, "t": 665.6783800000001, "r": 272.67203, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "DECIMAL(11, 2) NOT NULL DEFAULT 0 , ", "bbox": {"l": 281.88498, "t": 665.6783800000001, "r": 447.71789999999993, "b": 673.60738, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200302, "t": 676.71867, "r": 546.53699, "b": 684.6476700000001, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200302, "t": 687.69868, "r": 479.15759, "b": 695.6276780000001, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257675, "t": 698.67868, "r": 352.37817, "b": 706.607681, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) ); ", "bbox": {"l": 79.200302, "t": 709.718979, "r": 375.7782, "b": 717.64798, "coord_origin": "TOPLEFT"}}]}, "text": "CUSTOMER_SECURITY_QUESTION_ANSWER FOR COLUMN CUSTO00011 VARCHAR(100) CCSID 37 DEFAULT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.CUSTOMER_ID_PK PRIMARY KEY( CUSTOMER_ID ) ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_UK UNIQUE( CUSTOMER_LOGIN_ID ) ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_DRIVERS_LICENSE_CHECK CHECK( CUSTOMER_DRIVERS_LICENSE_NUMBER <> '*************' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_DRIVERS_LICENSE_NUMBER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_EMAIL_CHECK CHECK( CUSTOMER_EMAIL <> '****@****' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_EMAIL ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_LOGIN_ID_CHECK CHECK( CUSTOMER_LOGIN_ID <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_LOGIN_ID = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_LOGIN_ID ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_CHECK CHECK( CUSTOMER_SECURITY_QUESTION_ANSWER <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION_ANSWER = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION_ANSWER ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_SECURITY_QUESTION_ANSWER CHECK( CUSTOMER_SECURITY_QUESTION <> '*****' ) ON INSERT VIOLATION SET CUSTOMER_SECURITY_QUESTION = DEFAULT ON UPDATE VIOLATION PRESERVE CUSTOMER_SECURITY_QUESTION ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ADD CONSTRAINT BANK_SCHEMA.CUSTOMER_TAX_ID_CHECK CHECK( CUSTOMER_TAX_ID <> 'XXX-XX-XXXX' AND SUBSTR ( CUSTOMER_TAX_ID , 1 , 7 ) <> 'XXX-XX-' ) ON UPDATE VIOLATION PRESERVE CUSTOMER_TAX_ID ; CREATE TABLE BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), CUSTOMER_ID FOR COLUMN CUSTID INTEGER NOT NULL , ACCOUNT_NUMBER FOR COLUMN ACCOUNTNO VARCHAR(50) CCSID 37 NOT NULL , ACCOUNT_NAME FOR COLUMN ACCOUNTNAM CHAR(12) CCSID 37 NOT NULL , ACCOUNT_DATE_OPENED FOR COLUMN OPENDATE DATE DEFAULT CURRENT_DATE , ACCOUNT_DATE_CLOSED FOR COLUMN CLOSEDATE DATE DEFAULT NULL , ACCOUNT_CURRENT_BALANCE FOR COLUMN ACCTBAL DECIMAL(11, 2) NOT NULL DEFAULT 0 , INSERT_TIMESTAMP FOR COLUMN INSDATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDDATE TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.ACCOUNT_ID_PK PRIMARY KEY( ACCOUNT_ID ) );"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 137, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.49662017822266, "t": 754.4017944335938, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9092414379119873, "cells": [{"id": 0, "text": "122 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "122"}, {"label": "page_footer", "id": 1, "page_no": 137, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.57022857666016, "t": 754.6959228515625, "r": 339.9194030761719, "b": 764.0059204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9339437484741211, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 138, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 256.79608154296875, "t": 754.73193359375, "r": 517.90582, "b": 763.9072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521042704582214, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.0982055664062, "t": 754.3765869140625, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163233041763306, "cells": [{"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.7338981628418, "t": 71.67296999999996, "r": 546.53668, "b": 730.2366943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7971411347389221, "cells": [{"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 138, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.79608154296875, "t": 754.73193359375, "r": 517.90582, "b": 763.9072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521042704582214, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 138, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0982055664062, "t": 754.3765869140625, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163233041763306, "cells": [{"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "123"}, {"label": "code", "id": 2, "page_no": 138, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.7338981628418, "t": 71.67296999999996, "r": 546.53668, "b": 730.2366943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7971411347389221, "cells": [{"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}]}, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1"}], "body": [{"label": "code", "id": 2, "page_no": 138, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.7338981628418, "t": 71.67296999999996, "r": 546.53668, "b": 730.2366943359375, "coord_origin": "TOPLEFT"}, "confidence": 0.7971411347389221, "cells": [{"id": 2, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 213.11909, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 303.8985, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "FOREIGN KEY( CUSTOMER_ID ) ", "bbox": {"l": 79.200005, "t": 93.63292999999999, "r": 200.5191, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ", "bbox": {"l": 79.200005, "t": 104.67322000000001, "r": 294.8985, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 115.65319999999997, "r": 164.5191, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ON UPDATE RESTRICT ; ", "bbox": {"l": 79.200005, "t": 126.63318000000015, "r": 173.57941, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ", "bbox": {"l": 64.800003, "t": 148.6535, "r": 213.11909, "b": 156.58252000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK ", "bbox": {"l": 79.200005, "t": 159.69379000000004, "r": 294.8985, "b": 167.62279999999998, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CHECK( ACCOUNT_NUMBER <> '*****' ) ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 245.4588, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ;", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 285.8985, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 343.43817, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 420.71759, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "START WITH 1 INCREMENT BY 1 ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 205.0191, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "NO MINVALUE NO MAXVALUE ", "bbox": {"l": 79.200005, "t": 236.67431999999997, "r": 187.0191, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "NO CYCLE NO ORDER ", "bbox": {"l": 79.200005, "t": 247.65430000000003, "r": 160.07941, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "CACHE 20 ), ", "bbox": {"l": 79.200005, "t": 258.69458, "r": 133.13971, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ACCOUNT_ID INTEGER NOT NULL , ", "bbox": {"l": 79.200005, "t": 269.67456000000004, "r": 214.0191, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , ", "bbox": {"l": 79.200005, "t": 280.6546000000001, "r": 380.27789, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , ", "bbox": {"l": 79.200005, "t": 291.69492, "r": 420.71759, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , ", "bbox": {"l": 79.200005, "t": 302.67493, "r": 420.71759, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , ", "bbox": {"l": 79.200005, "t": 313.65494, "r": 380.27789, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 546.53668, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE ", "bbox": {"l": 79.200005, "t": 335.6752599999999, "r": 479.15729, "b": 343.60425, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , ", "bbox": {"l": 75.257378, "t": 346.65527, "r": 352.37787, "b": 354.58426, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ", "bbox": {"l": 79.200005, "t": 357.69559, "r": 416.21759, "b": 365.62457, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 379.65558, "r": 231.05878999999996, "b": 387.58456, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK ", "bbox": {"l": 79.200005, "t": 390.69589, "r": 321.8382, "b": 398.62488, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOREIGN KEY( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 401.6759, "r": 196.0191, "b": 409.60489, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ", "bbox": {"l": 79.200005, "t": 412.65591, "r": 290.3985, "b": 420.58490000000006, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ON DELETE RESTRICT ", "bbox": {"l": 79.200005, "t": 423.69622999999996, "r": 164.5191, "b": 431.6252099999999, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "ON UPDATE RESTRICT ;", "bbox": {"l": 79.200005, "t": 434.67624, "r": 169.07941, "b": 442.60522, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "/* Permissions and Masks */", "bbox": {"l": 64.800003, "t": 456.69653, "r": 186.11909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 478.65652, "r": 446.75726000000003, "b": 486.58551, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 489.69684, "r": 528.59698, "b": 497.62582, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "OR ", "bbox": {"l": 64.800003, "t": 500.67685, "r": 78.300003, "b": 508.60583, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 511.65686, "r": 361.37787, "b": 519.5858499999999, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ", "bbox": {"l": 64.800003, "t": 522.69717, "r": 374.87787, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 196.0191, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 544.65717, "r": 124.1397, "b": 552.58617, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 566.67746, "r": 415.31757, "b": 574.60646, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "FOR COLUMN CUSTOMER_EMAIL ", "bbox": {"l": 79.200005, "t": 577.6574599999999, "r": 196.0191, "b": 585.58646, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 588.69775, "r": 137.63971, "b": 596.62675, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 599.67775, "r": 361.37787, "b": 607.60675, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 610.65775, "r": 172.61909, "b": 618.5867499999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 621.69804, "r": 374.87787, "b": 629.62704, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN C . CUSTOMER_EMAIL ", "bbox": {"l": 64.800003, "t": 632.67804, "r": 172.61909, "b": 640.60704, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "ELSE '****@****' ", "bbox": {"l": 64.800003, "t": 643.71834, "r": 141.1794, "b": 651.64734, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "END ", "bbox": {"l": 64.800003, "t": 654.6983299999999, "r": 96.2397, "b": 662.62733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 665.67833, "r": 124.1397, "b": 673.60733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800003, "t": 687.69863, "r": 419.81757, "b": 695.627632, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "FOR COLUMN CUSTOMER_TAX_ID ", "bbox": {"l": 79.200005, "t": 698.678635, "r": 200.5191, "b": 706.607635, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 709.718933, "r": 137.63971, "b": 717.647934, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 720.698936, "r": 361.37787, "b": 728.627941, "coord_origin": "TOPLEFT"}}]}, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_CUSTOMER_ID_FK FOREIGN KEY( CUSTOMER_ID ) REFERENCES BANK_SCHEMA.CUSTOMERS ( CUSTO00001 ) ON DELETE RESTRICT ON UPDATE RESTRICT ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ADD CONSTRAINT BANK_SCHEMA.ACCOUNT_NUMBER_CHECK CHECK( ACCOUNT_NUMBER <> '*****' ) ON UPDATE VIOLATION PRESERVE ACCOUNT_NUMBER ; CREATE TABLE BANK_SCHEMA.TRANSACTIONS FOR SYSTEM NAME TRANS ( TRANSACTION_ID FOR COLUMN TRANS00001 INTEGER GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), ACCOUNT_ID INTEGER NOT NULL , TRANSACTION_TYPE FOR COLUMN TRANS00002 CHAR(1) CCSID 37 NOT NULL , TRANSACTION_DATE FOR COLUMN TRANS00003 DATE NOT NULL DEFAULT CURRENT_DATE , TRANSACTION_TIME FOR COLUMN TRANS00004 TIME NOT NULL DEFAULT CURRENT_TIME , TRANSACTION_AMOUNT FOR COLUMN TRANS00005 DECIMAL(11, 2) NOT NULL , INSERT_TIMESTAMP FOR COLUMN INSER00001 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN , UPDATE_TIMESTAMP FOR COLUMN UPDAT00001 TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL IMPLICITLY HIDDEN , CONSTRAINT BANK_SCHEMA.TRANSACTION_ID_PK PRIMARY KEY( TRANSACTION_ID ) ) ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ADD CONSTRAINT BANK_SCHEMA.TRANSACTIONS_ACCOUNT_ID_FK FOREIGN KEY( ACCOUNT_ID ) REFERENCES BANK_SCHEMA.ACCOUNTS ( ACCOUNT_ID ) ON DELETE RESTRICT ON UPDATE RESTRICT ; /* Permissions and Masks */ CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ) ) ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_EMAIL_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_EMAIL RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_EMAIL WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_EMAIL ELSE '****@****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_TAX_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_TAX_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 138, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.79608154296875, "t": 754.73193359375, "r": 517.90582, "b": 763.9072265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9521042704582214, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 138, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.0982055664062, "t": 754.3765869140625, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163233041763306, "cells": [{"id": 1, "text": "123", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "123"}]}}, {"page_no": 139, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 139, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 139, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 139, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 139, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 139, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 139, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 140, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 256.8621520996094, "t": 754.7630004882812, "r": 517.90582, "b": 763.9440307617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9532458186149597, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1473999023438, "t": 754.3292846679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204425811767578, "cells": [{"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 63.12764358520508, "t": 70.03921508789062, "r": 528.59698, "b": 600.8012084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.867974579334259, "cells": [{"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 140, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.8621520996094, "t": 754.7630004882812, "r": 517.90582, "b": 763.9440307617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9532458186149597, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 140, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1473999023438, "t": 754.3292846679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204425811767578, "cells": [{"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "125"}, {"label": "code", "id": 2, "page_no": 140, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.12764358520508, "t": 70.03921508789062, "r": 528.59698, "b": 600.8012084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.867974579334259, "cells": [{"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */"}], "body": [{"label": "code", "id": 2, "page_no": 140, "cluster": {"id": 2, "label": "code", "bbox": {"l": 63.12764358520508, "t": 70.03921508789062, "r": 528.59698, "b": 600.8012084960938, "coord_origin": "TOPLEFT"}, "confidence": 0.867974579334259, "cells": [{"id": 2, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 71.67296999999996, "r": 437.75726000000003, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 82.65295000000015, "r": 528.59698, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "OR ", "bbox": {"l": 64.800003, "t": 93.63292999999999, "r": 78.300003, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 104.67322000000001, "r": 361.37787, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "AND ( A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 115.65319999999997, "r": 186.11909, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 126.63318000000015, "r": 168.1794, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 137.67345999999998, "r": 204.11909, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 148.65344000000005, "r": 343.43817, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 170.67377, "r": 196.0191, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 181.65374999999995, "r": 124.1397, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A ", "bbox": {"l": 64.800003, "t": 203.67407000000003, "r": 446.75726000000003, "b": 211.60308999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "FOR COLUMN ACCOUNT_NUMBER ", "bbox": {"l": 79.200005, "t": 214.65404999999998, "r": 196.0191, "b": 222.58307000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "RETURN CASE ", "bbox": {"l": 79.200005, "t": 225.69434, "r": 137.63971, "b": 233.62334999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800003, "t": 236.67431999999997, "r": 361.37787, "b": 244.60333000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 247.65430000000003, "r": 172.61909, "b": 255.58330999999998, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800003, "t": 258.69458, "r": 365.87787, "b": 266.6236, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 269.67456000000004, "r": 172.61909, "b": 277.60357999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 280.6546000000001, "r": 374.87787, "b": 288.58359, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "THEN A . ACCOUNT_NUMBER ", "bbox": {"l": 64.800003, "t": 291.69492, "r": 172.61909, "b": 299.6239, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ELSE '*****' ", "bbox": {"l": 64.800003, "t": 302.67493, "r": 123.2397, "b": 310.60391, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "END ", "bbox": {"l": 64.800003, "t": 313.65494, "r": 96.2397, "b": 321.58392, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 324.69525, "r": 124.1397, "b": 332.62424000000004, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "ALTER TABLE BANK_SCHEMA.ACCOUNTS", "bbox": {"l": 64.800003, "t": 346.65524, "r": 212.80827, "b": 354.58423000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.200005, "t": 357.69555999999994, "r": 214.0191, "b": 365.62454, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 368.67557, "r": 223.01909999999998, "b": 376.60454999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T ", "bbox": {"l": 64.800003, "t": 390.69586, "r": 473.75726000000003, "b": 398.62485, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) ", "bbox": {"l": 79.200005, "t": 401.67587000000003, "r": 528.59698, "b": 409.60486, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "OR ", "bbox": {"l": 64.800003, "t": 412.65588, "r": 78.300003, "b": 420.58487, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800003, "t": 423.6962, "r": 361.37787, "b": 431.62518, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "AND ( T . ACCOUNT_ID IN ( ", "bbox": {"l": 64.800003, "t": 434.67621, "r": 181.61909, "b": 442.60519, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "SELECT A . ACCOUNT_ID ", "bbox": {"l": 64.800003, "t": 445.65621999999996, "r": 163.6794, "b": 453.58521, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FROM BANK_SCHEMA . ACCOUNTS A ", "bbox": {"l": 64.800003, "t": 456.69653, "r": 199.61909, "b": 464.62552, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "WHERE A . CUSTOMER_ID IN ( ", "bbox": {"l": 64.800003, "t": 467.67654, "r": 186.11909, "b": 475.60553, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "SELECT C . CUSTOMER_ID ", "bbox": {"l": 64.800003, "t": 478.65656, "r": 168.1794, "b": 486.58554, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FROM BANK_SCHEMA . CUSTOMERS C ", "bbox": {"l": 64.800003, "t": 489.69687, "r": 204.11909, "b": 497.62585, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800003, "t": 500.67688, "r": 343.43817, "b": 508.60587, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "ENFORCED FOR ALL ACCESS ", "bbox": {"l": 79.200005, "t": 522.69717, "r": 196.0191, "b": 530.62616, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENABLE ; ", "bbox": {"l": 79.200005, "t": 533.67715, "r": 124.1397, "b": 541.60617, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ALTER TABLE BANK_SCHEMA.TRANSACTIONS ", "bbox": {"l": 64.800003, "t": 555.69748, "r": 240.05878999999996, "b": 563.62648, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ACTIVATE ROW ACCESS CONTROL ;", "bbox": {"l": 79.200005, "t": 566.67747, "r": 209.5191, "b": 574.6064799999999, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "/* END */", "bbox": {"l": 64.800003, "t": 588.69778, "r": 105.2397, "b": 596.62679, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; CREATE MASK BANK_SCHEMA.MASK_ACCOUNT_NUMBER_ON_ACCOUNTS ON BANK_SCHEMA.ACCOUNTS AS A FOR COLUMN ACCOUNT_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN A . ACCOUNT_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN A . ACCOUNT_NUMBER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.ACCOUNTS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; CREATE PERMISSION BANK_SCHEMA.PERMISSION1_ON_TRANSACTIONS ON BANK_SCHEMA.TRANSACTIONS AS T FOR ROWS WHERE ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'DBE' , 'ADMIN' , 'TELLER' ) = 1 ) OR ( QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 AND ( T . ACCOUNT_ID IN ( SELECT A . ACCOUNT_ID FROM BANK_SCHEMA . ACCOUNTS A WHERE A . CUSTOMER_ID IN ( SELECT C . CUSTOMER_ID FROM BANK_SCHEMA . CUSTOMERS C WHERE C . CUSTOMER_LOGIN_ID = BANK_SCHEMA . CUSTOMER_LOGIN_ID ENFORCED FOR ALL ACCESS ENABLE ; ALTER TABLE BANK_SCHEMA.TRANSACTIONS ACTIVATE ROW ACCESS CONTROL ; /* END */"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 140, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 256.8621520996094, "t": 754.7630004882812, "r": 517.90582, "b": 763.9440307617188, "coord_origin": "TOPLEFT"}, "confidence": 0.9532458186149597, "cells": [{"id": 0, "text": "Appendix A. Database definitions for the RCAC banking example ", "bbox": {"l": 257.57999, "t": 755.538002, "r": 517.90582, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Appendix A. Database definitions for the RCAC banking example"}, {"label": "page_footer", "id": 1, "page_no": 140, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1473999023438, "t": 754.3292846679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204425811767578, "cells": [{"id": 1, "text": "125", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "125"}]}}, {"page_no": 141, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.55541229248047, "t": 754.0760498046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922152578830719, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.59571838378906, "t": 754.413818359375, "r": 340.1140441894531, "b": 764.1231079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9446555376052856, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 141, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.55541229248047, "t": 754.0760498046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922152578830719, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "126"}, {"label": "page_footer", "id": 1, "page_no": 141, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59571838378906, "t": 754.413818359375, "r": 340.1140441894531, "b": 764.1231079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9446555376052856, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}], "body": [], "headers": [{"label": "page_footer", "id": 0, "page_no": 141, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.55541229248047, "t": 754.0760498046875, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.922152578830719, "cells": [{"id": 0, "text": "126 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "126"}, {"label": "page_footer", "id": 1, "page_no": 141, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.59571838378906, "t": 754.413818359375, "r": 340.1140441894531, "b": 764.1231079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9446555376052856, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 142, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.680240631103516, "t": 754.7608032226562, "r": 257.24335, "b": 764.109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9499529600143433, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 530.1651000976562, "t": 754.2824096679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230133295059204, "cells": [{"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.91483306884766, "r": 299.20081, "b": 96.60542297363281, "coord_origin": "TOPLEFT"}, "confidence": 0.9644432663917542, "cells": [{"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75408935546875, "t": 132.06002807617188, "r": 530.0675, "b": 154.35791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9717119932174683, "cells": [{"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.5552978515625, "t": 181.37648010253906, "r": 205.97418, "b": 197.83837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9622768759727478, "cells": [{"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.73150634765625, "t": 213.93795776367188, "r": 413.18115, "b": 224.1931915283203, "coord_origin": "TOPLEFT"}, "confidence": 0.9328869581222534, "cells": [{"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.81341552734375, "t": 230.74234008789062, "r": 414.05658, "b": 240.96536254882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9425700902938843, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 150.4676513671875, "t": 248.0777587890625, "r": 545.99457, "b": 270.6806945800781, "coord_origin": "TOPLEFT"}, "confidence": 0.7933239340782166, "cells": [{"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.8154296875, "t": 276.60491943359375, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9148671627044678, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.4538116455078, "t": 294.1251525878906, "r": 536.3565673828125, "b": 304.4701232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.7976768016815186, "cells": [{"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.64071655273438, "t": 310.49432373046875, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}, "confidence": 0.9118204712867737, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.3872833251953, "t": 328.0414123535156, "r": 545.99457, "b": 349.66357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.7908105850219727, "cells": [{"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.63323974609375, "t": 356.6874694824219, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9359384179115295, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 150.4163360595703, "t": 374.12347412109375, "r": 545.99457, "b": 396.02581787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.7968815565109253, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.4580078125, "t": 402.4890441894531, "r": 346.3946838378906, "b": 413.17169189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9383506178855896, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 150.8020477294922, "t": 419.9049377441406, "r": 546.1087036132812, "b": 442.11077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7104644179344177, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "section_header", "bbox": {"l": 64.61199188232422, "t": 469.3950500488281, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9526883959770203, "cells": [{"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 135.812255859375, "t": 501.83233642578125, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}, "confidence": 0.9205816388130188, "cells": [{"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.69252014160156, "t": 518.7003784179688, "r": 457.80386, "b": 528.908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.928091824054718, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 150.2280731201172, "t": 536.205322265625, "r": 545.99457, "b": 557.8463745117188, "coord_origin": "TOPLEFT"}, "confidence": 0.7536969184875488, "cells": [{"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.60523986816406, "t": 564.5147705078125, "r": 287.6324768066406, "b": 575.3772583007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9084469079971313, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 150.68099975585938, "t": 582.1913452148438, "r": 291.11823, "b": 592.1077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6532412171363831, "cells": [{"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 135.6503448486328, "t": 598.7340698242188, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}, "confidence": 0.9109565615653992, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 150.75747680664062, "t": 615.7659912109375, "r": 266.09869, "b": 625.9202880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6917186975479126, "cells": [{"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 142, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.680240631103516, "t": 754.7608032226562, "r": 257.24335, "b": 764.109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9499529600143433, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 142, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1651000976562, "t": 754.2824096679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230133295059204, "cells": [{"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "127"}, {"label": "section_header", "id": 2, "page_no": 142, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.91483306884766, "r": 299.20081, "b": 96.60542297363281, "coord_origin": "TOPLEFT"}, "confidence": 0.9644432663917542, "cells": [{"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Related publications"}, {"label": "text", "id": 3, "page_no": 142, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75408935546875, "t": 132.06002807617188, "r": 530.0675, "b": 154.35791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9717119932174683, "cells": [{"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}]}, "text": "The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper."}, {"label": "section_header", "id": 4, "page_no": 142, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.5552978515625, "t": 181.37648010253906, "r": 205.97418, "b": 197.83837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9622768759727478, "cells": [{"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Other publications"}, {"label": "text", "id": 5, "page_no": 142, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.73150634765625, "t": 213.93795776367188, "r": 413.18115, "b": 224.1931915283203, "coord_origin": "TOPLEFT"}, "confidence": 0.9328869581222534, "cells": [{"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "These publications are relevant as further information sources:"}, {"label": "list_item", "id": 6, "page_no": 142, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.81341552734375, "t": 230.74234008789062, "r": 414.05658, "b": 240.96536254882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9425700902938843, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM DB2 for i indexing methods and strategies white paper:"}, {"label": "list_item", "id": 7, "page_no": 142, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.4676513671875, "t": 248.0777587890625, "r": 545.99457, "b": 270.6806945800781, "coord_origin": "TOPLEFT"}, "confidence": 0.7933239340782166, "cells": [{"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies"}, {"label": "list_item", "id": 8, "page_no": 142, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.8154296875, "t": 276.60491943359375, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9148671627044678, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Memo to Users Version 7.2 :"}, {"label": "list_item", "id": 9, "page_no": 142, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.4538116455078, "t": 294.1251525878906, "r": 536.3565673828125, "b": 304.4701232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.7976768016815186, "cells": [{"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "list_item", "id": 10, "page_no": 142, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.64071655273438, "t": 310.49432373046875, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}, "confidence": 0.9118204712867737, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide :"}, {"label": "list_item", "id": 11, "page_no": 142, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3872833251953, "t": 328.0414123535156, "r": 545.99457, "b": 349.66357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.7908105850219727, "cells": [{"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en"}, {"label": "list_item", "id": 12, "page_no": 142, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.63323974609375, "t": 356.6874694824219, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9359384179115295, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide :"}, {"label": "list_item", "id": 13, "page_no": 142, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.4163360595703, "t": 374.12347412109375, "r": 545.99457, "b": 396.02581787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.7968815565109253, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 14, "page_no": 142, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.4580078125, "t": 402.4890441894531, "r": 346.3946838378906, "b": 413.17169189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9383506178855896, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide :"}, {"label": "list_item", "id": 15, "page_no": 142, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 150.8020477294922, "t": 419.9049377441406, "r": 546.1087036132812, "b": 442.11077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7104644179344177, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}, {"label": "section_header", "id": 16, "page_no": 142, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 64.61199188232422, "t": 469.3950500488281, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9526883959770203, "cells": [{"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Online resources"}, {"label": "text", "id": 17, "page_no": 142, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.812255859375, "t": 501.83233642578125, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}, "confidence": 0.9205816388130188, "cells": [{"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}]}, "text": "These websites are relevant as further information sources:"}, {"label": "list_item", "id": 18, "page_no": 142, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.69252014160156, "t": 518.7003784179688, "r": 457.80386, "b": 528.908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.928091824054718, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center:"}, {"label": "list_item", "id": 19, "page_no": 142, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 150.2280731201172, "t": 536.205322265625, "r": 545.99457, "b": 557.8463745117188, "coord_origin": "TOPLEFT"}, "confidence": 0.7536969184875488, "cells": [{"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en"}, {"label": "list_item", "id": 20, "page_no": 142, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.60523986816406, "t": 564.5147705078125, "r": 287.6324768066406, "b": 575.3772583007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9084469079971313, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Identity Theft Resource Center"}, {"label": "list_item", "id": 21, "page_no": 142, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 150.68099975585938, "t": 582.1913452148438, "r": 291.11823, "b": 592.1077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6532412171363831, "cells": [{"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.idtheftcenter.org"}, {"label": "list_item", "id": 22, "page_no": 142, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.6503448486328, "t": 598.7340698242188, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}, "confidence": 0.9109565615653992, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ponemon Institute"}, {"label": "list_item", "id": 23, "page_no": 142, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 150.75747680664062, "t": 615.7659912109375, "r": 266.09869, "b": 625.9202880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6917186975479126, "cells": [{"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ponemon.org/"}], "body": [{"label": "section_header", "id": 2, "page_no": 142, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.91483306884766, "r": 299.20081, "b": 96.60542297363281, "coord_origin": "TOPLEFT"}, "confidence": 0.9644432663917542, "cells": [{"id": 2, "text": "Related publications", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 299.20081, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Related publications"}, {"label": "text", "id": 3, "page_no": 142, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75408935546875, "t": 132.06002807617188, "r": 530.0675, "b": 154.35791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9717119932174683, "cells": [{"id": 3, "text": "The publications that are listed in this section are considered suitable for a more detailed ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 530.0675, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "description of the topics that are covered in this paper.", "bbox": {"l": 136.8, "t": 144.64844000000005, "r": 376.55719, "b": 153.86145, "coord_origin": "TOPLEFT"}}]}, "text": "The publications that are listed in this section are considered suitable for a more detailed description of the topics that are covered in this paper."}, {"label": "section_header", "id": 4, "page_no": 142, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.5552978515625, "t": 181.37648010253906, "r": 205.97418, "b": 197.83837890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9622768759727478, "cells": [{"id": 5, "text": "Other publications", "bbox": {"l": 64.800003, "t": 182.34069999999997, "r": 205.97418, "b": 197.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Other publications"}, {"label": "text", "id": 5, "page_no": 142, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.73150634765625, "t": 213.93795776367188, "r": 413.18115, "b": 224.1931915283203, "coord_origin": "TOPLEFT"}, "confidence": 0.9328869581222534, "cells": [{"id": 6, "text": "These publications are relevant as further information sources:", "bbox": {"l": 136.8, "t": 214.6087, "r": 413.18115, "b": 223.82172000000003, "coord_origin": "TOPLEFT"}}]}, "text": "These publications are relevant as further information sources:"}, {"label": "list_item", "id": 6, "page_no": 142, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.81341552734375, "t": 230.74234008789062, "r": 414.05658, "b": 240.96536254882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9425700902938843, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 231.79767000000004, "r": 141.78, "b": 240.57245, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM DB2 for i indexing methods and strategies", "bbox": {"l": 151.20016, "t": 231.64824999999996, "r": 356.53046, "b": 240.86127, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " white paper:", "bbox": {"l": 356.58035, "t": 231.64824999999996, "r": 414.05658, "b": 240.86127, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM DB2 for i indexing methods and strategies white paper:"}, {"label": "list_item", "id": 7, "page_no": 142, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.4676513671875, "t": 248.0777587890625, "r": 545.99457, "b": 270.6806945800781, "coord_origin": "TOPLEFT"}, "confidence": 0.7933239340782166, "cells": [{"id": 10, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i", "bbox": {"l": 151.20016, "t": 248.77747, "r": 545.99457, "b": 257.55224999999996, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "_indexing_methods_strategies", "bbox": {"l": 151.20016, "t": 260.77728, "r": 291.11823, "b": 269.55206, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ibm.com/partnerworld/wps/servlet/ContentHandler/stg_ast_sys_wp_db2_i _indexing_methods_strategies"}, {"label": "list_item", "id": 8, "page_no": 142, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.8154296875, "t": 276.60491943359375, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9148671627044678, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.75708, "r": 141.78, "b": 286.53186, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM i Memo to Users Version 7.2", "bbox": {"l": 151.20016, "t": 277.60767, "r": 297.0036, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ":", "bbox": {"l": 297.00061, "t": 277.60767, "r": 299.7695, "b": 286.8206799999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Memo to Users Version 7.2 :"}, {"label": "list_item", "id": 9, "page_no": 142, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.4538116455078, "t": 294.1251525878906, "r": 536.3565673828125, "b": 304.4701232910156, "coord_origin": "TOPLEFT"}, "confidence": 0.7976768016815186, "cells": [{"id": 15, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm", "bbox": {"l": 151.20015, "t": 294.79666, "r": 535.97485, "b": 303.57144, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgmtu.htm"}, {"label": "list_item", "id": 10, "page_no": 142, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.64071655273438, "t": 310.49432373046875, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}, "confidence": 0.9118204712867737, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 311.77646, "r": 141.77998, "b": 320.55124, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM i Version 7.2 DB2 for i SQL Reference Guide", "bbox": {"l": 151.20015, "t": 311.62708, "r": 368.68774, "b": 320.84006, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": ":", "bbox": {"l": 368.63989, "t": 311.62708, "r": 371.40878, "b": 320.84006, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 DB2 for i SQL Reference Guide :"}, {"label": "list_item", "id": 11, "page_no": 142, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.3872833251953, "t": 328.0414123535156, "r": 545.99457, "b": 349.66357421875, "coord_origin": "TOPLEFT"}, "confidence": 0.7908105850219727, "cells": [{"id": 19, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l", "bbox": {"l": 151.20013, "t": 328.75626, "r": 545.99457, "b": 337.5310400000001, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ang=en", "bbox": {"l": 151.20013, "t": 340.75607, "r": 181.13989, "b": 349.53085, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzintro.htm?l ang=en"}, {"label": "list_item", "id": 12, "page_no": 142, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.63323974609375, "t": 356.6874694824219, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9359384179115295, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 357.79565, "r": 141.77997, "b": 366.57043, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "IBM i Version 7.2 Journal Management Guide", "bbox": {"l": 151.20013, "t": 357.64627, "r": 352.84634, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": ":", "bbox": {"l": 352.86026, "t": 357.64627, "r": 355.62915, "b": 366.8592499999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Journal Management Guide :"}, {"label": "list_item", "id": 13, "page_no": 142, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.4163360595703, "t": 374.12347412109375, "r": 545.99457, "b": 396.02581787109375, "coord_origin": "TOPLEFT"}, "confidence": 0.7968815565109253, "cells": [{"id": 24, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis", "bbox": {"l": 151.20013, "t": 374.77545, "r": 545.99457, "b": 383.55023, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": ".htm?lang=en", "bbox": {"l": 151.20013, "t": 386.77527, "r": 211.1394, "b": 395.55005, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzaki/rzakiprintthis .htm?lang=en"}, {"label": "list_item", "id": 14, "page_no": 142, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.4580078125, "t": 402.4890441894531, "r": 346.3946838378906, "b": 413.17169189453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9383506178855896, "cells": [{"id": 26, "text": "GLYPH", "bbox": {"l": 136.79997, "t": 403.75507, "r": 141.77997, "b": 412.52985, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM i Version 7.2 Security Reference Guide", "bbox": {"l": 151.20013, "t": 403.60568, "r": 343.57654, "b": 412.81866, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": ":", "bbox": {"l": 343.56061, "t": 403.60568, "r": 346.3295, "b": 412.81866, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM i Version 7.2 Security Reference Guide :"}, {"label": "list_item", "id": 15, "page_no": 142, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 150.8020477294922, "t": 419.9049377441406, "r": 546.1087036132812, "b": 442.11077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7104644179344177, "cells": [{"id": 29, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h", "bbox": {"l": 151.20015, "t": 420.79465, "r": 545.99457, "b": 429.56943, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "tm?lang=en", "bbox": {"l": 151.20015, "t": 432.79446, "r": 201.17941, "b": 441.5692399999999, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzarl/rzarlkickoff.h tm?lang=en"}, {"label": "section_header", "id": 16, "page_no": 142, "cluster": {"id": 16, "label": "section_header", "bbox": {"l": 64.61199188232422, "t": 469.3950500488281, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}, "confidence": 0.9526883959770203, "cells": [{"id": 31, "text": "Online resources", "bbox": {"l": 64.800003, "t": 470.3407, "r": 195.13574, "b": 485.1037, "coord_origin": "TOPLEFT"}}]}, "text": "Online resources"}, {"label": "text", "id": 17, "page_no": 142, "cluster": {"id": 17, "label": "text", "bbox": {"l": 135.812255859375, "t": 501.83233642578125, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}, "confidence": 0.9205816388130188, "cells": [{"id": 32, "text": "These websites are relevant as further information sources:", "bbox": {"l": 136.8, "t": 502.60861, "r": 399.36154, "b": 511.82159, "coord_origin": "TOPLEFT"}}]}, "text": "These websites are relevant as further information sources:"}, {"label": "list_item", "id": 18, "page_no": 142, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.69252014160156, "t": 518.7003784179688, "r": 457.80386, "b": 528.908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.928091824054718, "cells": [{"id": 33, "text": "GLYPH", "bbox": {"l": 136.8, "t": 519.7975799999999, "r": 141.78, "b": 528.57236, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Database programming topic of the IBM i 7.2 IBM Knowledge Center:", "bbox": {"l": 151.20016, "t": 519.64819, "r": 457.80386, "b": 528.86118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Database programming topic of the IBM i 7.2 IBM Knowledge Center:"}, {"label": "list_item", "id": 19, "page_no": 142, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 150.2280731201172, "t": 536.205322265625, "r": 545.99457, "b": 557.8463745117188, "coord_origin": "TOPLEFT"}, "confidence": 0.7536969184875488, "cells": [{"id": 35, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l", "bbox": {"l": 151.20016, "t": 536.7774, "r": 545.99457, "b": 545.55215, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ang=en", "bbox": {"l": 151.20016, "t": 548.77721, "r": 181.13992, "b": 557.55196, "coord_origin": "TOPLEFT"}}]}, "text": "http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahg/rzahgdbp.htm?l ang=en"}, {"label": "list_item", "id": 20, "page_no": 142, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.60523986816406, "t": 564.5147705078125, "r": 287.6324768066406, "b": 575.3772583007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9084469079971313, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.8, "t": 565.81677, "r": 141.78, "b": 574.59152, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Identity Theft Resource Center", "bbox": {"l": 151.20016, "t": 565.66737, "r": 287.27969, "b": 574.88037, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Identity Theft Resource Center"}, {"label": "list_item", "id": 21, "page_no": 142, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 150.68099975585938, "t": 582.1913452148438, "r": 291.11823, "b": 592.1077880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6532412171363831, "cells": [{"id": 39, "text": "http://www.idtheftcenter.org", "bbox": {"l": 151.20016, "t": 582.79659, "r": 291.11823, "b": 591.57133, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.idtheftcenter.org"}, {"label": "list_item", "id": 22, "page_no": 142, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 135.6503448486328, "t": 598.7340698242188, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}, "confidence": 0.9109565615653992, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.8, "t": 599.7764, "r": 141.78, "b": 608.55115, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ponemon Institute", "bbox": {"l": 151.20016, "t": 599.627, "r": 231.24367, "b": 608.84, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ponemon Institute"}, {"label": "list_item", "id": 23, "page_no": 142, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 150.75747680664062, "t": 615.7659912109375, "r": 266.09869, "b": 625.9202880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.6917186975479126, "cells": [{"id": 42, "text": "http://www.ponemon.org/", "bbox": {"l": 151.20016, "t": 616.81596, "r": 266.09869, "b": 625.59071, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.ponemon.org/"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 142, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.680240631103516, "t": 754.7608032226562, "r": 257.24335, "b": 764.109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9499529600143433, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 142, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 530.1651000976562, "t": 754.2824096679688, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230133295059204, "cells": [{"id": 1, "text": "127", "bbox": {"l": 530.52002, "t": 754.848721, "r": 547.25879, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "127"}]}}, {"page_no": 143, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.5219497680664, "t": 754.391845703125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169230461120605, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.66630554199219, "t": 754.5946655273438, "r": 339.9003601074219, "b": 764.0750732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9336705803871155, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.73175811767578, "t": 70.09744262695312, "r": 172.86197, "b": 86.14898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.51719665527344, "t": 102.7090072631836, "r": 262.60373, "b": 113.38191986083984, "coord_origin": "TOPLEFT"}, "confidence": 0.8567046523094177, "cells": [{"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 120.41547393798828, "r": 211.73904, "b": 130.2474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8032501339912415, "cells": [{"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.5938720703125, "t": 141.32887268066406, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}, "confidence": 0.7982341051101685, "cells": [{"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 159.01025390625, "r": 216.71904000000004, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8333450555801392, "cells": [{"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 143, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.5219497680664, "t": 754.391845703125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169230461120605, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "128"}, {"label": "page_footer", "id": 1, "page_no": 143, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.66630554199219, "t": 754.5946655273438, "r": 339.9003601074219, "b": 764.0750732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9336705803871155, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 143, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.73175811767578, "t": 70.09744262695312, "r": 172.86197, "b": 86.14898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Help from IBM"}, {"label": "text", "id": 3, "page_no": 143, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.51719665527344, "t": 102.7090072631836, "r": 262.60373, "b": 113.38191986083984, "coord_origin": "TOPLEFT"}, "confidence": 0.8567046523094177, "cells": [{"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Support and downloads"}, {"label": "text", "id": 4, "page_no": 143, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 120.41547393798828, "r": 211.73904, "b": 130.2474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8032501339912415, "cells": [{"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /support"}, {"label": "text", "id": 5, "page_no": 143, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.5938720703125, "t": 141.32887268066406, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}, "confidence": 0.7982341051101685, "cells": [{"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Global Services"}, {"label": "text", "id": 6, "page_no": 143, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 159.01025390625, "r": 216.71904000000004, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8333450555801392, "cells": [{"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /services"}], "body": [{"label": "section_header", "id": 2, "page_no": 143, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.73175811767578, "t": 70.09744262695312, "r": 172.86197, "b": 86.14898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345404505729675, "cells": [{"id": 2, "text": "Help from IBM", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 172.86197, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Help from IBM"}, {"label": "text", "id": 3, "page_no": 143, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.51719665527344, "t": 102.7090072631836, "r": 262.60373, "b": 113.38191986083984, "coord_origin": "TOPLEFT"}, "confidence": 0.8567046523094177, "cells": [{"id": 3, "text": "IBM Support and downloads", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 262.60373, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Support and downloads"}, {"label": "text", "id": 4, "page_no": 143, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.8, "t": 120.41547393798828, "r": 211.73904, "b": 130.2474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8032501339912415, "cells": [{"id": 4, "text": "ibm.com", "bbox": {"l": 136.8, "t": 120.67767000000003, "r": 171.77951, "b": 129.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "/support", "bbox": {"l": 171.77953, "t": 120.67767000000003, "r": 211.73904, "b": 129.45245, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /support"}, {"label": "text", "id": 5, "page_no": 143, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.5938720703125, "t": 141.32887268066406, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}, "confidence": 0.7982341051101685, "cells": [{"id": 6, "text": "IBM Global Services", "bbox": {"l": 136.8, "t": 142.48803999999996, "r": 227.63222, "b": 151.70105, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Global Services"}, {"label": "text", "id": 6, "page_no": 143, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.8, "t": 159.01025390625, "r": 216.71904000000004, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8333450555801392, "cells": [{"id": 7, "text": "ibm.com", "bbox": {"l": 136.8, "t": 159.67700000000002, "r": 171.77951, "b": 168.50158999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "/services", "bbox": {"l": 171.77953, "t": 159.67700000000002, "r": 216.71904000000004, "b": 168.45177999999999, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /services"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 143, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.5219497680664, "t": 754.391845703125, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9169230461120605, "cells": [{"id": 0, "text": "128 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "128"}, {"label": "page_footer", "id": 1, "page_no": 143, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.66630554199219, "t": 754.5946655273438, "r": 339.9003601074219, "b": 764.0750732421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9336705803871155, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 144, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 145, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 145, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 145, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 145, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 145, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 145, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 145, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 145, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 145, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 145, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 145, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 145, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 145, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 145, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 145, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 145, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 145, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 145, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 145, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 145, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 145, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 145, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 145, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 145, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 145, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 145, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 145, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 145, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 145, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110_sampled.doctags.txt b/tests/data/groundtruth/docling_v2/redp5110_sampled.doctags.txt new file mode 100644 index 00000000..e3454a06 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/redp5110_sampled.doctags.txt @@ -0,0 +1,299 @@ + +Front cover +
+ +
+Row and Column Access Control Support in IBM DB2 for i +Implement roles and separation of duties +Leverage row permissions on the database +Protect columns by defining column masks +Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan +Redpaper +Contents + + +Notices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii +Trademarks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii +DB2 for i Center of Excellence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix +Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi +Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi +Now you can become a published author, too!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii +Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii +Stay connected to IBM Redbooks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv +Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 +1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 +1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 +1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 +1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 +1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .5 +Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 +2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 +2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .8 +2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .8 +2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .9 +2.1.4 Database Information function: QIBM_DB_SYSMON. . . . . . . . . . . . . . . . . . . . . . 9 +2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .9 +2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 +2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .10 +2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 +Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 +3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .14 +3.1.1 Row permission and column mask definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . 14 +3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 +3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 +3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 +3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 +3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 +3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .21 +. . . . . . . . . . . . . . . . . . . . . . . . 22 +3.5 SELECT, INSERT, and UPDATE behavior with RCAC +3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .23 +3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .23 +3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 +3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 +3.6.5 Defining and creating column masks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 +3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 +3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 +3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .32 +
+DB2 for i Center of Excellence +Solution Brief IBM Systems Lab Services and Training +
+ +
+Highlights +GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +
+ +
+Power Services +DB2 for i Center of Excellence +Expert help to achieve your business requirements +We build confident, satisfied clients +No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. +Because no one else is IBM. +With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. +Who we are, some of what we do +Global CoE engagements cover topics including: +r Database performance and scalability +r Advanced SQL knowledge and skills transfer +r Business intelligence and analytics +r DB2 Web Query +r Query/400 modernization for better reporting and analysis capabilities +r Database modernization and re-engineering +r Data-centric architecture and design +r Extremely large database and overcoming limits to growth +r ISV education and enablement +Preface +This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. +This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. +
+ +
+
+ +
+Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. +Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . +Authors +
+ +
+Chapter 1. +1 +Securing and protecting IBM DB2 data +Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. +Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. +This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: +GLYPH Security fundamentals +GLYPH Current state of IBM i security +GLYPH DB2 for i security controls +1.1 Security fundamentals +Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: +GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. +The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. +A security policy is what defines whether the system and its settings are secure (or not). +GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. +With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. +1.2 Current state of IBM i security +Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. +Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. +Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. +Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. +1.3.1 Existing row and column control +Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. +Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. +Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. +Figure 1-2 Existing row and column controls +
+ +Figure 1-2 Existing row and column controls +
+2.1.6 Change Function Usage CL command +The following CL commands can be used to work with, display, or change function usage IDs: +GLYPH Work Function Usage ( WRKFCNUSG ) +GLYPH Change Function Usage ( CHGFCNUSG ) +GLYPH Display Function Usage ( DSPFCNUSG ) +For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: +CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) +2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view +The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view. +Table 2-1 FUNCTION_USAGE view + + + +Column nameData typeDescription +FUNCTION_IDVARCHAR(30)ID of the function. +USER_NAMEVARCHAR(10)Name of the user profile that has a usage setting for this function. +USAGEVARCHAR(7)Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. +USER_TYPEVARCHAR(5)Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. +
Table 2-1 FUNCTION_USAGE view
+To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. +Example 2-1 Query to determine who has authority to define and manage RCAC +SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name; +2.2 Separation of duties +Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. +For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. +In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. +QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. +QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. +A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. +Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. +Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority + + + +User action*JOBCTLQIBM_DB_SECADMQIBM_DB_SQLADMQIBM_DB_SYSMONNo Authority +SET CURRENT DEGREE (SQL statement)XX +CHGQRYA command targeting a different user's jobXX +STRDBMON or ENDDBMON commands targeting a different user's jobXX +STRDBMON or ENDDBMON commands targeting a job that matches the current userXXXX +QUSRJOBI() API format 900 or System i Navigator's SQL Details for JobXXX +Visual Explain within Run SQL scriptsXXXX +Visual Explain outside of Run SQL scriptsXX +ANALYZE PLAN CACHE procedureXX +DUMP PLAN CACHE procedureXX +MODIFY PLAN CACHE procedureXX +MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)XX +CHANGE PLAN CACHE SIZE procedure (currently does not check authority)XX +
Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority
+The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules. +Figure 3-1 CREATE PERMISSION SQL statement +
+ +The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement +
+Column mask +A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. +Table 3-1 summarizes these special registers and their values. +Table 3-1 Special registers and their corresponding values + + + +Special registerCorresponding value +USER or SESSION_USERThe effective user of the thread excluding adopted authority. +CURRENT_USERThe effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. +SYSTEM_USERThe authorization ID that initiated the connection. +
Table 3-1 Special registers and their corresponding values
+Figure 3-5 shows the difference in the special register values when an adopted authority is used: +GLYPH A user connects to the server using the user profile ALICE. +GLYPH USER and CURRENT USER initially have the same value of ALICE. +GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. +GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. +GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. +Figure 3-5 Special registers and adopted authority +
+ +Figure 3-5 Special registers and adopted authority +
+3.2.2 Built-in global variables +Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. +IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. +Table 3-2 lists the nine built-in global variables. +Table 3-2 Built-in global variables + + + +Global variableTypeDescription +CLIENT_HOSTVARCHAR(255)Host name of the current client as returned by the system +CLIENT_IPADDRVARCHAR(128)IP address of the current client as returned by the system +CLIENT_PORTINTEGERPort used by the current client to communicate with the server +PACKAGE_NAMEVARCHAR(128)Name of the currently running package +PACKAGE_SCHEMAVARCHAR(128)Schema name of the currently running package +PACKAGE_VERSIONVARCHAR(64)Version identifier of the currently running package +ROUTINE_SCHEMAVARCHAR(128)Schema name of the currently running routine +ROUTINE_SPECIFIC_NAMEVARCHAR(128)Name of the currently running routine +ROUTINE_TYPECHAR(1)Type of the currently running routine +
Table 3-2 Built-in global variables
+3.3 VERIFY_GROUP_FOR_USER function +The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. +If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. +Here is an example of using the VERIFY_GROUP_FOR_USER function: +1. There are user profiles for MGR, JANE, JUDY, and TONY. +2. The user profile JANE specifies a group profile of MGR. +3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: +VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY') +RETURN CASE +WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ; +2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones: +-Human Resources can see the unmasked TAX_ID of the employees. +-Employees can see only their own unmasked TAX_ID. +-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). +-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX. +To implement this column mask, run the SQL statement that is shown in Example 3-9. +Example 3-9 Creating a mask on the TAX_ID column +CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; +3. Figure 3-10 shows the masks that are created in the HR_SCHEMA. +Figure 3-10 Column masks shown in System i Navigator +
+ +Figure 3-10 Column masks shown in System i Navigator +
+3.6.6 Activating RCAC +Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: +1. Run the SQL statements that are shown in Example 3-10. +Example 3-10 Activating RCAC on the EMPLOYEES table +/* Active Row Access Control (permissions) */ +/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; +*/ +2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . +Figure 3-11 Selecting the EMPLOYEES table from System i Navigator +
+ +Figure 3-11 Selecting the EMPLOYEES table from System i Navigator +
+2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. +Figure 4-68 Visual Explain with RCAC enabled +
+ +Figure 4-68 Visual Explain with RCAC enabled +
+3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. +Figure 4-69 Index advice with no RCAC +
+ +Figure 4-69 Index advice with no RCAC +
+THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; +Back cover +Row and Column Access Control Support in IBM DB2 for i +Implement roles and separation of duties +Leverage row permissions on the database +Protect columns by defining column masks +This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. +
+ +
+
+ +
+INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION +BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE +IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. +For more information: ibm.com /redbooks +
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110_sampled.json b/tests/data/groundtruth/docling_v2/redp5110_sampled.json new file mode 100644 index 00000000..3ae34bfc --- /dev/null +++ b/tests/data/groundtruth/docling_v2/redp5110_sampled.json @@ -0,0 +1 @@ +{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "redp5110_sampled", "origin": {"mimetype": "application/pdf", "binary_hash": 12110913468886801317, "filename": "redp5110_sampled.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}, {"cref": "#/pictures/0"}, {"cref": "#/texts/1"}, {"cref": "#/texts/2"}, {"cref": "#/texts/3"}, {"cref": "#/texts/4"}, {"cref": "#/texts/5"}, {"cref": "#/texts/6"}, {"cref": "#/texts/7"}, {"cref": "#/texts/8"}, {"cref": "#/tables/0"}, {"cref": "#/texts/9"}, {"cref": "#/texts/10"}, {"cref": "#/texts/11"}, {"cref": "#/texts/12"}, {"cref": "#/pictures/1"}, {"cref": "#/texts/13"}, {"cref": "#/groups/0"}, {"cref": "#/pictures/2"}, {"cref": "#/texts/18"}, {"cref": "#/texts/19"}, {"cref": "#/texts/20"}, {"cref": "#/texts/21"}, {"cref": "#/texts/22"}, {"cref": "#/texts/23"}, {"cref": "#/texts/24"}, {"cref": "#/texts/25"}, {"cref": "#/texts/26"}, {"cref": "#/groups/1"}, {"cref": "#/texts/36"}, {"cref": "#/texts/37"}, {"cref": "#/texts/38"}, {"cref": "#/texts/39"}, {"cref": "#/pictures/3"}, {"cref": "#/pictures/4"}, {"cref": "#/texts/40"}, {"cref": "#/texts/41"}, {"cref": "#/texts/42"}, {"cref": "#/texts/43"}, {"cref": "#/texts/44"}, {"cref": "#/pictures/5"}, {"cref": "#/texts/45"}, {"cref": "#/texts/46"}, {"cref": "#/texts/47"}, {"cref": "#/texts/48"}, {"cref": "#/texts/49"}, {"cref": "#/texts/50"}, {"cref": "#/groups/2"}, {"cref": "#/texts/54"}, {"cref": "#/texts/55"}, {"cref": "#/texts/56"}, {"cref": "#/texts/57"}, {"cref": "#/texts/58"}, {"cref": "#/texts/59"}, {"cref": "#/groups/3"}, {"cref": "#/texts/62"}, {"cref": "#/groups/4"}, {"cref": "#/texts/64"}, {"cref": "#/texts/65"}, {"cref": "#/texts/66"}, {"cref": "#/texts/67"}, {"cref": "#/texts/68"}, {"cref": "#/texts/69"}, {"cref": "#/texts/70"}, {"cref": "#/texts/71"}, {"cref": "#/texts/72"}, {"cref": "#/texts/73"}, {"cref": "#/texts/74"}, {"cref": "#/texts/75"}, {"cref": "#/texts/76"}, {"cref": "#/texts/77"}, {"cref": "#/texts/78"}, {"cref": "#/pictures/6"}, {"cref": "#/texts/79"}, {"cref": "#/texts/80"}, {"cref": "#/groups/5"}, {"cref": "#/texts/84"}, {"cref": "#/texts/85"}, {"cref": "#/texts/86"}, {"cref": "#/texts/87"}, {"cref": "#/texts/88"}, {"cref": "#/tables/1"}, {"cref": "#/texts/89"}, {"cref": "#/texts/90"}, {"cref": "#/texts/91"}, {"cref": "#/texts/92"}, {"cref": "#/texts/93"}, {"cref": "#/texts/94"}, {"cref": "#/texts/95"}, {"cref": "#/texts/96"}, {"cref": "#/texts/97"}, {"cref": "#/texts/98"}, {"cref": "#/texts/99"}, {"cref": "#/texts/100"}, {"cref": "#/texts/101"}, {"cref": "#/texts/102"}, {"cref": "#/tables/2"}, {"cref": "#/texts/103"}, {"cref": "#/texts/104"}, {"cref": "#/texts/105"}, {"cref": "#/texts/106"}, {"cref": "#/pictures/7"}, {"cref": "#/texts/107"}, {"cref": "#/texts/108"}, {"cref": "#/texts/109"}, {"cref": "#/texts/110"}, {"cref": "#/texts/111"}, {"cref": "#/texts/112"}, {"cref": "#/tables/3"}, {"cref": "#/texts/113"}, {"cref": "#/groups/6"}, {"cref": "#/texts/119"}, {"cref": "#/pictures/8"}, {"cref": "#/texts/120"}, {"cref": "#/texts/121"}, {"cref": "#/texts/122"}, {"cref": "#/texts/123"}, {"cref": "#/texts/124"}, {"cref": "#/texts/125"}, {"cref": "#/texts/126"}, {"cref": "#/texts/127"}, {"cref": "#/texts/128"}, {"cref": "#/tables/4"}, {"cref": "#/texts/129"}, {"cref": "#/texts/130"}, {"cref": "#/texts/131"}, {"cref": "#/texts/132"}, {"cref": "#/groups/7"}, {"cref": "#/texts/136"}, {"cref": "#/texts/137"}, {"cref": "#/texts/138"}, {"cref": "#/groups/8"}, {"cref": "#/texts/145"}, {"cref": "#/texts/146"}, {"cref": "#/texts/147"}, {"cref": "#/texts/148"}, {"cref": "#/groups/9"}, {"cref": "#/texts/150"}, {"cref": "#/pictures/9"}, {"cref": "#/texts/151"}, {"cref": "#/texts/152"}, {"cref": "#/groups/10"}, {"cref": "#/texts/154"}, {"cref": "#/groups/11"}, {"cref": "#/texts/156"}, {"cref": "#/texts/157"}, {"cref": "#/groups/12"}, {"cref": "#/texts/159"}, {"cref": "#/pictures/10"}, {"cref": "#/texts/160"}, {"cref": "#/texts/161"}, {"cref": "#/groups/13"}, {"cref": "#/texts/163"}, {"cref": "#/pictures/11"}, {"cref": "#/groups/14"}, {"cref": "#/texts/165"}, {"cref": "#/pictures/12"}, {"cref": "#/texts/166"}, {"cref": "#/texts/167"}, {"cref": "#/texts/168"}, {"cref": "#/texts/169"}, {"cref": "#/texts/170"}, {"cref": "#/texts/171"}, {"cref": "#/texts/172"}, {"cref": "#/texts/173"}, {"cref": "#/texts/174"}, {"cref": "#/texts/175"}, {"cref": "#/texts/176"}, {"cref": "#/texts/177"}, {"cref": "#/texts/178"}, {"cref": "#/pictures/13"}, {"cref": "#/pictures/14"}, {"cref": "#/texts/179"}, {"cref": "#/texts/180"}, {"cref": "#/texts/181"}, {"cref": "#/texts/182"}], "name": "_root_", "label": "unspecified"}, "groups": [{"self_ref": "#/groups/0", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/14"}, {"cref": "#/texts/15"}, {"cref": "#/texts/16"}, {"cref": "#/texts/17"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/1", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/27"}, {"cref": "#/texts/28"}, {"cref": "#/texts/29"}, {"cref": "#/texts/30"}, {"cref": "#/texts/31"}, {"cref": "#/texts/32"}, {"cref": "#/texts/33"}, {"cref": "#/texts/34"}, {"cref": "#/texts/35"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/2", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/51"}, {"cref": "#/texts/52"}, {"cref": "#/texts/53"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/3", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/60"}, {"cref": "#/texts/61"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/4", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/63"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/5", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/81"}, {"cref": "#/texts/82"}, {"cref": "#/texts/83"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/6", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/114"}, {"cref": "#/texts/115"}, {"cref": "#/texts/116"}, {"cref": "#/texts/117"}, {"cref": "#/texts/118"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/7", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/133"}, {"cref": "#/texts/134"}, {"cref": "#/texts/135"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/8", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/139"}, {"cref": "#/texts/140"}, {"cref": "#/texts/141"}, {"cref": "#/texts/142"}, {"cref": "#/texts/143"}, {"cref": "#/texts/144"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/9", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/149"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/10", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/153"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/11", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/155"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/12", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/158"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/13", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/162"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/14", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/164"}], "name": "list", "label": "list"}], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 287.82000732421875, "t": 763.4519653320312, "r": 418.83355712890625, "b": 741.251953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Front cover", "text": "Front cover"}, {"self_ref": "#/texts/1", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 1, "bbox": {"l": 35.68840408325195, "t": 709.605712890625, "r": 584.6428833007812, "b": 625.594482421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i", "level": 1}, {"self_ref": "#/texts/2", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 35.0073127746582, "t": 497.2061767578125, "r": 216.00064086914062, "b": 466.4394226074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Implement roles and separation of duties", "text": "Implement roles and separation of duties"}, {"self_ref": "#/texts/3", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 34.56448745727539, "t": 443.0459289550781, "r": 202.45404052734375, "b": 412.4388732910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Leverage row permissions on the database", "text": "Leverage row permissions on the database"}, {"self_ref": "#/texts/4", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 35.171409606933594, "t": 389.3459167480469, "r": 195.27529907226562, "b": 358.4383239746094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Protect columns by defining column masks", "text": "Protect columns by defining column masks"}, {"self_ref": "#/texts/5", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 1, "bbox": {"l": 36.894657135009766, "t": 42.1337890625, "r": 164.45849609375, "b": 26.895000457763672, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "ibm.com /redbooks", "text": "ibm.com /redbooks"}, {"self_ref": "#/texts/6", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 497.0279846191406, "t": 218.1163330078125, "r": 581.8246459960938, "b": 92.828369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan", "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"self_ref": "#/texts/7", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 314.70001220703125, "t": 80.49143981933594, "r": 580.52001953125, "b": 18.227041244506836, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "Redpaper", "text": "Redpaper"}, {"self_ref": "#/texts/8", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 2, "bbox": {"l": 64.6857681274414, "t": 718.98193359375, "r": 168.73440551757812, "b": 695.9519653320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "Contents", "text": "Contents", "level": 1}, {"self_ref": "#/texts/9", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 2, "bbox": {"l": 63.751060485839844, "t": 37.30303955078125, "r": 257.24334716796875, "b": 27.8984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/10", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 2, "bbox": {"l": 538.3257446289062, "t": 37.91693115234375, "r": 547.25927734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "iii", "text": "iii"}, {"self_ref": "#/texts/11", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 64.80000305175781, "t": 717.5160522460938, "r": 235.86239624023438, "b": 706.416015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "DB2 for i Center of Excellence", "text": "DB2 for i Center of Excellence"}, {"self_ref": "#/texts/12", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 93.67039489746094, "t": 654.3631591796875, "r": 233.99972534179688, "b": 636.66357421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Solution Brief IBM Systems Lab Services and Training", "text": "Solution Brief IBM Systems Lab Services and Training"}, {"self_ref": "#/texts/13", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 3, "bbox": {"l": 144.19781494140625, "t": 464.93798828125, "r": 188.74681091308594, "b": 454.64495849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Highlights", "text": "Highlights", "level": 1}, {"self_ref": "#/texts/14", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 144.4553985595703, "t": 447.962890625, "r": 242.87388610839844, "b": 433.3105773925781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 532]}], "orig": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/15", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 144.40879821777344, "t": 425.3538513183594, "r": 259.22869873046875, "b": 402.7626953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 876]}], "orig": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/16", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 144.23313903808594, "t": 394.8355407714844, "r": 249.8356170654297, "b": 379.6138916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 672]}], "orig": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/17", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 144.35208129882812, "t": 371.82550048828125, "r": 234.2516326904297, "b": 357.3323669433594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 613]}], "orig": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/18", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 460.8193359375, "t": 653.661376953125, "r": 506.26177978515625, "b": 646.5781860351562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Power Services", "text": "Power Services"}, {"self_ref": "#/texts/19", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 3, "bbox": {"l": 280.07391357421875, "t": 554.2871704101562, "r": 463.8094177246094, "b": 515.3794555664062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "DB2 for i Center of Excellence", "text": "DB2 for i Center of Excellence", "level": 1}, {"self_ref": "#/texts/20", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 279.51953125, "t": 514.842529296875, "r": 483.7276916503906, "b": 503.36505126953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "Expert help to achieve your business requirements", "text": "Expert help to achieve your business requirements"}, {"self_ref": "#/texts/21", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 3, "bbox": {"l": 279.468994140625, "t": 476.9213562011719, "r": 443.375732421875, "b": 467.1043395996094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "We build confident, satisfied clients", "text": "We build confident, satisfied clients", "level": 1}, {"self_ref": "#/texts/22", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 279.530517578125, "t": 464.73529052734375, "r": 488.1546630859375, "b": 446.4922790527344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you.", "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"self_ref": "#/texts/23", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 280.0453186035156, "t": 435.4290466308594, "r": 367.8602294921875, "b": 427.2699890136719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "Because no one else is IBM.", "text": "Because no one else is IBM."}, {"self_ref": "#/texts/24", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 279.70794677734375, "t": 415.73895263671875, "r": 500.321044921875, "b": 366.6907958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 318]}], "orig": "With combined experiences and direct access to development groups, we're the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions.", "text": "With combined experiences and direct access to development groups, we're the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"self_ref": "#/texts/25", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 3, "bbox": {"l": 279.6336669921875, "t": 354.8772277832031, "r": 435.1236572265625, "b": 345.1319274902344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Who we are, some of what we do", "text": "Who we are, some of what we do", "level": 1}, {"self_ref": "#/texts/26", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 279.4736328125, "t": 342.7397766113281, "r": 434.56317138671875, "b": 334.5338134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 46]}], "orig": "Global CoE engagements cover topics including:", "text": "Global CoE engagements cover topics including:"}, {"self_ref": "#/texts/27", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.74200439453125, "t": 323.6339416503906, "r": 402.1675109863281, "b": 315.4241027832031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "r Database performance and scalability", "text": "r Database performance and scalability", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/28", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.7657165527344, "t": 313.35101318359375, "r": 424.9964599609375, "b": 305.21771240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "r Advanced SQL knowledge and skills transfer", "text": "r Advanced SQL knowledge and skills transfer", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/29", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.9660339355469, "t": 302.5164489746094, "r": 392.2996520996094, "b": 294.8087158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "r Business intelligence and analytics", "text": "r Business intelligence and analytics", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/30", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.9432067871094, "t": 292.4297180175781, "r": 339.94354248046875, "b": 284.7392272949219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "r DB2 Web Query", "text": "r DB2 Web Query", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/31", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.68328857421875, "t": 282.5703125, "r": 504.21795654296875, "b": 274.50201416015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "r Query/400 modernization for better reporting and analysis capabilities", "text": "r Query/400 modernization for better reporting and analysis capabilities", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/32", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.66998291015625, "t": 271.96844482421875, "r": 423.002197265625, "b": 263.96942138671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "r Database modernization and re-engineering", "text": "r Database modernization and re-engineering", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/33", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.7203674316406, "t": 262.03643798828125, "r": 400.07391357421875, "b": 254.12164306640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "r Data-centric architecture and design", "text": "r Data-centric architecture and design", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/34", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.7815856933594, "t": 252.1336669921875, "r": 467.2125549316406, "b": 244.1992645263672, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "r Extremely large database and overcoming limits to growth", "text": "r Extremely large database and overcoming limits to growth", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/35", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 3, "bbox": {"l": 279.89080810546875, "t": 241.97698974609375, "r": 382.3631591796875, "b": 234.0165557861328, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "r ISV education and enablement", "text": "r ISV education and enablement", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/36", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 4, "bbox": {"l": 64.80000305175781, "t": 718.8968505859375, "r": 151.46160888671875, "b": 695.9519653320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Preface", "text": "Preface", "level": 1}, {"self_ref": "#/texts/37", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 135.75503540039062, "t": 660.085693359375, "r": 547.3082275390625, "b": 590.1392822265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 469]}], "orig": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"self_ref": "#/texts/38", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 135.94647216796875, "t": 577.9362182617188, "r": 546.4656982421875, "b": 531.8143310546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 309]}], "orig": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"self_ref": "#/texts/39", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 135.71319580078125, "t": 472.1881408691406, "r": 547.2366943359375, "b": 449.8482971191406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 172]}], "orig": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"self_ref": "#/texts/40", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 4, "bbox": {"l": 63.724002838134766, "t": 37.29620361328125, "r": 257.24334716796875, "b": 27.89178466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/41", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 4, "bbox": {"l": 538.058349609375, "t": 37.60198974609375, "r": 547.2503051757812, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "xi", "text": "xi"}, {"self_ref": "#/texts/42", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 262.6522521972656, "t": 417.312744140625, "r": 541.2507934570312, "b": 275.06854248046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 684]}], "orig": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office.", "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"self_ref": "#/texts/43", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 262.4736328125, "t": 265.49169921875, "r": 541.2737426757812, "b": 111.162841796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 726]}], "orig": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com .", "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"self_ref": "#/texts/44", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 4, "bbox": {"l": 64.22550201416016, "t": 504.8105773925781, "r": 125.36660766601562, "b": 488.9364013671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Authors", "text": "Authors", "level": 1}, {"self_ref": "#/texts/45", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 5, "bbox": {"l": 81.0, "t": 523.457275390625, "r": 115.13253021240234, "b": 517.019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Chapter 1.", "text": "Chapter 1."}, {"self_ref": "#/texts/46", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 5, "bbox": {"l": 500.3999938964844, "t": 699.3392333984375, "r": 522.6177368164062, "b": 661.8682861328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/47", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 5, "bbox": {"l": 136.68006896972656, "t": 538.7101440429688, "r": 547.3047485351562, "b": 482.1217956542969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Securing and protecting IBM DB2 data", "text": "Securing and protecting IBM DB2 data", "level": 1}, {"self_ref": "#/texts/48", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 5, "bbox": {"l": 136.15219116210938, "t": 444.024658203125, "r": 547.2540283203125, "b": 361.62640380859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 648]}], "orig": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record.", "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"self_ref": "#/texts/49", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 5, "bbox": {"l": 136.05917358398438, "t": 349.8846435546875, "r": 527.206298828125, "b": 303.55853271484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 304]}], "orig": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement.", "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"self_ref": "#/texts/50", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 5, "bbox": {"l": 135.5961456298828, "t": 291.9596862792969, "r": 547.1551513671875, "b": 270.1002197265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:", "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"self_ref": "#/texts/51", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 5, "bbox": {"l": 135.86915588378906, "t": 263.29638671875, "r": 250.23167419433594, "b": 252.9566650390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "GLYPH Security fundamentals", "text": "GLYPH Security fundamentals", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/52", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 5, "bbox": {"l": 135.742431640625, "t": 251.2857666015625, "r": 282.98114013671875, "b": 240.626708984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 47]}], "orig": "GLYPH Current state of IBM i security", "text": "GLYPH Current state of IBM i security", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/53", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 5, "bbox": {"l": 135.86570739746094, "t": 239.55108642578125, "r": 264.8818664550781, "b": 229.06103515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "GLYPH DB2 for i security controls", "text": "GLYPH DB2 for i security controls", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/54", "parent": {"cref": "#/body"}, "children": [], "label": "footnote", "prov": [{"page_no": 5, "bbox": {"l": 135.7418975830078, "t": 75.71832275390625, "r": 258.362548828125, "b": 66.45916748046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "$^{1 }$http://www.idtheftcenter.org", "text": "$^{1 }$http://www.idtheftcenter.org"}, {"self_ref": "#/texts/55", "parent": {"cref": "#/body"}, "children": [], "label": "footnote", "prov": [{"page_no": 5, "bbox": {"l": 136.19522094726562, "t": 66.703857421875, "r": 234.42526245117188, "b": 56.73187255859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "$^{2 }$http://www.ponemon.org /", "text": "$^{2 }$http://www.ponemon.org /"}, {"self_ref": "#/texts/56", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 5, "bbox": {"l": 63.68400573730469, "t": 37.3408203125, "r": 257.24334716796875, "b": 27.85699462890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "' Copyright IBM Corp. 2014. All rights reserved.", "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"self_ref": "#/texts/57", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 5, "bbox": {"l": 541.2396240234375, "t": 37.7130126953125, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/58", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 6, "bbox": {"l": 64.33735656738281, "t": 718.60302734375, "r": 267.40582275390625, "b": 702.3842163085938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 25]}], "orig": "1.1 Security fundamentals", "text": "1.1 Security fundamentals", "level": 1}, {"self_ref": "#/texts/59", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 136.23556518554688, "t": 685.97265625, "r": 545.0048217773438, "b": 664.178466796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 133]}], "orig": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:", "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"self_ref": "#/texts/60", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 6, "bbox": {"l": 135.66490173339844, "t": 657.3309326171875, "r": 547.1642456054688, "b": 610.8453369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 361]}], "orig": "GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability.", "text": "GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/61", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 6, "bbox": {"l": 150.2132110595703, "t": 604.0206298828125, "r": 547.2608642578125, "b": 521.4625244140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 587]}], "orig": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured.", "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/62", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 150.1995086669922, "t": 515.2373657226562, "r": 541.9920043945312, "b": 504.9290466308594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 90]}], "orig": "A security policy is what defines whether the system and its settings are secure (or not).", "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"self_ref": "#/texts/63", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 6, "bbox": {"l": 135.4777374267578, "t": 498.18560791015625, "r": 547.1582641601562, "b": 415.4546203613281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 573]}], "orig": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets.", "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/64", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 135.90879821777344, "t": 403.87713623046875, "r": 535.3616943359375, "b": 381.6918640136719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 179]}], "orig": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i.", "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"self_ref": "#/texts/65", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 6, "bbox": {"l": 64.44733428955078, "t": 354.5881042480469, "r": 323.3839111328125, "b": 338.3087158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "1.2 Current state of IBM i security", "text": "1.2 Current state of IBM i security", "level": 1}, {"self_ref": "#/texts/66", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 136.1368408203125, "t": 322.23028564453125, "r": 547.3182373046875, "b": 275.52197265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 306]}], "orig": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE.", "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"self_ref": "#/texts/67", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 135.79974365234375, "t": 264.12274169921875, "r": 547.284423828125, "b": 206.1400604248047, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 405]}], "orig": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data.", "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data."}, {"self_ref": "#/texts/68", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 135.8997802734375, "t": 193.8753662109375, "r": 547.2832641601562, "b": 111.57879638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 640]}], "orig": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data.", "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}, {"self_ref": "#/texts/69", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 6, "bbox": {"l": 63.92394256591797, "t": 37.713134765625, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "2", "text": "2"}, {"self_ref": "#/texts/70", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 6, "bbox": {"l": 87.81553649902344, "t": 37.31463623046875, "r": 328.7253723144531, "b": 28.03179931640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/71", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 7, "bbox": {"l": 64.09014129638672, "t": 37.92034912109375, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "4", "text": "4"}, {"self_ref": "#/texts/72", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 7, "bbox": {"l": 87.84030151367188, "t": 37.3697509765625, "r": 328.7253723144531, "b": 28.01824951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/73", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 7, "bbox": {"l": 135.9996337890625, "t": 721.3639526367188, "r": 544.3033447265625, "b": 638.906982421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 589]}], "orig": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage.", "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"self_ref": "#/texts/74", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 7, "bbox": {"l": 64.4480209350586, "t": 619.7714233398438, "r": 301.4690246582031, "b": 606.2725830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "1.3.1 Existing row and column control", "text": "1.3.1 Existing row and column control", "level": 1}, {"self_ref": "#/texts/75", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 7, "bbox": {"l": 135.77957153320312, "t": 593.479248046875, "r": 541.5673828125, "b": 534.8919677734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 377]}], "orig": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator.", "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"self_ref": "#/texts/76", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 7, "bbox": {"l": 135.9119110107422, "t": 523.368896484375, "r": 547.4407958984375, "b": 477.10101318359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 340]}], "orig": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases.", "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"self_ref": "#/texts/77", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 7, "bbox": {"l": 136.0379638671875, "t": 465.39056396484375, "r": 547.232666015625, "b": 430.80120849609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 247]}], "orig": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view.", "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"self_ref": "#/texts/78", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 7, "bbox": {"l": 136.23910522460938, "t": 101.11260986328125, "r": 317.073486328125, "b": 91.83807373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "Figure 1-2 Existing row and column controls", "text": "Figure 1-2 Existing row and column controls"}, {"self_ref": "#/texts/79", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 8, "bbox": {"l": 64.09011840820312, "t": 721.8206787109375, "r": 335.4955139160156, "b": 708.0057373046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "2.1.6 Change Function Usage CL command", "text": "2.1.6 Change Function Usage CL command", "level": 1}, {"self_ref": "#/texts/80", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 135.83584594726562, "t": 695.3712768554688, "r": 547.284423828125, "b": 684.7753295898438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 90]}], "orig": "The following CL commands can be used to work with, display, or change function usage IDs:", "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"self_ref": "#/texts/81", "parent": {"cref": "#/groups/5"}, "children": [], "label": "list_item", "prov": [{"page_no": 8, "bbox": {"l": 135.6907196044922, "t": 678.259765625, "r": 301.5174865722656, "b": 667.4461669921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "GLYPH Work Function Usage ( WRKFCNUSG )", "text": "GLYPH Work Function Usage ( WRKFCNUSG )", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/82", "parent": {"cref": "#/groups/5"}, "children": [], "label": "list_item", "prov": [{"page_no": 8, "bbox": {"l": 135.7242889404297, "t": 666.0692138671875, "r": 313.39776611328125, "b": 655.3120727539062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "GLYPH Change Function Usage ( CHGFCNUSG )", "text": "GLYPH Change Function Usage ( CHGFCNUSG )", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/83", "parent": {"cref": "#/groups/5"}, "children": [], "label": "list_item", "prov": [{"page_no": 8, "bbox": {"l": 135.71124267578125, "t": 654.0370483398438, "r": 310.8171081542969, "b": 643.400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "GLYPH Display Function Usage ( DSPFCNUSG )", "text": "GLYPH Display Function Usage ( DSPFCNUSG )", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/84", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 136.30247497558594, "t": 632.781494140625, "r": 512.5380249023438, "b": 610.2994995117188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 126]}], "orig": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:", "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"self_ref": "#/texts/85", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 136.3306427001953, "t": 604.0092163085938, "r": 441.59686279296875, "b": 593.1199951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"self_ref": "#/texts/86", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 8, "bbox": {"l": 63.9356689453125, "t": 573.8617553710938, "r": 544.4754638671875, "b": 559.875732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "level": 1}, {"self_ref": "#/texts/87", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 135.84828186035156, "t": 547.4229736328125, "r": 519.5179443359375, "b": 525.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 130]}], "orig": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view.", "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"self_ref": "#/texts/88", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 8, "bbox": {"l": 136.8000030517578, "t": 513.490478515625, "r": 284.9328308105469, "b": 504.11700439453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Table 2-1 FUNCTION_USAGE view", "text": "Table 2-1 FUNCTION_USAGE view"}, {"self_ref": "#/texts/89", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 135.81077575683594, "t": 340.671142578125, "r": 547.2803955078125, "b": 318.2784729003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 112]}], "orig": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1.", "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"self_ref": "#/texts/90", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 8, "bbox": {"l": 136.28225708007812, "t": 306.23565673828125, "r": 462.98095703125, "b": 296.11798095703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 74]}], "orig": "Example 2-1 Query to determine who has authority to define and manage RCAC", "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"self_ref": "#/texts/91", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 136.8000030517578, "t": 288.34197998046875, "r": 331.67730712890625, "b": 207.56837463378906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name;", "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name;"}, {"self_ref": "#/texts/92", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 8, "bbox": {"l": 64.18024444580078, "t": 172.6075439453125, "r": 249.59605407714844, "b": 156.3486328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "2.2 Separation of duties", "text": "2.2 Separation of duties", "level": 1}, {"self_ref": "#/texts/93", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 136.1588592529297, "t": 140.1129150390625, "r": 547.2234497070312, "b": 81.817626953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 463]}], "orig": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"self_ref": "#/texts/94", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 8, "bbox": {"l": 64.4488525390625, "t": 37.581298828125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "10", "text": "10"}, {"self_ref": "#/texts/95", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 8, "bbox": {"l": 93.35774993896484, "t": 37.31072998046875, "r": 334.4214172363281, "b": 28.04144287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/96", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 135.92747497558594, "t": 721.3446044921875, "r": 542.6943359375, "b": 650.9638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 516]}], "orig": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security.", "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security."}, {"self_ref": "#/texts/97", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 136.04833984375, "t": 639.4869384765625, "r": 547.303955078125, "b": 593.2598266601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table.", "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"self_ref": "#/texts/98", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 136.00685119628906, "t": 581.5885009765625, "r": 538.6507568359375, "b": 558.9195556640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 129]}], "orig": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group.", "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"self_ref": "#/texts/99", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 135.68702697753906, "t": 547.4618530273438, "r": 545.7960205078125, "b": 513.281005859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 204]}], "orig": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table.", "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"self_ref": "#/texts/100", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 135.86065673828125, "t": 501.3948669433594, "r": 539.80712890625, "b": 455.2619934082031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 285]}], "orig": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself.", "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"self_ref": "#/texts/101", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 135.7205352783203, "t": 443.39068603515625, "r": 543.067138671875, "b": 421.3023681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools.", "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"self_ref": "#/texts/102", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 9, "bbox": {"l": 64.80000305175781, "t": 409.4712829589844, "r": 392.4624328613281, "b": 399.74505615234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"self_ref": "#/texts/103", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 9, "bbox": {"l": 354.4815673828125, "t": 37.05841064453125, "r": 523.5407104492188, "b": 27.89447021484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 41]}], "orig": "Chapter 2. Roles and separation of duties", "text": "Chapter 2. Roles and separation of duties"}, {"self_ref": "#/texts/104", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 9, "bbox": {"l": 536.0808715820312, "t": 37.7674560546875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "11", "text": "11"}, {"self_ref": "#/texts/105", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 10, "bbox": {"l": 135.73501586914062, "t": 721.5136108398438, "r": 528.7305908203125, "b": 699.0009765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 135]}], "orig": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.", "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"self_ref": "#/texts/106", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 10, "bbox": {"l": 136.3166961669922, "t": 378.73248291015625, "r": 342.55548095703125, "b": 369.1156921386719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Figure 3-1 CREATE PERMISSION SQL statement", "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"self_ref": "#/texts/107", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 10, "bbox": {"l": 136.24984741210938, "t": 353.2656555175781, "r": 215.88082885742188, "b": 340.95599365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Column mask", "text": "Column mask", "level": 1}, {"self_ref": "#/texts/108", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 135.803466796875, "t": 338.0789489746094, "r": 542.7664794921875, "b": 291.6988525390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 297]}], "orig": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number.", "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"self_ref": "#/texts/109", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 10, "bbox": {"l": 344.5666809082031, "t": 37.281982421875, "r": 523.6016235351562, "b": 27.9176025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/110", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 10, "bbox": {"l": 536.0999755859375, "t": 37.689697265625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "15", "text": "15"}, {"self_ref": "#/texts/111", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 11, "bbox": {"l": 135.82176208496094, "t": 721.317138671875, "r": 412.20758056640625, "b": 711.1845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "Table 3-1 summarizes these special registers and their values.", "text": "Table 3-1 summarizes these special registers and their values."}, {"self_ref": "#/texts/112", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 11, "bbox": {"l": 136.8000030517578, "t": 699.2779541015625, "r": 372.7710876464844, "b": 690.0601806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "Table 3-1 Special registers and their corresponding values", "text": "Table 3-1 Special registers and their corresponding values"}, {"self_ref": "#/texts/113", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 136.3730926513672, "t": 578.6343383789062, "r": 538.493896484375, "b": 556.2984619140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:", "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"self_ref": "#/texts/114", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.5663299560547, "t": 549.454345703125, "r": 411.36138916015625, "b": 539.2213134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "GLYPH A user connects to the server using the user profile ALICE.", "text": "GLYPH A user connects to the server using the user profile ALICE.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/115", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.5452880859375, "t": 532.7073974609375, "r": 453.2580871582031, "b": 522.2791137695312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "GLYPH USER and CURRENT USER initially have the same value of ALICE.", "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/116", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.3970947265625, "t": 515.4821166992188, "r": 541.4498291015625, "b": 493.01019287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 160]}], "orig": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called.", "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/117", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.5677947998047, "t": 486.18145751953125, "r": 547.2167358398438, "b": 451.4921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 253]}], "orig": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority.", "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/118", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.56973266601562, "t": 445.5053405761719, "r": 547.3540649414062, "b": 423.0643615722656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 133]}], "orig": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE.", "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/119", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 11, "bbox": {"l": 136.22442626953125, "t": 195.81939697265625, "r": 342.349853515625, "b": 186.25537109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "Figure 3-5 Special registers and adopted authority", "text": "Figure 3-5 Special registers and adopted authority"}, {"self_ref": "#/texts/120", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 11, "bbox": {"l": 64.079833984375, "t": 167.67864990234375, "r": 247.02536010742188, "b": 154.15521240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "3.2.2 Built-in global variables", "text": "3.2.2 Built-in global variables", "level": 1}, {"self_ref": "#/texts/121", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 136.3346710205078, "t": 141.24090576171875, "r": 518.0011596679688, "b": 119.0784683227539, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 161]}], "orig": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables.", "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"self_ref": "#/texts/122", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 136.17970275878906, "t": 107.37139892578125, "r": 532.3385009765625, "b": 72.93243408203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 233]}], "orig": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic.", "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"self_ref": "#/texts/123", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 11, "bbox": {"l": 344.5751037597656, "t": 37.29559326171875, "r": 523.6016235351562, "b": 27.93109130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/124", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 11, "bbox": {"l": 536.0416870117188, "t": 37.7122802734375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "19", "text": "19"}, {"self_ref": "#/texts/125", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 12, "bbox": {"l": 63.85088348388672, "t": 37.62542724609375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "20", "text": "20"}, {"self_ref": "#/texts/126", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 12, "bbox": {"l": 93.31550598144531, "t": 37.3028564453125, "r": 334.4214172363281, "b": 28.02935791015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/127", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 135.74647521972656, "t": 721.3251953125, "r": 342.5477294921875, "b": 711.1533813476562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Table 3-2 lists the nine built-in global variables.", "text": "Table 3-2 lists the nine built-in global variables."}, {"self_ref": "#/texts/128", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 12, "bbox": {"l": 64.80000305175781, "t": 699.1653442382812, "r": 201.82247924804688, "b": 690.177001953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Table 3-2 Built-in global variables", "text": "Table 3-2 Built-in global variables"}, {"self_ref": "#/texts/129", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 12, "bbox": {"l": 64.34713745117188, "t": 471.380859375, "r": 384.3638916015625, "b": 455.0362854003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "3.3 VERIFY_GROUP_FOR_USER function", "text": "3.3 VERIFY_GROUP_FOR_USER function", "level": 1}, {"self_ref": "#/texts/130", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 135.8567352294922, "t": 438.1376037597656, "r": 547.2347412109375, "b": 355.704833984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 576]}], "orig": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error.", "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"self_ref": "#/texts/131", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 136.01950073242188, "t": 344.5970458984375, "r": 547.2573852539062, "b": 310.2999572753906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 235]}], "orig": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value.", "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"self_ref": "#/texts/132", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 136.42428588867188, "t": 298.8746337890625, "r": 458.44525146484375, "b": 288.2803955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"self_ref": "#/texts/133", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 12, "bbox": {"l": 136.80001831054688, "t": 281.4947204589844, "r": 406.0775146484375, "b": 271.2408142089844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "1. There are user profiles for MGR, JANE, JUDY, and TONY.", "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/134", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 12, "bbox": {"l": 135.8521728515625, "t": 264.1617431640625, "r": 396.9881591796875, "b": 253.80572509765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "2. The user profile JANE specifies a group profile of MGR.", "text": "2. The user profile JANE specifies a group profile of MGR.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/135", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 12, "bbox": {"l": 136.08595275878906, "t": 247.357666015625, "r": 536.568603515625, "b": 225.28138732910156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:", "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/136", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 12, "bbox": {"l": 149.8811798095703, "t": 217.68408203125, "r": 451.01605224609375, "b": 150.09063720703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"self_ref": "#/texts/137", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 136.79959106445312, "t": 720.341552734375, "r": 166.73934936523438, "b": 699.5669555664062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "RETURN CASE", "text": "RETURN CASE"}, {"self_ref": "#/texts/138", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 13, "bbox": {"l": 136.79959106445312, "t": 700.2308349609375, "r": 521.5742797851562, "b": 530.429443359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 437]}], "orig": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;", "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"self_ref": "#/texts/139", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 135.86044311523438, "t": 517.5462646484375, "r": 547.2122192382812, "b": 495.22808837890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:", "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/140", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 151.1599578857422, "t": 488.6722717285156, "r": 469.1528015136719, "b": 478.3014831542969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "-Human Resources can see the unmasked TAX_ID of the employees.", "text": "-Human Resources can see the unmasked TAX_ID of the employees.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/141", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 151.2740936279297, "t": 471.45074462890625, "r": 403.95953369140625, "b": 461.1424560546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "-Employees can see only their own unmasked TAX_ID.", "text": "-Employees can see only their own unmasked TAX_ID.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/142", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 151.4427947998047, "t": 454.6841735839844, "r": 545.16845703125, "b": 432.28228759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 129]}], "orig": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234).", "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234).", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/143", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 151.51747131347656, "t": 425.3660888671875, "r": 529.463623046875, "b": 414.8310852050781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/144", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 150.69093322753906, "t": 408.19866943359375, "r": 530.060302734375, "b": 397.82440185546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "orig": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/145", "parent": {"cref": "#/body"}, "children": [], "label": "paragraph", "prov": [{"page_no": 13, "bbox": {"l": 136.25662231445312, "t": 386.553955078125, "r": 352.31475830078125, "b": 376.9618835449219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Example 3-9 Creating a mask on the TAX_ID column", "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"self_ref": "#/texts/146", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 13, "bbox": {"l": 135.95343017578125, "t": 373.4818115234375, "r": 535.87548828125, "b": 103.45672607421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 590]}], "orig": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;", "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}, {"self_ref": "#/texts/147", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 13, "bbox": {"l": 344.5617370605469, "t": 37.32916259765625, "r": 523.6016235351562, "b": 27.86419677734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Chapter 3. Row and Column Access Control", "text": "Chapter 3. Row and Column Access Control"}, {"self_ref": "#/texts/148", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 13, "bbox": {"l": 535.6422729492188, "t": 37.82464599609375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "27", "text": "27"}, {"self_ref": "#/texts/149", "parent": {"cref": "#/groups/9"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 136.14459228515625, "t": 721.3890380859375, "r": 449.952392578125, "b": 710.7732543945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/150", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 14, "bbox": {"l": 64.17350769042969, "t": 619.2543334960938, "r": 294.42578125, "b": 610.1016235351562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Figure 3-10 Column masks shown in System i Navigator", "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"self_ref": "#/texts/151", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 14, "bbox": {"l": 64.29059600830078, "t": 590.3381958007812, "r": 203.98521423339844, "b": 577.004638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "3.6.6 Activating RCAC", "text": "3.6.6 Activating RCAC", "level": 1}, {"self_ref": "#/texts/152", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 136.1686553955078, "t": 563.902587890625, "r": 547.2256469726562, "b": 529.5360107421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"self_ref": "#/texts/153", "parent": {"cref": "#/groups/10"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 136.5933074951172, "t": 523.4700317382812, "r": 409.4788818359375, "b": 513.1278076171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "1. Run the SQL statements that are shown in Example 3-10.", "text": "1. Run the SQL statements that are shown in Example 3-10.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/154", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 14, "bbox": {"l": 136.31597900390625, "t": 501.5721435546875, "r": 375.2909851074219, "b": 491.5029296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 51]}], "orig": "Example 3-10 Activating RCAC on the EMPLOYEES table", "text": "Example 3-10 Activating RCAC on the EMPLOYEES table", "level": 1}, {"self_ref": "#/texts/155", "parent": {"cref": "#/groups/11"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.7803192138672, "t": 484.90777587890625, "r": 376.6766052246094, "b": 473.9972839355469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "/* Active Row Access Control (permissions) */", "text": "/* Active Row Access Control (permissions) */", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/156", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 136.8000030517578, "t": 471.3420715332031, "r": 354.86962890625, "b": 426.5678405761719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 131]}], "orig": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;", "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"self_ref": "#/texts/157", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 365.77313232421875, "t": 471.3420715332031, "r": 376.6766052246094, "b": 462.5672912597656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "*/", "text": "*/"}, {"self_ref": "#/texts/158", "parent": {"cref": "#/groups/12"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.87640380859375, "t": 412.6735534667969, "r": 540.8014526367188, "b": 378.27978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 231]}], "orig": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition .", "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition .", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/159", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 14, "bbox": {"l": 64.33819580078125, "t": 143.758056640625, "r": 348.354736328125, "b": 134.59954833984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"self_ref": "#/texts/160", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 14, "bbox": {"l": 63.84088897705078, "t": 37.61041259765625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "28", "text": "28"}, {"self_ref": "#/texts/161", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 14, "bbox": {"l": 93.28304290771484, "t": 37.27587890625, "r": 334.4214172363281, "b": 28.056396484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/162", "parent": {"cref": "#/groups/13"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 136.00341796875, "t": 721.5369873046875, "r": 514.048583984375, "b": 687.1716918945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 228]}], "orig": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause.", "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/163", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 15, "bbox": {"l": 135.9990692138672, "t": 311.7919921875, "r": 327.9913635253906, "b": 302.78125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "Figure 4-68 Visual Explain with RCAC enabled", "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"self_ref": "#/texts/164", "parent": {"cref": "#/groups/14"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 136.2928924560547, "t": 286.0349426269531, "r": 547.2394409179688, "b": 251.98651123046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause.", "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/165", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 15, "bbox": {"l": 64.35660552978516, "t": 125.32025146484375, "r": 227.347412109375, "b": 116.0611572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Figure 4-69 Index advice with no RCAC", "text": "Figure 4-69 Index advice with no RCAC"}, {"self_ref": "#/texts/166", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 15, "bbox": {"l": 214.30316162109375, "t": 37.2801513671875, "r": 523.5935668945312, "b": 27.9913330078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Chapter 4. Implementing Row and Column Access Control: Banking example", "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"self_ref": "#/texts/167", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 15, "bbox": {"l": 535.3654174804688, "t": 37.719970703125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "77", "text": "77"}, {"self_ref": "#/texts/168", "parent": {"cref": "#/body"}, "children": [], "label": "code", "prov": [{"page_no": 16, "bbox": {"l": 62.60613250732422, "t": 722.6401977539062, "r": 500.697265625, "b": 84.2364501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1998]}], "orig": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;", "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}, {"self_ref": "#/texts/169", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 16, "bbox": {"l": 64.50080871582031, "t": 37.46612548828125, "r": 83.98200225830078, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 3]}], "orig": "124", "text": "124"}, {"self_ref": "#/texts/170", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 16, "bbox": {"l": 98.63966369628906, "t": 37.28564453125, "r": 339.882080078125, "b": 27.98992919921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"self_ref": "#/texts/171", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 287.2200012207031, "t": 763.4519653320312, "r": 414.24481201171875, "b": 741.251953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Back cover", "text": "Back cover"}, {"self_ref": "#/texts/172", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 18, "bbox": {"l": 26.454715728759766, "t": 720.362060546875, "r": 447.3600158691406, "b": 650.9618530273438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Row and Column Access Control Support in IBM DB2 for i", "text": "Row and Column Access Control Support in IBM DB2 for i", "level": 1}, {"self_ref": "#/texts/173", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 26.35322380065918, "t": 551.0213623046875, "r": 127.443603515625, "b": 524.7881469726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Implement roles and separation of duties", "text": "Implement roles and separation of duties"}, {"self_ref": "#/texts/174", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 26.22105598449707, "t": 508.2904052734375, "r": 120.283203125, "b": 469.1280212402344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Leverage row permissions on the database", "text": "Leverage row permissions on the database"}, {"self_ref": "#/texts/175", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 26.226221084594727, "t": 452.88134765625, "r": 121.44960021972656, "b": 413.14801025390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "Protect columns by defining column masks", "text": "Protect columns by defining column masks"}, {"self_ref": "#/texts/176", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 152.25205993652344, "t": 550.1506958007812, "r": 414.084228515625, "b": 468.4081115722656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 464]}], "orig": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.", "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"self_ref": "#/texts/177", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 152.3572540283203, "t": 461.4716796875, "r": 414.173828125, "b": 403.090087890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 309]}], "orig": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.", "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"self_ref": "#/texts/178", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 18, "bbox": {"l": 170.78512573242188, "t": 161.494140625, "r": 232.11270141601562, "b": 152.3369903564453, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "REDP-5110-00", "text": "REDP-5110-00"}, {"self_ref": "#/texts/179", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 466.3692626953125, "t": 544.606201171875, "r": 559.809326171875, "b": 489.8393859863281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION", "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"self_ref": "#/texts/180", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 466.3262939453125, "t": 440.5700988769531, "r": 587.38916015625, "b": 405.52801513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE", "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"self_ref": "#/texts/181", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 466.1037292480469, "t": 393.18768310546875, "r": 587.5205078125, "b": 250.36593627929688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 323]}], "orig": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment.", "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"self_ref": "#/texts/182", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 466.66748046875, "t": 214.11181640625, "r": 571.0052490234375, "b": 190.48809814453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "For more information: ibm.com /redbooks", "text": "For more information: ibm.com /redbooks"}], "pictures": [{"self_ref": "#/pictures/0", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 1, "bbox": {"l": 513.4560546875, "t": 765.9149169921875, "r": 586.1583251953125, "b": 737.1808471679688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/1", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 3, "bbox": {"l": 143.39866638183594, "t": 521.7388916015625, "r": 179.56256103515625, "b": 506.378662109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/2", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 3, "bbox": {"l": 64.16704559326172, "t": 188.49365234375, "r": 258.77435302734375, "b": 103.87176513671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/3", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 4, "bbox": {"l": 142.52883911132812, "t": 416.9550476074219, "r": 251.47850036621094, "b": 288.79351806640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/4", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 4, "bbox": {"l": 145.41448974609375, "t": 264.7552490234375, "r": 252.08840942382812, "b": 156.616943359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/5", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 5, "bbox": {"l": 32.05508804321289, "t": 721.5736083984375, "r": 239.62692260742188, "b": 553.958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/6", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 7, "bbox": {"l": 135.92466735839844, "t": 416.0727844238281, "r": 546.4456176757812, "b": 103.39019775390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "captions": [{"cref": "#/texts/78"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/7", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 10, "bbox": {"l": 135.9717559814453, "t": 684.5892944335938, "r": 545.4180908203125, "b": 381.39068603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 177]}], "captions": [{"cref": "#/texts/105"}, {"cref": "#/texts/106"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/8", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 11, "bbox": {"l": 135.64837646484375, "t": 407.8262939453125, "r": 301.2367248535156, "b": 197.24334716796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "captions": [{"cref": "#/texts/119"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/9", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 14, "bbox": {"l": 63.801902770996094, "t": 696.6175537109375, "r": 547.11474609375, "b": 621.9678955078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "captions": [{"cref": "#/texts/150"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/10", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 14, "bbox": {"l": 63.98516845703125, "t": 364.0950012207031, "r": 530.0479125976562, "b": 145.86041259765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "captions": [{"cref": "#/texts/159"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/11", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 15, "bbox": {"l": 136.5016632080078, "t": 672.7508544921875, "r": 545.4508666992188, "b": 314.4587707519531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "captions": [{"cref": "#/texts/163"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/12", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 15, "bbox": {"l": 64.27847290039062, "t": 238.41864013671875, "r": 506.39263916015625, "b": 127.9129638671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "captions": [{"cref": "#/texts/165"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/13", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 18, "bbox": {"l": 485.1698303222656, "t": 766.7407836914062, "r": 566.2962036132812, "b": 737.3182983398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/14", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 18, "bbox": {"l": 474.35540771484375, "t": 711.9486694335938, "r": 592.2726440429688, "b": 602.1873779296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}], "tables": [{"self_ref": "#/tables/0", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 2, "bbox": {"l": 136.15103149414062, "t": 659.9697265625, "r": 549.8472290039062, "b": 76.34722900390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 136.8000030517578, "t": 659.3513793945312, "r": 172.89404296875, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01951599121094, "t": 659.3513793945312, "r": 547.1898193359375, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901123046875, "t": 646.8715209960938, "r": 189.86537170410156, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.3968505859375, "t": 646.8715209960938, "r": 547.182861328125, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901123046875, "t": 624.3718872070312, "r": 279.3973083496094, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.6194152832031, "t": 624.3718872070312, "r": 547.1907958984375, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901123046875, "t": 601.8722534179688, "r": 172.84423828125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852416992188, "t": 601.8722534179688, "r": 547.182861328125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803466796875, "t": 589.3923950195312, "r": 547.1808471679688, "b": 580.1793823242188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803466796875, "t": 576.852783203125, "r": 339.18292236328125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.714111328125, "t": 576.852783203125, "r": 547.1387939453125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803466796875, "t": 564.3729248046875, "r": 529.9950561523438, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5494995117188, "t": 564.3729248046875, "r": 547.1978759765625, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 551.89306640625, "r": 284.0286560058594, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449462890625, "t": 551.89306640625, "r": 547.1211547851562, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 529.3934326171875, "r": 536.0958862304688, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6468505859375, "t": 529.3934326171875, "r": 547.1978149414062, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808044433594, "t": 517.3936157226562, "r": 549.8472290039062, "b": 508.18060302734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 504.85394287109375, "r": 536.1293334960938, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6611328125, "t": 504.85394287109375, "r": 547.19287109375, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79806518554688, "t": 492.3740539550781, "r": 549.8472290039062, "b": 483.16107177734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 479.8941650390625, "r": 536.0551147460938, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015014648438, "t": 479.8941650390625, "r": 547.14794921875, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 467.3545227050781, "r": 536.080078125, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.635498046875, "t": 467.3545227050781, "r": 547.19091796875, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7970428466797, "t": 444.8548889160156, "r": 536.0908813476562, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.642822265625, "t": 444.8548889160156, "r": 547.1947631835938, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7970428466797, "t": 432.8550720214844, "r": 536.1271362304688, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6658935546875, "t": 432.8550720214844, "r": 547.2047119140625, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 420.37518310546875, "r": 535.9526977539062, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5558471679688, "t": 420.37518310546875, "r": 547.1590576171875, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 407.8952941894531, "r": 536.0410766601562, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.595947265625, "t": 407.8952941894531, "r": 547.1508178710938, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 395.35565185546875, "r": 536.0748901367188, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6302490234375, "t": 395.35565185546875, "r": 547.1856079101562, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 382.8757629394531, "r": 411.2704772949219, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.8177490234375, "t": 382.8757629394531, "r": 547.1786499023438, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 370.3958740234375, "r": 536.035888671875, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5989379882812, "t": 370.3958740234375, "r": 547.1619262695312, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 357.8562316894531, "r": 530.5731811523438, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1044311523438, "t": 357.8562316894531, "r": 547.1668701171875, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19720458984375, "t": 345.3763427734375, "r": 530.5352172851562, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755004882812, "t": 345.3763427734375, "r": 547.156005859375, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.7970428466797, "t": 332.8964538574219, "r": 547.256591796875, "b": 323.6834716796875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 310.3968200683594, "r": 530.5396118164062, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0916748046875, "t": 310.3968200683594, "r": 547.19580078125, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 298.3970031738281, "r": 530.4808959960938, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248046875, "t": 298.3970031738281, "r": 547.1657104492188, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 285.85736083984375, "r": 378.2078552246094, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713134765625, "t": 285.85736083984375, "r": 547.15576171875, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 273.3774719238281, "r": 530.4347534179688, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9962158203125, "t": 273.3774719238281, "r": 547.1190795898438, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 260.83782958984375, "r": 530.528076171875, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0670166015625, "t": 260.83782958984375, "r": 547.1448364257812, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 248.3579559326172, "r": 530.4978637695312, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0518798828125, "t": 248.3579559326172, "r": 547.159912109375, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1971893310547, "t": 235.87808227539062, "r": 530.5602416992188, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912109375, "t": 235.87808227539062, "r": 547.1768798828125, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 223.33843994140625, "r": 530.5302734375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0615234375, "t": 223.33843994140625, "r": 547.1240234375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79702758789062, "t": 210.8585662841797, "r": 530.6299438476562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1631469726562, "t": 210.8585662841797, "r": 547.2295532226562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.3206481933594, "t": 198.37869262695312, "r": 547.10009765625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701232910156, "t": 198.37869262695312, "r": 394.78179931640625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 173.3591766357422, "r": 530.4913940429688, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0463256835938, "t": 173.3591766357422, "r": 547.1561889648438, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 160.87930297851562, "r": 530.5645751953125, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0960083007812, "t": 160.87930297851562, "r": 547.1587524414062, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 148.33966064453125, "r": 530.5569458007812, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0881958007812, "t": 148.33966064453125, "r": 547.1507568359375, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 135.8597869873047, "r": 530.5341186523438, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.072998046875, "t": 135.8597869873047, "r": 547.15087890625, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 123.37991333007812, "r": 339.4510498046875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.9899597167969, "t": 123.37991333007812, "r": 547.160888671875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 110.84027099609375, "r": 530.541015625, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.087646484375, "t": 110.84027099609375, "r": 547.1808471679688, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 98.36038970947266, "r": 530.5750732421875, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1066284179688, "t": 98.36038970947266, "r": 547.169677734375, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717407226562, "t": 85.88050842285156, "r": 530.436279296875, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9984741210938, "t": 85.88050842285156, "r": 547.1228637695312, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 43, "num_cols": 2, "grid": [[{"bbox": {"l": 136.8000030517578, "t": 659.3513793945312, "r": 172.89404296875, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01951599121094, "t": 659.3513793945312, "r": 547.1898193359375, "b": 650.1383666992188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79901123046875, "t": 646.8715209960938, "r": 189.86537170410156, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.3968505859375, "t": 646.8715209960938, "r": 547.182861328125, "b": 637.6585083007812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79901123046875, "t": 624.3718872070312, "r": 279.3973083496094, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.6194152832031, "t": 624.3718872070312, "r": 547.1907958984375, "b": 615.1588745117188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79901123046875, "t": 601.8722534179688, "r": 172.84423828125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852416992188, "t": 601.8722534179688, "r": 547.182861328125, "b": 592.6592407226562, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79803466796875, "t": 589.3923950195312, "r": 547.1808471679688, "b": 580.1793823242188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79803466796875, "t": 576.852783203125, "r": 339.18292236328125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.714111328125, "t": 576.852783203125, "r": 547.1387939453125, "b": 567.6397705078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79803466796875, "t": 564.3729248046875, "r": 529.9950561523438, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5494995117188, "t": 564.3729248046875, "r": 547.1978759765625, "b": 555.159912109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 551.89306640625, "r": 284.0286560058594, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449462890625, "t": 551.89306640625, "r": 547.1211547851562, "b": 542.6800537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 529.3934326171875, "r": 536.0958862304688, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6468505859375, "t": 529.3934326171875, "r": 547.1978149414062, "b": 520.180419921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79808044433594, "t": 517.3936157226562, "r": 549.8472290039062, "b": 508.18060302734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 504.85394287109375, "r": 536.1293334960938, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6611328125, "t": 504.85394287109375, "r": 547.19287109375, "b": 495.6409606933594, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79806518554688, "t": 492.3740539550781, "r": 549.8472290039062, "b": 483.16107177734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 479.8941650390625, "r": 536.0551147460938, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015014648438, "t": 479.8941650390625, "r": 547.14794921875, "b": 470.6811828613281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 467.3545227050781, "r": 536.080078125, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.635498046875, "t": 467.3545227050781, "r": 547.19091796875, "b": 458.14154052734375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7970428466797, "t": 444.8548889160156, "r": 536.0908813476562, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.642822265625, "t": 444.8548889160156, "r": 547.1947631835938, "b": 435.64190673828125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7970428466797, "t": 432.8550720214844, "r": 536.1271362304688, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6658935546875, "t": 432.8550720214844, "r": 547.2047119140625, "b": 423.64208984375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 420.37518310546875, "r": 535.9526977539062, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5558471679688, "t": 420.37518310546875, "r": 547.1590576171875, "b": 411.1622009277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 407.8952941894531, "r": 536.0410766601562, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.595947265625, "t": 407.8952941894531, "r": 547.1508178710938, "b": 398.68231201171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 395.35565185546875, "r": 536.0748901367188, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6302490234375, "t": 395.35565185546875, "r": 547.1856079101562, "b": 386.1426696777344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 382.8757629394531, "r": 411.2704772949219, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.8177490234375, "t": 382.8757629394531, "r": 547.1786499023438, "b": 373.66278076171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 370.3958740234375, "r": 536.035888671875, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.5989379882812, "t": 370.3958740234375, "r": 547.1619262695312, "b": 361.1828918457031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 357.8562316894531, "r": 530.5731811523438, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1044311523438, "t": 357.8562316894531, "r": 547.1668701171875, "b": 348.64324951171875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19720458984375, "t": 345.3763427734375, "r": 530.5352172851562, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755004882812, "t": 345.3763427734375, "r": 547.156005859375, "b": 336.1633605957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.7970428466797, "t": 332.8964538574219, "r": 547.256591796875, "b": 323.6834716796875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 310.3968200683594, "r": 530.5396118164062, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0916748046875, "t": 310.3968200683594, "r": 547.19580078125, "b": 301.183837890625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 298.3970031738281, "r": 530.4808959960938, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248046875, "t": 298.3970031738281, "r": 547.1657104492188, "b": 289.18402099609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 285.85736083984375, "r": 378.2078552246094, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713134765625, "t": 285.85736083984375, "r": 547.15576171875, "b": 276.6443786621094, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 273.3774719238281, "r": 530.4347534179688, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9962158203125, "t": 273.3774719238281, "r": 547.1190795898438, "b": 264.16448974609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 260.83782958984375, "r": 530.528076171875, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0670166015625, "t": 260.83782958984375, "r": 547.1448364257812, "b": 251.6248321533203, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 248.3579559326172, "r": 530.4978637695312, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0518798828125, "t": 248.3579559326172, "r": 547.159912109375, "b": 239.14495849609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.1971893310547, "t": 235.87808227539062, "r": 530.5602416992188, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912109375, "t": 235.87808227539062, "r": 547.1768798828125, "b": 226.6650848388672, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 223.33843994140625, "r": 530.5302734375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0615234375, "t": 223.33843994140625, "r": 547.1240234375, "b": 214.1254425048828, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79702758789062, "t": 210.8585662841797, "r": 530.6299438476562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1631469726562, "t": 210.8585662841797, "r": 547.2295532226562, "b": 201.64556884765625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.3206481933594, "t": 198.37869262695312, "r": 547.10009765625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 136.79701232910156, "t": 198.37869262695312, "r": 394.78179931640625, "b": 189.1656951904297, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 173.3591766357422, "r": 530.4913940429688, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0463256835938, "t": 173.3591766357422, "r": 547.1561889648438, "b": 164.14617919921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 160.87930297851562, "r": 530.5645751953125, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0960083007812, "t": 160.87930297851562, "r": 547.1587524414062, "b": 151.6663055419922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 148.33966064453125, "r": 530.5569458007812, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0881958007812, "t": 148.33966064453125, "r": 547.1507568359375, "b": 139.1266632080078, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 135.8597869873047, "r": 530.5341186523438, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.072998046875, "t": 135.8597869873047, "r": 547.15087890625, "b": 126.64678955078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 123.37991333007812, "r": 339.4510498046875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.9899597167969, "t": 123.37991333007812, "r": 547.160888671875, "b": 114.16690826416016, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 110.84027099609375, "r": 530.541015625, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.087646484375, "t": 110.84027099609375, "r": 547.1808471679688, "b": 101.62727355957031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 98.36038970947266, "r": 530.5750732421875, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.1066284179688, "t": 98.36038970947266, "r": 547.169677734375, "b": 89.14738464355469, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 151.19717407226562, "t": 85.88050842285156, "r": 530.436279296875, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.9984741210938, "t": 85.88050842285156, "r": 547.1228637695312, "b": 76.6675033569336, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/1", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 8, "bbox": {"l": 135.52508544921875, "t": 502.2750244140625, "r": 545.87060546875, "b": 349.9494934082031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/88"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 142.8000030517578, "t": 495.4620056152344, "r": 202.2449951171875, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.8087921142578, "t": 495.4620056152344, "r": 257.210693359375, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479248046875, "t": 495.4620056152344, "r": 338.8946838378906, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8000030517578, "t": 476.4422912597656, "r": 203.2322998046875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.785400390625, "t": 476.4422912597656, "r": 276.00360107421875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.45770263671875, "t": 476.4422912597656, "r": 359.85394287109375, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8000030517578, "t": 457.48199462890625, "r": 198.66929626464844, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74130249023438, "t": 457.48199462890625, "r": 275.9234924316406, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.382080078125, "t": 457.48199462890625, "r": 515.0535888671875, "b": 438.1166687011719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79998779296875, "t": 427.48138427734375, "r": 173.98318481445312, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.773681640625, "t": 427.48138427734375, "r": 270.9797668457031, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.416259765625, "t": 427.48138427734375, "r": 539.1071166992188, "b": 397.13604736328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8000030517578, "t": 386.44134521484375, "r": 196.2248992919922, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75210571289062, "t": 386.44134521484375, "r": 270.99871826171875, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4316101074219, "t": 386.44134521484375, "r": 448.11962890625, "b": 356.15631103515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 5, "num_cols": 3, "grid": [[{"bbox": {"l": 142.8000030517578, "t": 495.4620056152344, "r": 202.2449951171875, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.8087921142578, "t": 495.4620056152344, "r": 257.210693359375, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479248046875, "t": 495.4620056152344, "r": 338.8946838378906, "b": 487.1369934082031, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8000030517578, "t": 476.4422912597656, "r": 203.2322998046875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.785400390625, "t": 476.4422912597656, "r": 276.00360107421875, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.45770263671875, "t": 476.4422912597656, "r": 359.85394287109375, "b": 468.1172790527344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8000030517578, "t": 457.48199462890625, "r": 198.66929626464844, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74130249023438, "t": 457.48199462890625, "r": 275.9234924316406, "b": 449.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.382080078125, "t": 457.48199462890625, "r": 515.0535888671875, "b": 438.1166687011719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.79998779296875, "t": 427.48138427734375, "r": 173.98318481445312, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.773681640625, "t": 427.48138427734375, "r": 270.9797668457031, "b": 419.1563720703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.416259765625, "t": 427.48138427734375, "r": 539.1071166992188, "b": 397.13604736328125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8000030517578, "t": 386.44134521484375, "r": 196.2248992919922, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75210571289062, "t": 386.44134521484375, "r": 270.99871826171875, "b": 378.1163330078125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4316101074219, "t": 386.44134521484375, "r": 448.11962890625, "b": 356.15631103515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/2", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 9, "bbox": {"l": 64.41139221191406, "t": 398.3863525390625, "r": 547.3950805664062, "b": 70.39208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/102"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 70.80030059814453, "t": 391.4817199707031, "r": 119.78550720214844, "b": 383.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93804931640625, "t": 344.4774475097656, "r": 433.2629699707031, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.1380615234375, "t": 390.3999328613281, "r": 458.4629821777344, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.9383544921875, "t": 390.465576171875, "r": 484.2632751464844, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13836669921875, "t": 390.385498046875, "r": 509.4632873535156, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.3986206054688, "t": 359.2005615234375, "r": 534.7235717773438, "b": 304.9799499511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80000305175781, "t": 293.4420166015625, "r": 220.1568145751953, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 293.4420166015625, "r": 435.00299072265625, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00030517578125, "t": 293.4420166015625, "r": 486.0032958984375, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 274.4817199707031, "r": 264.5538024902344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 274.4817199707031, "r": 435.0030212402344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 274.4817199707031, "r": 486.0033264160156, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800048828125, "t": 255.46202087402344, "r": 322.5057373046875, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 255.46202087402344, "r": 435.0030212402344, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 255.46202087402344, "r": 486.0033264160156, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800048828125, "t": 236.44232177734375, "r": 381.0218505859375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 236.44232177734375, "r": 435.0030212402344, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 236.44232177734375, "r": 486.0033264160156, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606201171875, "t": 236.44232177734375, "r": 511.26361083984375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603149414062, "t": 236.44232177734375, "r": 536.7633056640625, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800048828125, "t": 217.48202514648438, "r": 359.5173645019531, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 217.48202514648438, "r": 435.0030517578125, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 217.48202514648438, "r": 486.00335693359375, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 217.48202514648438, "r": 511.263671875, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 198.4623260498047, "r": 220.7517852783203, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 198.4623260498047, "r": 435.0030517578125, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 198.4623260498047, "r": 486.00335693359375, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 198.4623260498047, "r": 511.263671875, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603759765625, "t": 198.4623260498047, "r": 536.7633666992188, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 179.442626953125, "r": 236.65480041503906, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 179.442626953125, "r": 435.0030517578125, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 179.442626953125, "r": 486.00335693359375, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 160.48233032226562, "r": 213.1296844482422, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 160.48233032226562, "r": 435.0030517578125, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 160.48233032226562, "r": 486.00335693359375, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 141.46263122558594, "r": 199.87808227539062, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 141.46263122558594, "r": 435.0030517578125, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 141.46263122558594, "r": 486.00335693359375, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 122.44291687011719, "r": 208.36776733398438, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 122.44291687011719, "r": 435.0030517578125, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 122.44291687011719, "r": 486.00335693359375, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 103.42323303222656, "r": 411.20263671875, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 103.42323303222656, "r": 435.0030517578125, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 103.42323303222656, "r": 486.00335693359375, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80007934570312, "t": 84.46292877197266, "r": 377.1258544921875, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 84.46292877197266, "r": 435.0030517578125, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 84.46292877197266, "r": 486.00335693359375, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 13, "num_cols": 6, "grid": [[{"bbox": {"l": 70.80030059814453, "t": 391.4817199707031, "r": 119.78550720214844, "b": 383.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93804931640625, "t": 344.4774475097656, "r": 433.2629699707031, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.1380615234375, "t": 390.3999328613281, "r": 458.4629821777344, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.9383544921875, "t": 390.465576171875, "r": 484.2632751464844, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13836669921875, "t": 390.385498046875, "r": 509.4632873535156, "b": 304.9800109863281, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.3986206054688, "t": 359.2005615234375, "r": 534.7235717773438, "b": 304.9799499511719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80000305175781, "t": 293.4420166015625, "r": 220.1568145751953, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 293.4420166015625, "r": 435.00299072265625, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00030517578125, "t": 293.4420166015625, "r": 486.0032958984375, "b": 285.11700439453125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 274.4817199707031, "r": 264.5538024902344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 274.4817199707031, "r": 435.0030212402344, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 274.4817199707031, "r": 486.0033264160156, "b": 266.1567077636719, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800048828125, "t": 255.46202087402344, "r": 322.5057373046875, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user's job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 255.46202087402344, "r": 435.0030212402344, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 255.46202087402344, "r": 486.0033264160156, "b": 247.1370086669922, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800048828125, "t": 236.44232177734375, "r": 381.0218505859375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000305175781, "t": 236.44232177734375, "r": 435.0030212402344, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003356933594, "t": 236.44232177734375, "r": 486.0033264160156, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606201171875, "t": 236.44232177734375, "r": 511.26361083984375, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603149414062, "t": 236.44232177734375, "r": 536.7633056640625, "b": 228.1173095703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.800048828125, "t": 217.48202514648438, "r": 359.5173645019531, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 217.48202514648438, "r": 435.0030517578125, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 217.48202514648438, "r": 486.00335693359375, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 217.48202514648438, "r": 511.263671875, "b": 209.15701293945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 198.4623260498047, "r": 220.7517852783203, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 198.4623260498047, "r": 435.0030517578125, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 198.4623260498047, "r": 486.00335693359375, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26068115234375, "t": 198.4623260498047, "r": 511.263671875, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.7603759765625, "t": 198.4623260498047, "r": 536.7633666992188, "b": 190.13731384277344, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 179.442626953125, "r": 236.65480041503906, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 179.442626953125, "r": 435.0030517578125, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 179.442626953125, "r": 486.00335693359375, "b": 171.11761474609375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 160.48233032226562, "r": 213.1296844482422, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 160.48233032226562, "r": 435.0030517578125, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 160.48233032226562, "r": 486.00335693359375, "b": 152.15731811523438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 141.46263122558594, "r": 199.87808227539062, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 141.46263122558594, "r": 435.0030517578125, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 141.46263122558594, "r": 486.00335693359375, "b": 133.1376190185547, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 122.44291687011719, "r": 208.36776733398438, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 122.44291687011719, "r": 435.0030517578125, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 122.44291687011719, "r": 486.00335693359375, "b": 114.11792755126953, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 103.42323303222656, "r": 411.20263671875, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 103.42323303222656, "r": 435.0030517578125, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 103.42323303222656, "r": 486.00335693359375, "b": 95.09822845458984, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80007934570312, "t": 84.46292877197266, "r": 377.1258544921875, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00006103515625, "t": 84.46292877197266, "r": 435.0030517578125, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.0003662109375, "t": 84.46292877197266, "r": 486.00335693359375, "b": 76.13793182373047, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"bbox": null, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/3", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 11, "bbox": {"l": 134.54624938964844, "t": 688.5811157226562, "r": 542.0460815429688, "b": 587.7283935546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/112"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 142.8000030517578, "t": 681.4619750976562, "r": 209.67091369628906, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18911743164062, "t": 681.4619750976562, "r": 319.9352722167969, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80001831054688, "t": 662.5016479492188, "r": 212.7012176513672, "b": 643.1364135742188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2197265625, "t": 662.5016479492188, "r": 467.9906921386719, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003356933594, "t": 632.441650390625, "r": 216.63963317871094, "b": 624.11669921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19813537597656, "t": 632.441650390625, "r": 535.6508178710938, "b": 613.13671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009033203125, "t": 602.4419555664062, "r": 209.73570251464844, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.24490356445312, "t": 602.4419555664062, "r": 425.64569091796875, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 4, "num_cols": 2, "grid": [[{"bbox": {"l": 142.8000030517578, "t": 681.4619750976562, "r": 209.67091369628906, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18911743164062, "t": 681.4619750976562, "r": 319.9352722167969, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.80001831054688, "t": 662.5016479492188, "r": 212.7012176513672, "b": 643.1364135742188, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2197265625, "t": 662.5016479492188, "r": 467.9906921386719, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.80003356933594, "t": 632.441650390625, "r": 216.63963317871094, "b": 624.11669921875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19813537597656, "t": 632.441650390625, "r": 535.6508178710938, "b": 613.13671875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 142.8009033203125, "t": 602.4419555664062, "r": 209.73570251464844, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.24490356445312, "t": 602.4419555664062, "r": 425.64569091796875, "b": 594.1170043945312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]]}}, {"self_ref": "#/tables/4", "parent": {"cref": "#/body"}, "children": [], "label": "table", "prov": [{"page_no": 12, "bbox": {"l": 63.556331634521484, "t": 687.76611328125, "r": 548.5687255859375, "b": 495.7753601074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [{"cref": "#/texts/128"}], "references": [], "footnotes": [], "image": null, "data": {"table_cells": [{"bbox": {"l": 70.80000305175781, "t": 681.4619750976562, "r": 134.99070739746094, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.889404296875, "t": 681.4619750976562, "r": 223.34640502929688, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8247985839844, "t": 681.4619750976562, "r": 331.3428039550781, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80000305175781, "t": 662.5016479492188, "r": 132.7209014892578, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89028930664062, "t": 662.5016479492188, "r": 267.0765075683594, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8473205566406, "t": 662.5016479492188, "r": 510.17547607421875, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 643.48193359375, "r": 140.66522216796875, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.872314453125, "t": 643.48193359375, "r": 267.077392578125, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8454895019531, "t": 643.48193359375, "r": 509.6058349609375, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 624.4622192382812, "r": 134.98263549804688, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90293884277344, "t": 624.4622192382812, "r": 242.80084228515625, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7978515625, "t": 624.4622192382812, "r": 527.5922241210938, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 605.4425048828125, "r": 143.50924682617188, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80575561523438, "t": 605.4425048828125, "r": 267.0693664550781, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85186767578125, "t": 605.4425048828125, "r": 436.5726013183594, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 586.482177734375, "r": 156.01654052734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83544921875, "t": 586.482177734375, "r": 267.0864562988281, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8707580566406, "t": 586.482177734375, "r": 470.44677734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 567.4624633789062, "r": 157.89932250976562, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72471618652344, "t": 567.4624633789062, "r": 261.9825439453125, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7492370605469, "t": 567.4624633789062, "r": 478.84381103515625, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 548.4427490234375, "r": 154.419921875, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312133789062, "t": 548.4427490234375, "r": 267.0927429199219, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164306640625, "t": 548.4427490234375, "r": 464.2602233886719, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80001831054688, "t": 529.482421875, "r": 188.43991088867188, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8444061279297, "t": 529.482421875, "r": 267.03692626953125, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682373046875, "t": 529.482421875, "r": 430.40045166015625, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.80003356933594, "t": 510.4627380371094, "r": 139.4313507080078, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635314941406, "t": 510.4627380371094, "r": 239.2899627685547, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7906494140625, "t": 510.4627380371094, "r": 425.09130859375, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 10, "num_cols": 3, "grid": [[{"bbox": {"l": 70.80000305175781, "t": 681.4619750976562, "r": 134.99070739746094, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.889404296875, "t": 681.4619750976562, "r": 223.34640502929688, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8247985839844, "t": 681.4619750976562, "r": 331.3428039550781, "b": 673.1370239257812, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80000305175781, "t": 662.5016479492188, "r": 132.7209014892578, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89028930664062, "t": 662.5016479492188, "r": 267.0765075683594, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8473205566406, "t": 662.5016479492188, "r": 510.17547607421875, "b": 654.1766967773438, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 643.48193359375, "r": 140.66522216796875, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.872314453125, "t": 643.48193359375, "r": 267.077392578125, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8454895019531, "t": 643.48193359375, "r": 509.6058349609375, "b": 635.156982421875, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 624.4622192382812, "r": 134.98263549804688, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90293884277344, "t": 624.4622192382812, "r": 242.80084228515625, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7978515625, "t": 624.4622192382812, "r": 527.5922241210938, "b": 616.1372680664062, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 605.4425048828125, "r": 143.50924682617188, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80575561523438, "t": 605.4425048828125, "r": 267.0693664550781, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85186767578125, "t": 605.4425048828125, "r": 436.5726013183594, "b": 597.1175537109375, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 586.482177734375, "r": 156.01654052734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83544921875, "t": 586.482177734375, "r": 267.0864562988281, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8707580566406, "t": 586.482177734375, "r": 470.44677734375, "b": 578.1572265625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 567.4624633789062, "r": 157.89932250976562, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72471618652344, "t": 567.4624633789062, "r": 261.9825439453125, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7492370605469, "t": 567.4624633789062, "r": 478.84381103515625, "b": 559.1375122070312, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 548.4427490234375, "r": 154.419921875, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312133789062, "t": 548.4427490234375, "r": 267.0927429199219, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164306640625, "t": 548.4427490234375, "r": 464.2602233886719, "b": 540.1177978515625, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80001831054688, "t": 529.482421875, "r": 188.43991088867188, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8444061279297, "t": 529.482421875, "r": 267.03692626953125, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682373046875, "t": 529.482421875, "r": 430.40045166015625, "b": 521.157470703125, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}], [{"bbox": {"l": 70.80003356933594, "t": 510.4627380371094, "r": 139.4313507080078, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635314941406, "t": 510.4627380371094, "r": 239.2899627685547, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.7906494140625, "t": 510.4627380371094, "r": 425.09130859375, "b": 502.1377258300781, "coord_origin": "BOTTOMLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]]}}], "key_value_items": [], "pages": {"1": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 1}, "2": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 2}, "3": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 3}, "4": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 4}, "5": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 5}, "6": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 6}, "7": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 7}, "8": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 8}, "9": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 9}, "10": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 10}, "11": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 11}, "12": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 12}, "13": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 13}, "14": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 14}, "15": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 15}, "16": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 16}, "17": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 17}, "18": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 18}}} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110_sampled.md b/tests/data/groundtruth/docling_v2/redp5110_sampled.md new file mode 100644 index 00000000..87e9fd59 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/redp5110_sampled.md @@ -0,0 +1,395 @@ +Front cover + + + +## Row and Column Access Control Support in IBM DB2 for i + +Implement roles and separation of duties + +Leverage row permissions on the database + +Protect columns by defining column masks + +Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan + +Redpaper + +## Contents + +| Notices | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii | +|------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| Trademarks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii | +| DB2 for i Center of Excellence | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix | +| Preface | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | +| Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi | | +| Now you can become a published author, too! | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii | +| Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | xiii | +| Stay connected to IBM Redbooks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv | +| Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 1 | +| 1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | | +| 1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 2 | +| 1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | | +| 1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 4 | +| 1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . . | 5 | +| Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 7 | +| 2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 8 | +| 2.1.1 DDM and DRDA application server access: QIBM\_DB\_DDMDRDA . . . . . . . . . . . | 8 | +| 2.1.2 Toolbox application server access: QIBM\_DB\_ZDA. . . . . . . . . . . . . . . . . . . . . . . . | 8 | +| 2.1.3 Database Administrator function: QIBM\_DB\_SQLADM . . . . . . . . . . . . . . . . . . . . . | 9 | +| 2.1.4 Database Information function: QIBM\_DB\_SYSMON | . . . . . . . . . . . . . . . . . . . . . . 9 | +| 2.1.5 Security Administrator function: QIBM\_DB\_SECADM . . . . . . . . . . . . . . . . . . . . . . | 9 | +| 2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 10 | +| 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION\_USAGE view . . . . . | 10 | +| 2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | | +| Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 13 | +| 3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . . | 14 | +| 3.1.1 Row permission and column mask definitions | . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | +| 3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 16 | +| 3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | +| 3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 18 | +| 3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 19 | +| 3.3 VERIFY\_GROUP\_FOR\_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 20 | +| 3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . . | 21 | +| | . . . . . . . . . . . . . . . . . . . . . . . . 22 | +| 3.5 SELECT, INSERT, and UPDATE behavior with RCAC | | +| 3.6.1 Assigning the QIBM\_DB\_SECADM function ID to the consultants. . . . . . . . . . . . | 23 | +| 3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . . | 23 | +| 3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 24 | +| 3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 25 | +| 3.6.5 Defining and creating column masks | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | +| 3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 28 | +| 3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | 29 | +| 3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . . | 32 | + +DB2 for i Center of Excellence + +Solution Brief IBM Systems Lab Services and Training + + + +## Highlights + +- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +- GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +- GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +- GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH + + + +Power Services + +## DB2 for i Center of Excellence + +Expert help to achieve your business requirements + +## We build confident, satisfied clients + +No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you. + +Because no one else is IBM. + +With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. + +## Who we are, some of what we do + +Global CoE engagements cover topics including: + +- r Database performance and scalability +- r Advanced SQL knowledge and skills transfer +- r Business intelligence and analytics +- r DB2 Web Query +- r Query/400 modernization for better reporting and analysis capabilities +- r Database modernization and re-engineering +- r Data-centric architecture and design +- r Extremely large database and overcoming limits to growth +- r ISV education and enablement + +## Preface + +This IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. + +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. + +This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. + + + + + +Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office. + +Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . + +## Authors + + + +Chapter 1. + +1 + +## Securing and protecting IBM DB2 data + +Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record. + +Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement. + +This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: + +- GLYPH Security fundamentals +- GLYPH Current state of IBM i security +- GLYPH DB2 for i security controls + +## 1.1 Security fundamentals + +Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: + +- GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. +- The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. + +A security policy is what defines whether the system and its settings are secure (or not). + +- GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. + +With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. + +## 1.2 Current state of IBM i security + +Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE. + +Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data. + +Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data. + +Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. + +## 1.3.1 Existing row and column control + +Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator. + +Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases. + +Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. + +Figure 1-2 Existing row and column controls + + + +## 2.1.6 Change Function Usage CL command + +The following CL commands can be used to work with, display, or change function usage IDs: + +- GLYPH Work Function Usage ( WRKFCNUSG ) +- GLYPH Change Function Usage ( CHGFCNUSG ) +- GLYPH Display Function Usage ( DSPFCNUSG ) + +For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules: + +CHGFCNUSG FCNID(QIBM\_DB\_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) + +## 2.1.7 Verifying function usage IDs for RCAC with the FUNCTION\_USAGE view + +The FUNCTION\_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION\_USAGE view. + +Table 2-1 FUNCTION\_USAGE view + +| Column name | Data type | Description | +|---------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FUNCTION\_ID | VARCHAR(30) | ID of the function. | +| USER\_NAME | VARCHAR(10) | Name of the user profile that has a usage setting for this function. | +| USAGE | VARCHAR(7) | Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function. | +| USER\_TYPE | VARCHAR(5) | Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group. | + +To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1. + +Example 2-1 Query to determine who has authority to define and manage RCAC + +SELECT function\_id, user\_name, usage, user\_type FROM function\_usage WHERE function\_id='QIBM\_DB\_SECADM' ORDER BY user\_name; + +## 2.2 Separation of duties + +Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority. + +For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security. + +In IBM i 7.2, the QIBM\_DB\_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. + +QIBM\_DB\_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group. + +QIBM\_DB\_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table. + +A preferred practice is that the RCAC administrator has the QIBM\_DB\_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself. + +Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. + +Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority + +| User action | *JOBCTL | QIBM\_DB\_SECADM | QIBM\_DB\_SQLADM | QIBM\_DB\_SYSMON | No Authority | +|--------------------------------------------------------------------------------|-----------|------------------|------------------|------------------|----------------| +| SET CURRENT DEGREE (SQL statement) | X | | X | | | +| CHGQRYA command targeting a different user's job | X | | X | | | +| STRDBMON or ENDDBMON commands targeting a different user's job | X | | X | | | +| STRDBMON or ENDDBMON commands targeting a job that matches the current user | X | | X | X | X | +| QUSRJOBI() API format 900 or System i Navigator's SQL Details for Job | X | | X | X | | +| Visual Explain within Run SQL scripts | X | | X | X | X | +| Visual Explain outside of Run SQL scripts | X | | X | | | +| ANALYZE PLAN CACHE procedure | X | | X | | | +| DUMP PLAN CACHE procedure | X | | X | | | +| MODIFY PLAN CACHE procedure | X | | X | | | +| MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority) | X | | X | | | +| CHANGE PLAN CACHE SIZE procedure (currently does not check authority) | X | | X | | | + +The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement + + + +## Column mask + +A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. + +Table 3-1 summarizes these special registers and their values. + +Table 3-1 Special registers and their corresponding values + +| Special register | Corresponding value | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| USER or SESSION\_USER | The effective user of the thread excluding adopted authority. | +| CURRENT\_USER | The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER. | +| SYSTEM\_USER | The authorization ID that initiated the connection. | + +Figure 3-5 shows the difference in the special register values when an adopted authority is used: + +- GLYPH A user connects to the server using the user profile ALICE. +- GLYPH USER and CURRENT USER initially have the same value of ALICE. +- GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. +- GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. +- GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. + +Figure 3-5 Special registers and adopted authority + + + +## 3.2.2 Built-in global variables + +Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. + +IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. + +Table 3-2 lists the nine built-in global variables. + +Table 3-2 Built-in global variables + +| Global variable | Type | Description | +|-----------------------|--------------|----------------------------------------------------------------| +| CLIENT\_HOST | VARCHAR(255) | Host name of the current client as returned by the system | +| CLIENT\_IPADDR | VARCHAR(128) | IP address of the current client as returned by the system | +| CLIENT\_PORT | INTEGER | Port used by the current client to communicate with the server | +| PACKAGE\_NAME | VARCHAR(128) | Name of the currently running package | +| PACKAGE\_SCHEMA | VARCHAR(128) | Schema name of the currently running package | +| PACKAGE\_VERSION | VARCHAR(64) | Version identifier of the currently running package | +| ROUTINE\_SCHEMA | VARCHAR(128) | Schema name of the currently running routine | +| ROUTINE\_SPECIFIC\_NAME | VARCHAR(128) | Name of the currently running routine | +| ROUTINE\_TYPE | CHAR(1) | Type of the currently running routine | + +## 3.3 VERIFY\_GROUP\_FOR\_USER function + +The VERIFY\_GROUP\_FOR\_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION\_USER, USER, or CURRENT\_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. + +If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. + +Here is an example of using the VERIFY\_GROUP\_FOR\_USER function: + +- 1. There are user profiles for MGR, JANE, JUDY, and TONY. +- 2. The user profile JANE specifies a group profile of MGR. +- 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: + +``` +VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'MGR') VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'JANE', 'MGR') VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY\_GROUP\_FOR\_USER (CURRENT\_USER, 'JUDY', 'TONY') +``` + +RETURN CASE + +``` +WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE\_OF\_BIRTH WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER = EMPLOYEES . USER\_ID THEN EMPLOYEES . DATE\_OF\_BIRTH WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER <> EMPLOYEES . USER\_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE\_OF\_BIRTH ) || '-' || DAY (EMPLOYEES.DATE\_OF\_BIRTH )) ELSE NULL END ENABLE ; +``` + +- 2. The other column to mask in this example is the TAX\_ID information. In this example, the rules to enforce include the following ones: +- -Human Resources can see the unmasked TAX\_ID of the employees. +- -Employees can see only their own unmasked TAX\_ID. +- -Managers see a masked version of TAX\_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). +- -Any other person sees the entire TAX\_ID as masked, for example, XXX-XX-XXXX. +- To implement this column mask, run the SQL statement that is shown in Example 3-9. + +Example 3-9 Creating a mask on the TAX\_ID column + +``` +CREATE MASK HR\_SCHEMA.MASK\_TAX\_ID\_ON\_EMPLOYEES ON HR\_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX\_ID RETURN CASE WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX\_ID WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER = EMPLOYEES . USER\_ID THEN EMPLOYEES . TAX\_ID WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'MGR' ) = 1 AND SESSION\_USER <> EMPLOYEES . USER\_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX\_ID , 8 , 4 ) ) WHEN VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX\_ID ELSE 'XXX-XX-XXXX' END ENABLE ; +``` + +- 3. Figure 3-10 shows the masks that are created in the HR\_SCHEMA. + +Figure 3-10 Column masks shown in System i Navigator + + + +## 3.6.6 Activating RCAC + +Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: + +- 1. Run the SQL statements that are shown in Example 3-10. + +## Example 3-10 Activating RCAC on the EMPLOYEES table + +- /* Active Row Access Control (permissions) */ + +/* Active Column Access Control (masks) ALTER TABLE HR\_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; + +*/ + +- 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR\_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . + +Figure 3-11 Selecting the EMPLOYEES table from System i Navigator + + + +- 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. + +Figure 4-68 Visual Explain with RCAC enabled + + + +- 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. + +Figure 4-69 Index advice with no RCAC + + + +``` +THEN C . CUSTOMER\_TAX\_ID WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER\_TAX\_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_TAX\_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_DRIVERS\_LICENSE\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_DRIVERS\_LICENSE\_NUMBER RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_DRIVERS\_LICENSE\_NUMBER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'TELLER' ) = 1 THEN C . CUSTOMER\_DRIVERS\_LICENSE\_NUMBER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_DRIVERS\_LICENSE\_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_LOGIN\_ID\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_LOGIN\_ID RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_LOGIN\_ID WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_LOGIN\_ID ELSE '*****' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_SECURITY\_QUESTION\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_SECURITY\_QUESTION RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK\_SCHEMA.MASK\_SECURITY\_QUESTION\_ANSWER\_ON\_CUSTOMERS ON BANK\_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER\_SECURITY\_QUESTION\_ANSWER RETURN CASE WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION\_ANSWER WHEN QSYS2 . VERIFY\_GROUP\_FOR\_USER ( SESSION\_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER\_SECURITY\_QUESTION\_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK\_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; +``` + +Back cover + +## Row and Column Access Control Support in IBM DB2 for i + +Implement roles and separation of duties + +Leverage row permissions on the database + +Protect columns by defining column masks + +This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment. + +This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed. + + + + + +INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION + +BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE + +IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. + +For more information: ibm.com /redbooks \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5110_sampled.pages.json b/tests/data/groundtruth/docling_v2/redp5110_sampled.pages.json new file mode 100644 index 00000000..5765cb25 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/redp5110_sampled.pages.json @@ -0,0 +1 @@ +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] diff --git a/tests/data/groundtruth/docling_v2/redp5695.doctags.txt b/tests/data/groundtruth/docling_v2/redp5695.doctags.txt deleted file mode 100644 index e13f2ef2..00000000 --- a/tests/data/groundtruth/docling_v2/redp5695.doctags.txt +++ /dev/null @@ -1,460 +0,0 @@ - -Front cover -
- -
-IBM Cloud Pak for Data on IBM Z -Jasmeet Bhatia -Ravi Gummadi -Chandra Shekhar Reddy Potula -Srirama Sharma -Data and AI -
- -
-
- -
-
- -
-Executive overview -Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology. -With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences. -This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput. -This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. -IBM Z: An overview -Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world's top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency. -The most recent platform for IBM Z is IBM z16™. The IBM z16 supports the following features: -GLYPH On-chip AI acceleration -GLYPH Quantum-safe crypto discovery -GLYPH Simplified compliance -GLYPH Flexible capacity -GLYPH Modernization of applications -GLYPH Sustainability -With these features, enterprises can upgrade applications while preserving secure and resilient data. -To learn more about these features, see the IBM z16 product page. -Figure 1 on page 3 shows a picture of the IBM z16 mainframe. -Figure 1 IBM z16 -
- -Figure 1 IBM z16 -
-IBM z16 and IBM LinuxONE Emperor 4 features -IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI. -Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement. -Figure 2 IBM Z: Processor roadmap -
- -Figure 2 IBM Z: Processor roadmap -
-The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a 'built to build' focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization. -Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum™ processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory. -Figure 3 System design of IBM z16 LinuxONE Emperor 4 -
- -Figure 3 System design of IBM z16 LinuxONE Emperor 4 -
-The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has "first in the industry" on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection. -Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression. -Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores. -Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores -
- -Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores -
-The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases. -Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities. -Figure 5 Seamless integration -
- -Figure 5 Seamless integration -
-What is Cloud Pak for Data on IBM Z -IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680. -CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses. -Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion. -Figure 6 Solution overview of Cloud Pak for Data -
- -Figure 6 Solution overview of Cloud Pak for Data -
-We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: -GLYPH Performance and Scale -GLYPH Embedded Accelerators -GLYPH Reliability and Availability -GLYPH Security and Governance. -From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security. -Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE -With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks: -GLYPH Provision various containerized databases. -GLYPH Explore, clean, shape, and alter data by using Data Refinery. -GLYPH Use project-specific data that is uploaded, or connect to distant data. -GLYPH Create Spark run times and applications. -GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency. -GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9. -For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE. -Open-source ecosystem -These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building. -IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business. -On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing. -IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE. -IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community's continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud. -CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms. -Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE. -In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16™) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server. -So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers. -Why AI on IBM Z -Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI. -Traditional ML models' power most of today's ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z). -Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model. -Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE -
- -Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE -
-In summary, here are some of the reasons why you should choose AI on IBM Z: -GLYPH World-class AI inference platform for enterprise workloads: --Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores. --Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform. --Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z. -GLYPH Security: Encrypted memory, and improved trusted execution environments. -GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system. -AI use cases -With billions of transactions per day in many of today's industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale. -Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. -For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount. -For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important. -For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z. -In the following sections, we describe the following use cases: -GLYPH "Use case 1: Responsible AI augmented with risk and regulatory compliance" on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks. -GLYPH "Use case 2: Credit default risk assessment" on page 22 -Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. -GLYPH "Use case 3: Clearing and settlement" on page 25 -The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. -GLYPH "Use case 4: Remaining Useful Life of an aircraft engine" on page 27 -We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure. -GLYPH "Use case 5: AI-powered video analytics on an infant's motions for health prediction" on page 30 -In this section, we describe how AI can predict an infant's health conditions by monitoring real-time body movements. -Use case 1: Responsible AI augmented with risk and regulatory compliance -Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task. -How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring. -Industry challenges -Here are the three main reasons why organizations struggle with the adoption of AI: -GLYPH Scaling with growing regulations -GLYPH Lack of confidence in operationalized AI (making responsible AI) -GLYPH Challenges around managing the risk throughout the entire AI workflow -Scaling with growing regulations -Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination. -Responsible AI -Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable. -Risks throughout the entire AI workflow -Organizations need to mitigate risk of the following items: -GLYPH Deciding not to use certain technologies or practices -GLYPH Using personal information when needed and with a user's consent -GLYPH Ensuring automated decisions are free from bias -GLYPH Customer confidence by providing explanations for business decisions -GLYPH Fraud to the organization and to customer's accounts -GLYPH Delays in putting models into production -In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important. -The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the "why" of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively. -For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise. -Figure 8 Typical AI model lifecycle -
- -Figure 8 Typical AI model lifecycle -
-Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows. -IBM governance solution for IBM Z -AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises. -AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization's use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model's behavior throughout the lifecycle, the data that was influential in its development, and the possible risks. -In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance. -Lifecycle governance -Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements: -GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. -GLYPH Automate the capture of model metadata for report generation. -GLYPH Drive transparent and explainable AI at scale. -GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging. -Risk management -Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale: -GLYPH Automate facts and workflow management to comply with business standards. -GLYPH Use dynamic dashboards for clear and concise customizable results. -GLYPH Enhanced collaboration across multiple regions and geographies. -Regulatory compliance -Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks: -GLYPH Help adhere to external AI regulations for audit and compliance. -GLYPH Convert external AI regulations into policies for automatic enforcement. -GLYPH Use dynamic dashboards for compliance status across policies and regulations. -Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways: -GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. -GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86. -Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. -Figure 9 Remote AI governance solution end-to-end flow -
- -Figure 9 Remote AI governance solution end-to-end flow -
-To achieve end-to-end AI governance, complete the following steps: -1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10. -Figure 10 Creating a model entry in IBM OpenPages -
- -Figure 10 Creating a model entry in IBM OpenPages -
-2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11. -Figure 11 Training an AI model by using Watson Studio -
- -Figure 11 Training an AI model by using Watson Studio -
-3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12. -Figure 12 Deploying an AI model by using WML on Cloud Pak for Data -
- -Figure 12 Deploying an AI model by using WML on Cloud Pak for Data -
-4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform. -Figure 13 External model -
- -Figure 13 External model -
-You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages. -Figure 14 Tracking the model -
- -Figure 14 Tracking the model -
-You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15. -Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform -
- -Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform -
-5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16. -Figure 16 Creating an external model on an x86 platform -
- -Figure 16 Creating an external model on an x86 platform -
-IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21. -Figure 17 IBM OpenScale dashboard that is used to monitor the external model -
- -Figure 17 IBM OpenScale dashboard that is used to monitor the external model -
-You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale. -Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale -
- -Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale -
-Use case 2: Credit default risk assessment -In today's world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations. -Industry challenges -Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone's likelihood of default, but that is not an efficient method for judgment as a business grows. -Predictions of credit default risk assessment -In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan. -Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk. -Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model. -Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z -
- -Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z -
-A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import. -Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors. -The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications. -Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction. -We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. -Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. -Figure 20 Architecture for credit risk prediction by using DL on IBM Z -
- -Figure 20 Architecture for credit risk prediction by using DL on IBM Z -
-Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model's endpoint. -In summary, here are some considerations for developing real-time AI models, such as credit risk assessment: -GLYPH A preference for in-platform run times of the model, such as faster execution results. -GLYPH Less overhead in the end-to-end flows might improve scoring time. -GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform. -GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment. -GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means. -Use case 3: Clearing and settlement -Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day. -Industry challenge -Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs. -Clearing and settlement solution -Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts. -In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions. -The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds. -One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint. -Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE. -Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data -
- -Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data -
-Here are the steps of the high-level process flow: -1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building. -2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D. -3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository. -4. Deploy the saved model into a deployment space for batch deployment. -5. Create a batch deployment by using any of these interfaces: -a. Watson Studio user interface from an Analytics deployment space. -b. WML Python client. -c. WML REST APIs. -6. A hardware configuration can be chosen for the deployment. -7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination. -8. One way to run batch deployment to predict or score is to create and run a batch deployment job. -9. Provide an input data type: -a. Inline data for entering a JSON format payload. -b. Select Data asset , click Select data source , and then specify your asset. -10.The output data type can be a new output file or a connected data asset. -11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run. -12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL. -Summary -With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages: -GLYPH No Impact to SLAs and the batch process window. -GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs. -GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring. -Use case 4: Remaining Useful Life of an aircraft engine -In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems. -Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime. -Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z. -Figure 22 Inferencing architecture on IBM Z -
- -Figure 22 Inferencing architecture on IBM Z -
-Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model's life. -Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist's journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see "Use case 3: Clearing and settlement" on page 25. -Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices. -We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works. -This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator. -For decision-making about an aircraft engine's life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction. -The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point. -Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating. -Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application. -Figure 23 In-depth architectural view -
- -Figure 23 In-depth architectural view -
-In summary, consider the following points while developing an AI-based predictive maintenance application: -GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages. -GLYPH The trustworthiness of the predicted output is important for critical use cases. -GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications. -GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available. -GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle. -Use case 5: AI-powered video analytics on an infant's motions for health prediction -Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world. -Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis. -Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health. -In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby's life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders. -Industry challenges -There are video surveillance systems that are installed for monitoring an infant's movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected. -There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something "smart" that monitors constantly the surveillance system and detect problems effectively. -AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified. -Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry. -Infant motion analytics in real time -AI is the current "market trend evolution" in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems. -CP4D was used to build and deploy the AI-powered video analytics on infant's motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time. -Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data. -Figure 24 Architecture for AI-powered video analytics -
- -Figure 24 Architecture for AI-powered video analytics -
-Live camera feeds or recorded videos of an infant's movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant's body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture. -When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant's health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means. -We can leverage the following AI technology stack for this use case: -GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images. -GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow. -GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation. -GLYPH OpenCV: A real-time computer vision library that helps perform image processing. -WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions. -Additional resources -GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z. -GLYPH IBM Cloud Pak for Data Tutorials. -GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE: --Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case. --Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case. --Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case. -A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE. -Summary -This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. -Authors -This publication was produced by a team of specialists from around the world working with the IBM Redbooks team: -Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management. -Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master's degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems. -Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems. -Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization. -Thanks to the following people for their contributions to this project: -Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center -Shin Kelly Yang, AI on IBM Z Product Management IBM US -Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM -Now you can become a published author, too! -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. -Find out more about the residency program, browse the residency index, and apply online at: -ibm.com /redbooks/residencies.html -Stay connected to IBM Redbooks -GLYPH Find us on LinkedIn: -http://www.linkedin.com/groups?home=&gid=2130806 -GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: -https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm -GLYPH Stay current on recent Redbooks publications with RSS Feeds: -http://www.redbooks.ibm.com/rss.html -Notices -This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it. -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: -IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US -INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. -IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you. -The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions. -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. -Statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only. -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental. -COPYRIGHT LICENSE: -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided "AS IS", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs. -Trademarks -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at http://www.ibm.com/legal/copytrade.shtml -The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries. -Db2fi IBMfi -IBM Blockchainfi -IBM Cloudfi IBM Clou -d Pakfi -IBM Telum™ -IBM Watsonfi -IBM z16™ -Instanafi -Open Libertyfi -OpenPagesfi -Redbooksfi -The following terms are trademarks of other companies: -Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. -The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis. -Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries. -UNIX is a registered trademark of The Open Group in the United States and other countries. -Other company, product, or service names may be trademarks or service marks of others. -Redbooks (log o) fi Turbon -omicfi -WebSpherefi -z/OSfi -z16™ -
- -
-Back cover -
- -
-REDP-5695-00 -ISBN 0738461067 -
- -
-
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5695.json b/tests/data/groundtruth/docling_v2/redp5695.json deleted file mode 100644 index b845a0b7..00000000 --- a/tests/data/groundtruth/docling_v2/redp5695.json +++ /dev/null @@ -1 +0,0 @@ -{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "redp5695", "origin": {"mimetype": "application/pdf", "binary_hash": 3842331695335452030, "filename": "redp5695.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}, {"cref": "#/pictures/0"}, {"cref": "#/texts/1"}, {"cref": "#/texts/2"}, {"cref": "#/texts/3"}, {"cref": "#/texts/4"}, {"cref": "#/texts/5"}, {"cref": "#/texts/6"}, {"cref": "#/pictures/1"}, {"cref": "#/pictures/2"}, {"cref": "#/pictures/3"}, {"cref": "#/texts/7"}, {"cref": "#/texts/8"}, {"cref": "#/texts/9"}, {"cref": "#/texts/10"}, {"cref": "#/texts/11"}, {"cref": "#/texts/12"}, {"cref": "#/texts/13"}, {"cref": "#/texts/14"}, {"cref": "#/texts/15"}, {"cref": "#/texts/16"}, {"cref": "#/texts/17"}, {"cref": "#/groups/0"}, {"cref": "#/texts/24"}, {"cref": "#/texts/25"}, {"cref": "#/texts/26"}, {"cref": "#/texts/27"}, {"cref": "#/texts/28"}, {"cref": "#/texts/29"}, {"cref": "#/texts/30"}, {"cref": "#/pictures/4"}, {"cref": "#/texts/31"}, {"cref": "#/texts/32"}, {"cref": "#/texts/33"}, {"cref": "#/texts/34"}, {"cref": "#/texts/35"}, {"cref": "#/texts/36"}, {"cref": "#/texts/37"}, {"cref": "#/pictures/5"}, {"cref": "#/texts/38"}, {"cref": "#/texts/39"}, {"cref": "#/texts/40"}, {"cref": "#/pictures/6"}, {"cref": "#/texts/41"}, {"cref": "#/texts/42"}, {"cref": "#/texts/43"}, {"cref": "#/texts/44"}, {"cref": "#/texts/45"}, {"cref": "#/texts/46"}, {"cref": "#/texts/47"}, {"cref": "#/pictures/7"}, {"cref": "#/texts/48"}, {"cref": "#/texts/49"}, {"cref": "#/texts/50"}, {"cref": "#/pictures/8"}, {"cref": "#/texts/51"}, {"cref": "#/texts/52"}, {"cref": "#/texts/53"}, {"cref": "#/texts/54"}, {"cref": "#/texts/55"}, {"cref": "#/texts/56"}, {"cref": "#/texts/57"}, {"cref": "#/texts/58"}, {"cref": "#/pictures/9"}, {"cref": "#/texts/59"}, {"cref": "#/groups/1"}, {"cref": "#/texts/64"}, {"cref": "#/texts/65"}, {"cref": "#/texts/66"}, {"cref": "#/groups/2"}, {"cref": "#/texts/73"}, {"cref": "#/texts/74"}, {"cref": "#/texts/75"}, {"cref": "#/texts/76"}, {"cref": "#/texts/77"}, {"cref": "#/texts/78"}, {"cref": "#/texts/79"}, {"cref": "#/texts/80"}, {"cref": "#/texts/81"}, {"cref": "#/texts/82"}, {"cref": "#/texts/83"}, {"cref": "#/texts/84"}, {"cref": "#/texts/85"}, {"cref": "#/texts/86"}, {"cref": "#/texts/87"}, {"cref": "#/texts/88"}, {"cref": "#/texts/89"}, {"cref": "#/texts/90"}, {"cref": "#/texts/91"}, {"cref": "#/pictures/10"}, {"cref": "#/texts/92"}, {"cref": "#/groups/3"}, {"cref": "#/texts/99"}, {"cref": "#/texts/100"}, {"cref": "#/texts/101"}, {"cref": "#/texts/102"}, {"cref": "#/texts/103"}, {"cref": "#/texts/104"}, {"cref": "#/texts/105"}, {"cref": "#/texts/106"}, {"cref": "#/texts/107"}, {"cref": "#/texts/108"}, {"cref": "#/groups/4"}, {"cref": "#/texts/118"}, {"cref": "#/texts/119"}, {"cref": "#/texts/120"}, {"cref": "#/texts/121"}, {"cref": "#/texts/122"}, {"cref": "#/groups/5"}, {"cref": "#/texts/126"}, {"cref": "#/texts/127"}, {"cref": "#/texts/128"}, {"cref": "#/texts/129"}, {"cref": "#/texts/130"}, {"cref": "#/texts/131"}, {"cref": "#/groups/6"}, {"cref": "#/texts/138"}, {"cref": "#/texts/139"}, {"cref": "#/texts/140"}, {"cref": "#/texts/141"}, {"cref": "#/texts/142"}, {"cref": "#/texts/143"}, {"cref": "#/texts/144"}, {"cref": "#/pictures/11"}, {"cref": "#/texts/145"}, {"cref": "#/texts/146"}, {"cref": "#/texts/147"}, {"cref": "#/texts/148"}, {"cref": "#/texts/149"}, {"cref": "#/texts/150"}, {"cref": "#/texts/151"}, {"cref": "#/groups/7"}, {"cref": "#/texts/156"}, {"cref": "#/texts/157"}, {"cref": "#/groups/8"}, {"cref": "#/texts/161"}, {"cref": "#/texts/162"}, {"cref": "#/groups/9"}, {"cref": "#/texts/166"}, {"cref": "#/groups/10"}, {"cref": "#/texts/169"}, {"cref": "#/texts/170"}, {"cref": "#/texts/171"}, {"cref": "#/texts/172"}, {"cref": "#/pictures/12"}, {"cref": "#/texts/173"}, {"cref": "#/groups/11"}, {"cref": "#/texts/175"}, {"cref": "#/pictures/13"}, {"cref": "#/texts/176"}, {"cref": "#/texts/177"}, {"cref": "#/groups/12"}, {"cref": "#/texts/179"}, {"cref": "#/pictures/14"}, {"cref": "#/groups/13"}, {"cref": "#/texts/181"}, {"cref": "#/pictures/15"}, {"cref": "#/texts/182"}, {"cref": "#/groups/14"}, {"cref": "#/texts/184"}, {"cref": "#/pictures/16"}, {"cref": "#/texts/185"}, {"cref": "#/texts/186"}, {"cref": "#/pictures/17"}, {"cref": "#/texts/187"}, {"cref": "#/texts/188"}, {"cref": "#/texts/189"}, {"cref": "#/texts/190"}, {"cref": "#/pictures/18"}, {"cref": "#/texts/191"}, {"cref": "#/groups/15"}, {"cref": "#/texts/193"}, {"cref": "#/pictures/19"}, {"cref": "#/texts/194"}, {"cref": "#/texts/195"}, {"cref": "#/texts/196"}, {"cref": "#/texts/197"}, {"cref": "#/pictures/20"}, {"cref": "#/texts/198"}, {"cref": "#/texts/199"}, {"cref": "#/pictures/21"}, {"cref": "#/texts/200"}, {"cref": "#/texts/201"}, {"cref": "#/texts/202"}, {"cref": "#/texts/203"}, {"cref": "#/texts/204"}, {"cref": "#/texts/205"}, {"cref": "#/texts/206"}, {"cref": "#/texts/207"}, {"cref": "#/texts/208"}, {"cref": "#/texts/209"}, {"cref": "#/texts/210"}, {"cref": "#/texts/211"}, {"cref": "#/pictures/22"}, {"cref": "#/texts/212"}, {"cref": "#/texts/213"}, {"cref": "#/texts/214"}, {"cref": "#/texts/215"}, {"cref": "#/texts/216"}, {"cref": "#/texts/217"}, {"cref": "#/texts/218"}, {"cref": "#/texts/219"}, {"cref": "#/texts/220"}, {"cref": "#/texts/221"}, {"cref": "#/pictures/23"}, {"cref": "#/texts/222"}, {"cref": "#/texts/223"}, {"cref": "#/groups/16"}, {"cref": "#/texts/229"}, {"cref": "#/texts/230"}, {"cref": "#/texts/231"}, {"cref": "#/texts/232"}, {"cref": "#/texts/233"}, {"cref": "#/texts/234"}, {"cref": "#/texts/235"}, {"cref": "#/texts/236"}, {"cref": "#/texts/237"}, {"cref": "#/texts/238"}, {"cref": "#/texts/239"}, {"cref": "#/texts/240"}, {"cref": "#/texts/241"}, {"cref": "#/texts/242"}, {"cref": "#/pictures/24"}, {"cref": "#/texts/243"}, {"cref": "#/groups/17"}, {"cref": "#/texts/261"}, {"cref": "#/texts/262"}, {"cref": "#/groups/18"}, {"cref": "#/texts/266"}, {"cref": "#/texts/267"}, {"cref": "#/texts/268"}, {"cref": "#/texts/269"}, {"cref": "#/texts/270"}, {"cref": "#/pictures/25"}, {"cref": "#/texts/271"}, {"cref": "#/texts/272"}, {"cref": "#/texts/273"}, {"cref": "#/texts/274"}, {"cref": "#/texts/275"}, {"cref": "#/texts/276"}, {"cref": "#/texts/277"}, {"cref": "#/texts/278"}, {"cref": "#/texts/279"}, {"cref": "#/texts/280"}, {"cref": "#/texts/281"}, {"cref": "#/texts/282"}, {"cref": "#/texts/283"}, {"cref": "#/pictures/26"}, {"cref": "#/texts/284"}, {"cref": "#/groups/19"}, {"cref": "#/texts/290"}, {"cref": "#/texts/291"}, {"cref": "#/texts/292"}, {"cref": "#/texts/293"}, {"cref": "#/texts/294"}, {"cref": "#/texts/295"}, {"cref": "#/texts/296"}, {"cref": "#/texts/297"}, {"cref": "#/texts/298"}, {"cref": "#/texts/299"}, {"cref": "#/texts/300"}, {"cref": "#/texts/301"}, {"cref": "#/texts/302"}, {"cref": "#/texts/303"}, {"cref": "#/texts/304"}, {"cref": "#/texts/305"}, {"cref": "#/texts/306"}, {"cref": "#/texts/307"}, {"cref": "#/pictures/27"}, {"cref": "#/texts/308"}, {"cref": "#/texts/309"}, {"cref": "#/texts/310"}, {"cref": "#/groups/20"}, {"cref": "#/texts/315"}, {"cref": "#/texts/316"}, {"cref": "#/texts/317"}, {"cref": "#/groups/21"}, {"cref": "#/texts/324"}, {"cref": "#/texts/325"}, {"cref": "#/texts/326"}, {"cref": "#/texts/327"}, {"cref": "#/texts/328"}, {"cref": "#/texts/329"}, {"cref": "#/texts/330"}, {"cref": "#/texts/331"}, {"cref": "#/texts/332"}, {"cref": "#/texts/333"}, {"cref": "#/texts/334"}, {"cref": "#/texts/335"}, {"cref": "#/texts/336"}, {"cref": "#/texts/337"}, {"cref": "#/texts/338"}, {"cref": "#/texts/339"}, {"cref": "#/texts/340"}, {"cref": "#/texts/341"}, {"cref": "#/texts/342"}, {"cref": "#/texts/343"}, {"cref": "#/texts/344"}, {"cref": "#/groups/22"}, {"cref": "#/texts/346"}, {"cref": "#/groups/23"}, {"cref": "#/texts/350"}, {"cref": "#/texts/351"}, {"cref": "#/texts/352"}, {"cref": "#/texts/353"}, {"cref": "#/texts/354"}, {"cref": "#/texts/355"}, {"cref": "#/texts/356"}, {"cref": "#/texts/357"}, {"cref": "#/texts/358"}, {"cref": "#/texts/359"}, {"cref": "#/texts/360"}, {"cref": "#/texts/361"}, {"cref": "#/texts/362"}, {"cref": "#/texts/363"}, {"cref": "#/texts/364"}, {"cref": "#/texts/365"}, {"cref": "#/texts/366"}, {"cref": "#/texts/367"}, {"cref": "#/texts/368"}, {"cref": "#/texts/369"}, {"cref": "#/texts/370"}, {"cref": "#/texts/371"}, {"cref": "#/texts/372"}, {"cref": "#/texts/373"}, {"cref": "#/texts/374"}, {"cref": "#/texts/375"}, {"cref": "#/texts/376"}, {"cref": "#/texts/377"}, {"cref": "#/texts/378"}, {"cref": "#/texts/379"}, {"cref": "#/texts/380"}, {"cref": "#/texts/381"}, {"cref": "#/texts/382"}, {"cref": "#/texts/383"}, {"cref": "#/texts/384"}, {"cref": "#/texts/385"}, {"cref": "#/texts/386"}, {"cref": "#/texts/387"}, {"cref": "#/texts/388"}, {"cref": "#/texts/389"}, {"cref": "#/texts/390"}, {"cref": "#/texts/391"}, {"cref": "#/texts/392"}, {"cref": "#/texts/393"}, {"cref": "#/texts/394"}, {"cref": "#/texts/395"}, {"cref": "#/texts/396"}, {"cref": "#/pictures/28"}, {"cref": "#/texts/397"}, {"cref": "#/pictures/29"}, {"cref": "#/texts/398"}, {"cref": "#/texts/399"}, {"cref": "#/texts/400"}, {"cref": "#/pictures/30"}], "name": "_root_", "label": "unspecified"}, "groups": [{"self_ref": "#/groups/0", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/18"}, {"cref": "#/texts/19"}, {"cref": "#/texts/20"}, {"cref": "#/texts/21"}, {"cref": "#/texts/22"}, {"cref": "#/texts/23"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/1", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/60"}, {"cref": "#/texts/61"}, {"cref": "#/texts/62"}, {"cref": "#/texts/63"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/2", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/67"}, {"cref": "#/texts/68"}, {"cref": "#/texts/69"}, {"cref": "#/texts/70"}, {"cref": "#/texts/71"}, {"cref": "#/texts/72"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/3", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/93"}, {"cref": "#/texts/94"}, {"cref": "#/texts/95"}, {"cref": "#/texts/96"}, {"cref": "#/texts/97"}, {"cref": "#/texts/98"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/4", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/109"}, {"cref": "#/texts/110"}, {"cref": "#/texts/111"}, {"cref": "#/texts/112"}, {"cref": "#/texts/113"}, {"cref": "#/texts/114"}, {"cref": "#/texts/115"}, {"cref": "#/texts/116"}, {"cref": "#/texts/117"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/5", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/123"}, {"cref": "#/texts/124"}, {"cref": "#/texts/125"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/6", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/132"}, {"cref": "#/texts/133"}, {"cref": "#/texts/134"}, {"cref": "#/texts/135"}, {"cref": "#/texts/136"}, {"cref": "#/texts/137"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/7", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/152"}, {"cref": "#/texts/153"}, {"cref": "#/texts/154"}, {"cref": "#/texts/155"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/8", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/158"}, {"cref": "#/texts/159"}, {"cref": "#/texts/160"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/9", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/163"}, {"cref": "#/texts/164"}, {"cref": "#/texts/165"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/10", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/167"}, {"cref": "#/texts/168"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/11", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/174"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/12", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/178"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/13", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/180"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/14", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/183"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/15", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/192"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/16", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/224"}, {"cref": "#/texts/225"}, {"cref": "#/texts/226"}, {"cref": "#/texts/227"}, {"cref": "#/texts/228"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/17", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/244"}, {"cref": "#/texts/245"}, {"cref": "#/texts/246"}, {"cref": "#/texts/247"}, {"cref": "#/texts/248"}, {"cref": "#/texts/249"}, {"cref": "#/texts/250"}, {"cref": "#/texts/251"}, {"cref": "#/texts/252"}, {"cref": "#/texts/253"}, {"cref": "#/texts/254"}, {"cref": "#/texts/255"}, {"cref": "#/texts/256"}, {"cref": "#/texts/257"}, {"cref": "#/texts/258"}, {"cref": "#/texts/259"}, {"cref": "#/texts/260"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/18", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/263"}, {"cref": "#/texts/264"}, {"cref": "#/texts/265"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/19", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/285"}, {"cref": "#/texts/286"}, {"cref": "#/texts/287"}, {"cref": "#/texts/288"}, {"cref": "#/texts/289"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/20", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/311"}, {"cref": "#/texts/312"}, {"cref": "#/texts/313"}, {"cref": "#/texts/314"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/21", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/318"}, {"cref": "#/texts/319"}, {"cref": "#/texts/320"}, {"cref": "#/texts/321"}, {"cref": "#/texts/322"}, {"cref": "#/texts/323"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/22", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/345"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/23", "parent": {"cref": "#/body"}, "children": [{"cref": "#/texts/347"}, {"cref": "#/texts/348"}, {"cref": "#/texts/349"}], "name": "list", "label": "list"}], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 285.9599914550781, "t": 782.77197265625, "r": 417.8999938964844, "b": 760.5719604492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Front cover", "text": "Front cover"}, {"self_ref": "#/texts/1", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 1, "bbox": {"l": 44.81999969482422, "t": 683.473876953125, "r": 535.7647094726562, "b": 595.87158203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 31]}], "orig": "IBM Cloud Pak for Data on IBM Z", "text": "IBM Cloud Pak for Data on IBM Z", "level": 1}, {"self_ref": "#/texts/2", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 43.98441696166992, "t": 491.095947265625, "r": 124.95372772216797, "b": 477.7195129394531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Jasmeet Bhatia", "text": "Jasmeet Bhatia"}, {"self_ref": "#/texts/3", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 44.41876983642578, "t": 465.8930969238281, "r": 119.91647338867188, "b": 452.2200012207031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "Ravi Gummadi", "text": "Ravi Gummadi"}, {"self_ref": "#/texts/4", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 44.286624908447266, "t": 440.6647644042969, "r": 204.99734497070312, "b": 426.2153015136719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "Chandra Shekhar Reddy Potula", "text": "Chandra Shekhar Reddy Potula"}, {"self_ref": "#/texts/5", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 44.1224250793457, "t": 415.3961181640625, "r": 128.9265899658203, "b": 401.2209777832031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Srirama Sharma", "text": "Srirama Sharma"}, {"self_ref": "#/texts/6", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 41.496700286865234, "t": 163.001953125, "r": 138.0545654296875, "b": 139.77430725097656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Data and AI", "text": "Data and AI"}, {"self_ref": "#/texts/7", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 3, "bbox": {"l": 64.80000305175781, "t": 535.0673217773438, "r": 292.852783203125, "b": 511.6919860839844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "Executive overview", "text": "Executive overview", "level": 1}, {"self_ref": "#/texts/8", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 135.93707275390625, "t": 476.0090637207031, "r": 547.2804565429688, "b": 393.32940673828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 573]}], "orig": "Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology.", "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology."}, {"self_ref": "#/texts/9", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 135.84193420410156, "t": 381.958984375, "r": 547.349853515625, "b": 323.9799499511719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 392]}], "orig": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences.", "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences."}, {"self_ref": "#/texts/10", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 135.86183166503906, "t": 312.0947265625, "r": 547.2882690429688, "b": 253.34674072265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 385]}], "orig": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput.", "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput."}, {"self_ref": "#/texts/11", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 3, "bbox": {"l": 135.76502990722656, "t": 242.08624267578125, "r": 547.2760009765625, "b": 171.91412353515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 503]}], "orig": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation.", "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"self_ref": "#/texts/12", "parent": {"cref": "#/body"}, "children": [], "label": "footnote", "prov": [{"page_no": 3, "bbox": {"l": 136.8000030517578, "t": 66.7349853515625, "r": 387.7856140136719, "b": 57.0750732421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "orig": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html"}, {"self_ref": "#/texts/13", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 3, "bbox": {"l": 63.59157943725586, "t": 37.41259765625, "r": 180.34423828125, "b": 27.9246826171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "' Copyright IBM Corp. 2023.", "text": "' Copyright IBM Corp. 2023."}, {"self_ref": "#/texts/14", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 3, "bbox": {"l": 541.2573852539062, "t": 37.69696044921875, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "1", "text": "1"}, {"self_ref": "#/texts/15", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 4, "bbox": {"l": 64.69976043701172, "t": 721.8857421875, "r": 212.3214874267578, "b": 706.0162963867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "IBM Z: An overview", "text": "IBM Z: An overview", "level": 1}, {"self_ref": "#/texts/16", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 136.16062927246094, "t": 689.2479858398438, "r": 539.5514526367188, "b": 630.7666015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 365]}], "orig": "Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world's top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency.", "text": "Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world's top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency."}, {"self_ref": "#/texts/17", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 135.83799743652344, "t": 619.38916015625, "r": 515.6898803710938, "b": 597.2792358398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 92]}], "orig": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following features:", "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following features:"}, {"self_ref": "#/texts/18", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 4, "bbox": {"l": 135.797607421875, "t": 590.7014770507812, "r": 255.07154846191406, "b": 580.2049560546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "GLYPH On-chip AI acceleration", "text": "GLYPH On-chip AI acceleration", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/19", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 4, "bbox": {"l": 135.7379150390625, "t": 573.1817626953125, "r": 289.6485290527344, "b": 562.7115478515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "GLYPH Quantum-safe crypto discovery", "text": "GLYPH Quantum-safe crypto discovery", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/20", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 4, "bbox": {"l": 135.6077423095703, "t": 556.6842041015625, "r": 247.8863983154297, "b": 546.2800903320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "GLYPH Simplified compliance", "text": "GLYPH Simplified compliance", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/21", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 4, "bbox": {"l": 135.57025146484375, "t": 539.3775634765625, "r": 225.32553100585938, "b": 528.6082763671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "GLYPH Flexible capacity", "text": "GLYPH Flexible capacity", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/22", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 4, "bbox": {"l": 135.6380615234375, "t": 522.0386962890625, "r": 280.60699462890625, "b": 511.7322692871094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "GLYPH Modernization of applications", "text": "GLYPH Modernization of applications", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/23", "parent": {"cref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [{"page_no": 4, "bbox": {"l": 135.63339233398438, "t": 505.2599792480469, "r": 210.07028198242188, "b": 494.9269104003906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "GLYPH Sustainability", "text": "GLYPH Sustainability", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/24", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 136.1382598876953, "t": 483.1922607421875, "r": 521.9436645507812, "b": 461.2615661621094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 101]}], "orig": "With these features, enterprises can upgrade applications while preserving secure and resilient data.", "text": "With these features, enterprises can upgrade applications while preserving secure and resilient data."}, {"self_ref": "#/texts/25", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 135.73519897460938, "t": 449.32598876953125, "r": 434.5896301269531, "b": 438.9506530761719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "To learn more about these features, see the IBM z16 product page.", "text": "To learn more about these features, see the IBM z16 product page."}, {"self_ref": "#/texts/26", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 4, "bbox": {"l": 136.62892150878906, "t": 427.2217712402344, "r": 415.693603515625, "b": 417.04669189453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe.", "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe."}, {"self_ref": "#/texts/27", "parent": {"cref": "#/body"}, "children": [], "label": "footnote", "prov": [{"page_no": 4, "bbox": {"l": 136.5249786376953, "t": 66.81658935546875, "r": 311.82391357421875, "b": 57.0806884765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/"}, {"self_ref": "#/texts/28", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 4, "bbox": {"l": 63.95490646362305, "t": 37.72607421875, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "2", "text": "2"}, {"self_ref": "#/texts/29", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 4, "bbox": {"l": 87.65045166015625, "t": 37.3072509765625, "r": 261.53851318359375, "b": 28.08099365234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/30", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 5, "bbox": {"l": 135.89208984375, "t": 343.65899658203125, "r": 211.0067596435547, "b": 333.9317321777344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "orig": "Figure 1 IBM z16", "text": "Figure 1 IBM z16"}, {"self_ref": "#/texts/31", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 5, "bbox": {"l": 64.32122039794922, "t": 314.8720397949219, "r": 355.6016540527344, "b": 301.7572937011719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "IBM z16 and IBM LinuxONE Emperor 4 features", "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "level": 1}, {"self_ref": "#/texts/32", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 5, "bbox": {"l": 135.82815551757812, "t": 288.6673583984375, "r": 547.1771240234375, "b": 230.37913513183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 394]}], "orig": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI.", "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI."}, {"self_ref": "#/texts/33", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 5, "bbox": {"l": 541.0438232421875, "t": 37.53704833984375, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "3", "text": "3"}, {"self_ref": "#/texts/34", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 6, "bbox": {"l": 64.14278411865234, "t": 37.86651611328125, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "4", "text": "4"}, {"self_ref": "#/texts/35", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 6, "bbox": {"l": 87.67771911621094, "t": 37.247314453125, "r": 261.53851318359375, "b": 28.11907958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/36", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 136.2760009765625, "t": 721.6217041015625, "r": 543.5195922851562, "b": 699.1505126953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement.", "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement."}, {"self_ref": "#/texts/37", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 6, "bbox": {"l": 64.39653778076172, "t": 413.2160949707031, "r": 213.14488220214844, "b": 403.9766540527344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "Figure 2 IBM Z: Processor roadmap", "text": "Figure 2 IBM Z: Processor roadmap"}, {"self_ref": "#/texts/38", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 136.178955078125, "t": 391.21533203125, "r": 547.256591796875, "b": 297.0632019042969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 689]}], "orig": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a 'built to build' focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization.", "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a 'built to build' focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization."}, {"self_ref": "#/texts/39", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 6, "bbox": {"l": 136.1420135498047, "t": 285.2823181152344, "r": 547.257568359375, "b": 226.8505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 432]}], "orig": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory."}, {"self_ref": "#/texts/40", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 7, "bbox": {"l": 64.30784606933594, "t": 439.85430908203125, "r": 297.72265625, "b": 430.6064758300781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "orig": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4"}, {"self_ref": "#/texts/41", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 7, "bbox": {"l": 135.62088012695312, "t": 417.83917236328125, "r": 547.2974243164062, "b": 359.75799560546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 417]}], "orig": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has \"first in the industry\" on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection.", "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has \"first in the industry\" on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection."}, {"self_ref": "#/texts/42", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 7, "bbox": {"l": 135.72621154785156, "t": 347.9376525878906, "r": 547.322265625, "b": 277.82769775390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 452]}], "orig": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression.", "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression."}, {"self_ref": "#/texts/43", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 7, "bbox": {"l": 541.200439453125, "t": 37.50384521484375, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "5", "text": "5"}, {"self_ref": "#/texts/44", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 8, "bbox": {"l": 64.22818756103516, "t": 37.7176513671875, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "6", "text": "6"}, {"self_ref": "#/texts/45", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 8, "bbox": {"l": 87.59947204589844, "t": 37.28045654296875, "r": 261.53851318359375, "b": 28.08074951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/46", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 136.43333435058594, "t": 721.4392700195312, "r": 541.310546875, "b": 698.982421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores.", "text": "Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores."}, {"self_ref": "#/texts/47", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 8, "bbox": {"l": 64.16301727294922, "t": 427.9372253417969, "r": 387.3546142578125, "b": 418.5439453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores", "text": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores"}, {"self_ref": "#/texts/48", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 135.82852172851562, "t": 406.03216552734375, "r": 547.2345581054688, "b": 323.50567626953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 600]}], "orig": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases.", "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases."}, {"self_ref": "#/texts/49", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 8, "bbox": {"l": 136.02378845214844, "t": 312.1341857910156, "r": 544.6222534179688, "b": 289.4884948730469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 161]}], "orig": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities.", "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities."}, {"self_ref": "#/texts/50", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 9, "bbox": {"l": 64.26493072509766, "t": 490.24163818359375, "r": 189.6370086669922, "b": 481.2569885253906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "orig": "Figure 5 Seamless integration", "text": "Figure 5 Seamless integration"}, {"self_ref": "#/texts/51", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 9, "bbox": {"l": 64.28071594238281, "t": 453.8793029785156, "r": 341.6769714355469, "b": 438.1763000488281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "What is Cloud Pak for Data on IBM Z", "text": "What is Cloud Pak for Data on IBM Z", "level": 1}, {"self_ref": "#/texts/52", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 135.9339141845703, "t": 421.42291259765625, "r": 547.132080078125, "b": 375.2855224609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 353]}], "orig": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680.", "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680."}, {"self_ref": "#/texts/53", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 9, "bbox": {"l": 135.8167266845703, "t": 363.46099853515625, "r": 545.086181640625, "b": 245.02374267578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 857]}], "orig": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses.", "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses."}, {"self_ref": "#/texts/54", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 9, "bbox": {"l": 540.8759155273438, "t": 37.7607421875, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "7", "text": "7"}, {"self_ref": "#/texts/55", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 10, "bbox": {"l": 64.2588882446289, "t": 37.802001953125, "r": 72.8219985961914, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "8", "text": "8"}, {"self_ref": "#/texts/56", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 10, "bbox": {"l": 87.62134552001953, "t": 37.26226806640625, "r": 261.53851318359375, "b": 28.1259765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/57", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 136.00271606445312, "t": 721.300537109375, "r": 547.2805786132812, "b": 627.116455078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 655]}], "orig": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion.", "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion."}, {"self_ref": "#/texts/58", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 10, "bbox": {"l": 64.43482208251953, "t": 308.513671875, "r": 264.0491943359375, "b": 299.04669189453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "Figure 6 Solution overview of Cloud Pak for Data", "text": "Figure 6 Solution overview of Cloud Pak for Data"}, {"self_ref": "#/texts/59", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 135.67288208007812, "t": 286.730712890625, "r": 518.3954467773438, "b": 276.31103515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 87]}], "orig": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D:", "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D:"}, {"self_ref": "#/texts/60", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 10, "bbox": {"l": 135.7481231689453, "t": 269.4034423828125, "r": 255.66061401367188, "b": 259.4186096191406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "GLYPH Performance and Scale", "text": "GLYPH Performance and Scale", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/61", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 10, "bbox": {"l": 135.7166748046875, "t": 252.60040283203125, "r": 257.89263916015625, "b": 242.43878173828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "GLYPH Embedded Accelerators", "text": "GLYPH Embedded Accelerators", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/62", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 10, "bbox": {"l": 135.57183837890625, "t": 235.25732421875, "r": 263.64544677734375, "b": 224.7489013671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 44]}], "orig": "GLYPH Reliability and Availability", "text": "GLYPH Reliability and Availability", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/63", "parent": {"cref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [{"page_no": 10, "bbox": {"l": 135.74082946777344, "t": 218.43896484375, "r": 269.5468444824219, "b": 208.41940307617188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 40]}], "orig": "GLYPH Security and Governance.", "text": "GLYPH Security and Governance.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/64", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 10, "bbox": {"l": 136.00941467285156, "t": 196.88873291015625, "r": 547.2814331054688, "b": 102.2265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 650]}], "orig": "From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security.", "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security."}, {"self_ref": "#/texts/65", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 11, "bbox": {"l": 64.78146362304688, "t": 721.9649047851562, "r": 519.7557983398438, "b": 705.7388916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 57]}], "orig": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "level": 1}, {"self_ref": "#/texts/66", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 135.4989776611328, "t": 689.4481201171875, "r": 544.5404052734375, "b": 643.1683959960938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 291]}], "orig": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks:", "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks:"}, {"self_ref": "#/texts/67", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.4654083251953, "t": 636.006103515625, "r": 341.2695007324219, "b": 626.25927734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 58]}], "orig": "GLYPH Provision various containerized databases.", "text": "GLYPH Provision various containerized databases.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/68", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.58457946777344, "t": 619.3070068359375, "r": 423.5125427246094, "b": 609.0025024414062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "GLYPH Explore, clean, shape, and alter data by using Data Refinery.", "text": "GLYPH Explore, clean, shape, and alter data by using Data Refinery.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/69", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.65841674804688, "t": 602.6298828125, "r": 454.5639343261719, "b": 592.2996826171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 87]}], "orig": "GLYPH Use project-specific data that is uploaded, or connect to distant data.", "text": "GLYPH Use project-specific data that is uploaded, or connect to distant data.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/70", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.5748748779297, "t": 585.3611450195312, "r": 331.7221984863281, "b": 575.02197265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "GLYPH Create Spark run times and applications.", "text": "GLYPH Create Spark run times and applications.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/71", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.54833984375, "t": 568.562255859375, "r": 544.107177734375, "b": 558.2803344726562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 104]}], "orig": "GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "text": "GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/72", "parent": {"cref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [{"page_no": 11, "bbox": {"l": 135.70672607421875, "t": 551.1715087890625, "r": 499.1278381347656, "b": 540.80126953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 92]}], "orig": "GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "text": "GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/73", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 136.2892303466797, "t": 529.4622802734375, "r": 538.98681640625, "b": 507.2811279296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 116]}], "orig": "For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE.", "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE."}, {"self_ref": "#/texts/74", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 11, "bbox": {"l": 64.76227569580078, "t": 479.44775390625, "r": 250.52972412109375, "b": 463.779541015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "Open-source ecosystem", "text": "Open-source ecosystem", "level": 1}, {"self_ref": "#/texts/75", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 135.97999572753906, "t": 447.332275390625, "r": 543.4259643554688, "b": 376.9634094238281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 484]}], "orig": "These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building.", "text": "These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building."}, {"self_ref": "#/texts/76", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 135.85617065429688, "t": 365.35247802734375, "r": 547.2396850585938, "b": 271.137939453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 684]}], "orig": "IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business.", "text": "IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business."}, {"self_ref": "#/texts/77", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 135.98208618164062, "t": 259.3095703125, "r": 537.3534545898438, "b": 213.03485107421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 331]}], "orig": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing."}, {"self_ref": "#/texts/78", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 136.20474243164062, "t": 201.47296142578125, "r": 540.7626342773438, "b": 167.01544189453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 225]}], "orig": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE."}, {"self_ref": "#/texts/79", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 11, "bbox": {"l": 136.00357055664062, "t": 155.3272705078125, "r": 544.6069946289062, "b": 108.96240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 326]}], "orig": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community's continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud.", "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community's continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud."}, {"self_ref": "#/texts/80", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 11, "bbox": {"l": 540.9940795898438, "t": 37.6314697265625, "r": 547.2176513671875, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 1]}], "orig": "9", "text": "9"}, {"self_ref": "#/texts/81", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 12, "bbox": {"l": 64.45117950439453, "t": 37.56591796875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "10", "text": "10"}, {"self_ref": "#/texts/82", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 12, "bbox": {"l": 93.23697662353516, "t": 37.23699951171875, "r": 267.07440185546875, "b": 27.87896728515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/83", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 136.01052856445312, "t": 721.534912109375, "r": 547.312255859375, "b": 651.1951904296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 505]}], "orig": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms.", "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms."}, {"self_ref": "#/texts/84", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 135.78475952148438, "t": 639.2750244140625, "r": 547.3501586914062, "b": 581.2603759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 427]}], "orig": "Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "text": "Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE."}, {"self_ref": "#/texts/85", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 135.8437957763672, "t": 569.2590942382812, "r": 546.230712890625, "b": 499.2002258300781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 501]}], "orig": "In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server.", "text": "In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server."}, {"self_ref": "#/texts/86", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 136.206298828125, "t": 487.1847839355469, "r": 521.3436889648438, "b": 464.8299255371094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 143]}], "orig": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers.", "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers."}, {"self_ref": "#/texts/87", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 12, "bbox": {"l": 64.09524536132812, "t": 437.7701110839844, "r": 191.27430725097656, "b": 421.95269775390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "Why AI on IBM Z", "text": "Why AI on IBM Z", "level": 1}, {"self_ref": "#/texts/88", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 135.68882751464844, "t": 405.32257080078125, "r": 547.2586059570312, "b": 334.8733825683594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 496]}], "orig": "Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI.", "text": "Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI."}, {"self_ref": "#/texts/89", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 135.5255584716797, "t": 323.26287841796875, "r": 547.2825317382812, "b": 240.78839111328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 546]}], "orig": "Traditional ML models' power most of today's ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z).", "text": "Traditional ML models' power most of today's ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z)."}, {"self_ref": "#/texts/90", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 12, "bbox": {"l": 136.04042053222656, "t": 229.3817138671875, "r": 547.3233032226562, "b": 183.20733642578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 288]}], "orig": "Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model.", "text": "Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model."}, {"self_ref": "#/texts/91", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 13, "bbox": {"l": 64.15190887451172, "t": 438.59246826171875, "r": 506.3805236816406, "b": 429.0500793457031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 104]}], "orig": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE"}, {"self_ref": "#/texts/92", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 136.55064392089844, "t": 416.5304260253906, "r": 492.9408264160156, "b": 406.53900146484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "In summary, here are some of the reasons why you should choose AI on IBM Z:", "text": "In summary, here are some of the reasons why you should choose AI on IBM Z:"}, {"self_ref": "#/texts/93", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 135.7388458251953, "t": 399.8339538574219, "r": 413.4001770019531, "b": 389.7225341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "GLYPH World-class AI inference platform for enterprise workloads:", "text": "GLYPH World-class AI inference platform for enterprise workloads:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/94", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 151.22914123535156, "t": 382.5239562988281, "r": 526.1881103515625, "b": 360.75909423828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 89]}], "orig": "-Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores.", "text": "-Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/95", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 151.42306518554688, "t": 353.90643310546875, "r": 547.2465209960938, "b": 331.77947998046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 113]}], "orig": "-Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform.", "text": "-Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/96", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 151.33360290527344, "t": 324.48516845703125, "r": 546.7576904296875, "b": 302.7483825683594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 108]}], "orig": "-Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z.", "text": "-Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/97", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 135.7086639404297, "t": 295.7892761230469, "r": 490.0331726074219, "b": 285.60894775390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 88]}], "orig": "GLYPH Security: Encrypted memory, and improved trusted execution environments.", "text": "GLYPH Security: Encrypted memory, and improved trusted execution environments.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/98", "parent": {"cref": "#/groups/3"}, "children": [], "label": "list_item", "prov": [{"page_no": 13, "bbox": {"l": 135.6390838623047, "t": 278.46600341796875, "r": 547.2705078125, "b": 256.23675537109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 138]}], "orig": "GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system.", "text": "GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/99", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 13, "bbox": {"l": 64.31088256835938, "t": 229.1109619140625, "r": 161.7474365234375, "b": 213.536376953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "AI use cases", "text": "AI use cases", "level": 1}, {"self_ref": "#/texts/100", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 135.98568725585938, "t": 196.73095703125, "r": 533.9012451171875, "b": 162.75877380371094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 262]}], "orig": "With billions of transactions per day in many of today's industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale.", "text": "With billions of transactions per day in many of today's industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale."}, {"self_ref": "#/texts/101", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 135.95875549316406, "t": 150.69287109375, "r": 547.2466430664062, "b": 104.7108154296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 295]}], "orig": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments.", "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"self_ref": "#/texts/102", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 13, "bbox": {"l": 136.34823608398438, "t": 92.72308349609375, "r": 547.311279296875, "b": 70.34014892578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 146]}], "orig": "For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount.", "text": "For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount."}, {"self_ref": "#/texts/103", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 13, "bbox": {"l": 535.8191528320312, "t": 37.69769287109375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "11", "text": "11"}, {"self_ref": "#/texts/104", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 14, "bbox": {"l": 64.53218078613281, "t": 37.490966796875, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "12", "text": "12"}, {"self_ref": "#/texts/105", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 14, "bbox": {"l": 93.2241439819336, "t": 37.23846435546875, "r": 267.07440185546875, "b": 27.8603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/106", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 136.15476989746094, "t": 721.3535766601562, "r": 525.1851196289062, "b": 687.272216796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 184]}], "orig": "For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important.", "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important."}, {"self_ref": "#/texts/107", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 135.8750762939453, "t": 675.216796875, "r": 547.3113403320312, "b": 641.2594604492188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 192]}], "orig": "For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z.", "text": "For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z."}, {"self_ref": "#/texts/108", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 136.158935546875, "t": 629.2716674804688, "r": 413.4231262207031, "b": 619.072021484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "In the following sections, we describe the following use cases:", "text": "In the following sections, we describe the following use cases:"}, {"self_ref": "#/texts/109", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.51185607910156, "t": 611.6864624023438, "r": 545.1838989257812, "b": 561.1438598632812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 306]}], "orig": "GLYPH \"Use case 1: Responsible AI augmented with risk and regulatory compliance\" on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks.", "text": "GLYPH \"Use case 1: Responsible AI augmented with risk and regulatory compliance\" on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/110", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.6671600341797, "t": 554.774658203125, "r": 402.90234375, "b": 544.2023315429688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "GLYPH \"Use case 2: Credit default risk assessment\" on page 22", "text": "GLYPH \"Use case 2: Credit default risk assessment\" on page 22", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/111", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 150.19342041015625, "t": 537.3115234375, "r": 547.2406005859375, "b": 490.9925842285156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 295]}], "orig": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments.", "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/112", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.68087768554688, "t": 484.5167236328125, "r": 371.79620361328125, "b": 474.0491638183594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 64]}], "orig": "GLYPH \"Use case 3: Clearing and settlement\" on page 25", "text": "GLYPH \"Use case 3: Clearing and settlement\" on page 25", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/113", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 150.48846435546875, "t": 467.4772033691406, "r": 541.1401977539062, "b": 445.0339660644531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 151]}], "orig": "The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process.", "text": "The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/114", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.71913146972656, "t": 438.1060485839844, "r": 455.3772277832031, "b": 427.7883605957031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 84]}], "orig": "GLYPH \"Use case 4: Remaining Useful Life of an aircraft engine\" on page 27", "text": "GLYPH \"Use case 4: Remaining Useful Life of an aircraft engine\" on page 27", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/115", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 150.2084197998047, "t": 421.3099365234375, "r": 534.64013671875, "b": 399.0348205566406, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 169]}], "orig": "We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure.", "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/116", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.66246032714844, "t": 392.64227294921875, "r": 539.6531372070312, "b": 370.3010559082031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 112]}], "orig": "GLYPH \"Use case 5: AI-powered video analytics on an infant's motions for health prediction\" on page 30", "text": "GLYPH \"Use case 5: AI-powered video analytics on an infant's motions for health prediction\" on page 30", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/117", "parent": {"cref": "#/groups/4"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 150.8683624267578, "t": 363.34478759765625, "r": 547.24267578125, "b": 340.944091796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 117]}], "orig": "In this section, we describe how AI can predict an infant's health conditions by monitoring real-time body movements.", "text": "In this section, we describe how AI can predict an infant's health conditions by monitoring real-time body movements.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/118", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 14, "bbox": {"l": 64.4876708984375, "t": 313.88934326171875, "r": 547.2564697265625, "b": 278.525634765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 72]}], "orig": "Use case 1: Responsible AI augmented with risk and regulatory compliance", "text": "Use case 1: Responsible AI augmented with risk and regulatory compliance", "level": 1}, {"self_ref": "#/texts/119", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 135.6639404296875, "t": 262.65277099609375, "r": 547.1787719726562, "b": 216.21588134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 326]}], "orig": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task.", "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task."}, {"self_ref": "#/texts/120", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 136.313232421875, "t": 203.98114013671875, "r": 547.2424926757812, "b": 181.63140869140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 152]}], "orig": "How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring.", "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring."}, {"self_ref": "#/texts/121", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 14, "bbox": {"l": 64.53734588623047, "t": 162.76495361328125, "r": 186.71859741210938, "b": 149.578857421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "Industry challenges", "text": "Industry challenges", "level": 1}, {"self_ref": "#/texts/122", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 14, "bbox": {"l": 136.22996520996094, "t": 136.4630126953125, "r": 508.98724365234375, "b": 126.27838134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 83]}], "orig": "Here are the three main reasons why organizations struggle with the adoption of AI:", "text": "Here are the three main reasons why organizations struggle with the adoption of AI:"}, {"self_ref": "#/texts/123", "parent": {"cref": "#/groups/5"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.8061065673828, "t": 119.39752197265625, "r": 293.9800720214844, "b": 109.0609130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "GLYPH Scaling with growing regulations", "text": "GLYPH Scaling with growing regulations", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/124", "parent": {"cref": "#/groups/5"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.63792419433594, "t": 102.025390625, "r": 435.7274475097656, "b": 91.513916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 80]}], "orig": "GLYPH Lack of confidence in operationalized AI (making responsible AI)", "text": "GLYPH Lack of confidence in operationalized AI (making responsible AI)", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/125", "parent": {"cref": "#/groups/5"}, "children": [], "label": "list_item", "prov": [{"page_no": 14, "bbox": {"l": 135.60543823242188, "t": 85.32098388671875, "r": 466.06842041015625, "b": 74.8839111328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 85]}], "orig": "GLYPH Challenges around managing the risk throughout the entire AI workflow", "text": "GLYPH Challenges around managing the risk throughout the entire AI workflow", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/126", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 15, "bbox": {"l": 136.29180908203125, "t": 721.60595703125, "r": 324.71160888671875, "b": 709.186767578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "orig": "Scaling with growing regulations", "text": "Scaling with growing regulations", "level": 1}, {"self_ref": "#/texts/127", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 135.92501831054688, "t": 706.7998046875, "r": 536.3155517578125, "b": 636.2792358398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 476]}], "orig": "Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination.", "text": "Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination."}, {"self_ref": "#/texts/128", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 15, "bbox": {"l": 136.52218627929688, "t": 620.21044921875, "r": 223.41616821289062, "b": 608.3349609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Responsible AI", "text": "Responsible AI", "level": 1}, {"self_ref": "#/texts/129", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 135.9759521484375, "t": 605.3233642578125, "r": 547.3283081054688, "b": 558.9086303710938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 362]}], "orig": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable.", "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable."}, {"self_ref": "#/texts/130", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 15, "bbox": {"l": 136.5354461669922, "t": 543.5475463867188, "r": 364.06561279296875, "b": 531.4407348632812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 39]}], "orig": "Risks throughout the entire AI workflow", "text": "Risks throughout the entire AI workflow", "level": 1}, {"self_ref": "#/texts/131", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 136.28106689453125, "t": 528.0078735351562, "r": 389.47918701171875, "b": 517.4302978515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 59]}], "orig": "Organizations need to mitigate risk of the following items:", "text": "Organizations need to mitigate risk of the following items:"}, {"self_ref": "#/texts/132", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 135.77525329589844, "t": 511.2773742675781, "r": 382.91455078125, "b": 501.0934753417969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 69]}], "orig": "GLYPH Deciding not to use certain technologies or practices", "text": "GLYPH Deciding not to use certain technologies or practices", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/133", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 135.74273681640625, "t": 494.5668640136719, "r": 450.990234375, "b": 483.94232177734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 80]}], "orig": "GLYPH Using personal information when needed and with a user's consent", "text": "GLYPH Using personal information when needed and with a user's consent", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/134", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 135.5438995361328, "t": 477.4102478027344, "r": 366.2126770019531, "b": 467.1396484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "GLYPH Ensuring automated decisions are free from bias", "text": "GLYPH Ensuring automated decisions are free from bias", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/135", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 135.47459411621094, "t": 460.52044677734375, "r": 462.3146057128906, "b": 450.2794494628906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 84]}], "orig": "GLYPH Customer confidence by providing explanations for business decisions", "text": "GLYPH Customer confidence by providing explanations for business decisions", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/136", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 135.48123168945312, "t": 443.2645263671875, "r": 386.45635986328125, "b": 433.125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "orig": "GLYPH Fraud to the organization and to customer's accounts", "text": "GLYPH Fraud to the organization and to customer's accounts", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/137", "parent": {"cref": "#/groups/6"}, "children": [], "label": "list_item", "prov": [{"page_no": 15, "bbox": {"l": 135.62051391601562, "t": 425.9614562988281, "r": 331.2491149902344, "b": 415.7923278808594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 56]}], "orig": "GLYPH Delays in putting models into production", "text": "GLYPH Delays in putting models into production", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/138", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 136.05039978027344, "t": 404.44390869140625, "r": 547.186767578125, "b": 370.3006286621094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important.", "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important."}, {"self_ref": "#/texts/139", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 15, "bbox": {"l": 135.85047912597656, "t": 358.5035705566406, "r": 547.24658203125, "b": 300.28179931640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 431]}], "orig": "The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the \"why\" of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively.", "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the \"why\" of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively."}, {"self_ref": "#/texts/140", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 15, "bbox": {"l": 535.9011840820312, "t": 37.63787841796875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "13", "text": "13"}, {"self_ref": "#/texts/141", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 16, "bbox": {"l": 64.407470703125, "t": 37.68829345703125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "14", "text": "14"}, {"self_ref": "#/texts/142", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 16, "bbox": {"l": 93.1883316040039, "t": 37.2742919921875, "r": 267.07440185546875, "b": 27.84478759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/143", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 136.13604736328125, "t": 721.3720703125, "r": 547.3073120117188, "b": 674.9320678710938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 309]}], "orig": "For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise.", "text": "For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise."}, {"self_ref": "#/texts/144", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 16, "bbox": {"l": 64.17765808105469, "t": 459.9346618652344, "r": 206.827880859375, "b": 450.5130310058594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Figure 8 Typical AI model lifecycle", "text": "Figure 8 Typical AI model lifecycle"}, {"self_ref": "#/texts/145", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 135.79885864257812, "t": 437.8577880859375, "r": 540.1202392578125, "b": 367.7792053222656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 464]}], "orig": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows.", "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows."}, {"self_ref": "#/texts/146", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 16, "bbox": {"l": 64.70143127441406, "t": 348.428955078125, "r": 279.45147705078125, "b": 335.1172790527344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "orig": "IBM governance solution for IBM Z", "text": "IBM governance solution for IBM Z", "level": 1}, {"self_ref": "#/texts/147", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 135.8342742919922, "t": 322.05352783203125, "r": 540.66015625, "b": 299.73846435546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 112]}], "orig": "AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises.", "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises."}, {"self_ref": "#/texts/148", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 135.8035888671875, "t": 288.0574645996094, "r": 547.3551025390625, "b": 181.78021240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 755]}], "orig": "AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization's use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model's behavior throughout the lifecycle, the data that was influential in its development, and the possible risks.", "text": "AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization's use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model's behavior throughout the lifecycle, the data that was influential in its development, and the possible risks."}, {"self_ref": "#/texts/149", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 16, "bbox": {"l": 135.9875030517578, "t": 170.0089111328125, "r": 543.354248046875, "b": 123.76123809814453, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 292]}], "orig": "In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance.", "text": "In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance."}, {"self_ref": "#/texts/150", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 17, "bbox": {"l": 136.3389434814453, "t": 721.6488037109375, "r": 249.09483337402344, "b": 710.2207641601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 20]}], "orig": "Lifecycle governance", "text": "Lifecycle governance", "level": 1}, {"self_ref": "#/texts/151", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 135.980224609375, "t": 706.5272827148438, "r": 544.0435791015625, "b": 672.2786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 202]}], "orig": "Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements:", "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements:"}, {"self_ref": "#/texts/152", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.69290161132812, "t": 665.34814453125, "r": 517.3616333007812, "b": 654.88720703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle.", "text": "GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/153", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.61203002929688, "t": 647.9351806640625, "r": 428.482666015625, "b": 637.7196655273438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 77]}], "orig": "GLYPH Automate the capture of model metadata for report generation.", "text": "GLYPH Automate the capture of model metadata for report generation.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/154", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.6266632080078, "t": 631.390380859375, "r": 352.8333740234375, "b": 621.0405883789062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "GLYPH Drive transparent and explainable AI at scale.", "text": "GLYPH Drive transparent and explainable AI at scale.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/155", "parent": {"cref": "#/groups/7"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.69007873535156, "t": 614.5416259765625, "r": 531.1472778320312, "b": 604.1846923828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "orig": "GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging.", "text": "GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/156", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 17, "bbox": {"l": 136.56716918945312, "t": 591.5065307617188, "r": 231.8074951171875, "b": 580.2343139648438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "Risk management", "text": "Risk management", "level": 1}, {"self_ref": "#/texts/157", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 136.1630859375, "t": 575.9500122070312, "r": 544.0723266601562, "b": 554.0730590820312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 130]}], "orig": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale:", "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale:"}, {"self_ref": "#/texts/158", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.6591033935547, "t": 547.224853515625, "r": 497.7820739746094, "b": 537.1072998046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 89]}], "orig": "GLYPH Automate facts and workflow management to comply with business standards.", "text": "GLYPH Automate facts and workflow management to comply with business standards.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/159", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.6646270751953, "t": 530.64794921875, "r": 455.0130310058594, "b": 520.2988891601562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "orig": "GLYPH Use dynamic dashboards for clear and concise customizable results.", "text": "GLYPH Use dynamic dashboards for clear and concise customizable results.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/160", "parent": {"cref": "#/groups/8"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.5814971923828, "t": 513.4422607421875, "r": 440.54815673828125, "b": 503.1455383300781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 79]}], "orig": "GLYPH Enhanced collaboration across multiple regions and geographies.", "text": "GLYPH Enhanced collaboration across multiple regions and geographies.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/161", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 17, "bbox": {"l": 136.37454223632812, "t": 490.6622314453125, "r": 258.3398742675781, "b": 479.4071350097656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "Regulatory compliance", "text": "Regulatory compliance", "level": 1}, {"self_ref": "#/texts/162", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 135.9670867919922, "t": 475.1661071777344, "r": 547.2466430664062, "b": 428.6660461425781, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 366]}], "orig": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:"}, {"self_ref": "#/texts/163", "parent": {"cref": "#/groups/9"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.71563720703125, "t": 422.6202392578125, "r": 433.3389892578125, "b": 412.0512390136719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 80]}], "orig": "GLYPH Help adhere to external AI regulations for audit and compliance.", "text": "GLYPH Help adhere to external AI regulations for audit and compliance.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/164", "parent": {"cref": "#/groups/9"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.65516662597656, "t": 405.3585205078125, "r": 465.02978515625, "b": 394.9600830078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 88]}], "orig": "GLYPH Convert external AI regulations into policies for automatic enforcement.", "text": "GLYPH Convert external AI regulations into policies for automatic enforcement.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/165", "parent": {"cref": "#/groups/9"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.6472930908203, "t": 388.6190490722656, "r": 503.326171875, "b": 378.27911376953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 93]}], "orig": "GLYPH Use dynamic dashboards for compliance status across policies and regulations.", "text": "GLYPH Use dynamic dashboards for compliance status across policies and regulations.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/166", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 136.04916381835938, "t": 366.0682067871094, "r": 547.2515869140625, "b": 319.36859130859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 271]}], "orig": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways:", "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways:"}, {"self_ref": "#/texts/167", "parent": {"cref": "#/groups/10"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.6191864013672, "t": 313.45947265625, "r": 526.8416137695312, "b": 291.2804870605469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 119]}], "orig": "GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z.", "text": "GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/168", "parent": {"cref": "#/groups/10"}, "children": [], "label": "list_item", "prov": [{"page_no": 17, "bbox": {"l": 135.48377990722656, "t": 284.0699462890625, "r": 541.8055419921875, "b": 225.61773681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 413]}], "orig": "GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "text": "GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/169", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 17, "bbox": {"l": 136.42056274414062, "t": 214.4039306640625, "r": 512.4911499023438, "b": 204.2818603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "orig": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution.", "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution."}, {"self_ref": "#/texts/170", "parent": {"cref": "#/body"}, "children": [], "label": "footnote", "prov": [{"page_no": 17, "bbox": {"l": 136.24427795410156, "t": 66.9732666015625, "r": 418.4429931640625, "b": 56.91937255859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance"}, {"self_ref": "#/texts/171", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 17, "bbox": {"l": 535.963623046875, "t": 37.68475341796875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "15", "text": "15"}, {"self_ref": "#/texts/172", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 18, "bbox": {"l": 64.34585571289062, "t": 498.58984375, "r": 295.9040222167969, "b": 489.1927490234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Figure 9 Remote AI governance solution end-to-end flow", "text": "Figure 9 Remote AI governance solution end-to-end flow"}, {"self_ref": "#/texts/173", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 18, "bbox": {"l": 136.1533203125, "t": 476.65362548828125, "r": 438.0164794921875, "b": 466.38671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 66]}], "orig": "To achieve end-to-end AI governance, complete the following steps:", "text": "To achieve end-to-end AI governance, complete the following steps:"}, {"self_ref": "#/texts/174", "parent": {"cref": "#/groups/11"}, "children": [], "label": "list_item", "prov": [{"page_no": 18, "bbox": {"l": 136.8000030517578, "t": 460.077880859375, "r": 541.7039184570312, "b": 437.72967529296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10.", "text": "1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/175", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 18, "bbox": {"l": 64.25994873046875, "t": 123.18603515625, "r": 279.38360595703125, "b": 113.96868896484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "Figure 10 Creating a model entry in IBM OpenPages", "text": "Figure 10 Creating a model entry in IBM OpenPages"}, {"self_ref": "#/texts/176", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 18, "bbox": {"l": 64.45965576171875, "t": 37.55645751953125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "16", "text": "16"}, {"self_ref": "#/texts/177", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 18, "bbox": {"l": 93.34640502929688, "t": 37.273681640625, "r": 267.07440185546875, "b": 27.83563232421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/178", "parent": {"cref": "#/groups/12"}, "children": [], "label": "list_item", "prov": [{"page_no": 19, "bbox": {"l": 135.98834228515625, "t": 721.23388671875, "r": 542.9114379882812, "b": 686.9762573242188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 192]}], "orig": "2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11.", "text": "2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/179", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 19, "bbox": {"l": 64.27749633789062, "t": 375.8592834472656, "r": 290.4153137207031, "b": 366.48577880859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "Figure 11 Training an AI model by using Watson Studio", "text": "Figure 11 Training an AI model by using Watson Studio"}, {"self_ref": "#/texts/180", "parent": {"cref": "#/groups/13"}, "children": [], "label": "list_item", "prov": [{"page_no": 19, "bbox": {"l": 136.21717834472656, "t": 353.99700927734375, "r": 547.2686767578125, "b": 331.84283447265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12.", "text": "3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/181", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 19, "bbox": {"l": 64.3975601196289, "t": 65.911376953125, "r": 351.1659851074219, "b": 56.48388671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 66]}], "orig": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data"}, {"self_ref": "#/texts/182", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 19, "bbox": {"l": 535.8695068359375, "t": 37.5572509765625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "17", "text": "17"}, {"self_ref": "#/texts/183", "parent": {"cref": "#/groups/14"}, "children": [], "label": "list_item", "prov": [{"page_no": 20, "bbox": {"l": 135.78439331054688, "t": 721.399658203125, "r": 547.24560546875, "b": 674.989501953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 338]}], "orig": "4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "text": "4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/184", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 20, "bbox": {"l": 136.2765350341797, "t": 403.81927490234375, "r": 242.76724243164062, "b": 394.5011291503906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "orig": "Figure 13 External model", "text": "Figure 13 External model"}, {"self_ref": "#/texts/185", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 20, "bbox": {"l": 150.45053100585938, "t": 382.123291015625, "r": 547.290283203125, "b": 359.73297119140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages.", "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages."}, {"self_ref": "#/texts/186", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 20, "bbox": {"l": 64.26177978515625, "t": 81.8817138671875, "r": 187.44825744628906, "b": 72.2799072265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "orig": "Figure 14 Tracking the model", "text": "Figure 14 Tracking the model"}, {"self_ref": "#/texts/187", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 20, "bbox": {"l": 64.46235656738281, "t": 37.5947265625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "18", "text": "18"}, {"self_ref": "#/texts/188", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 20, "bbox": {"l": 93.31233978271484, "t": 37.3203125, "r": 267.07440185546875, "b": 27.7569580078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/189", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 21, "bbox": {"l": 150.36676025390625, "t": 721.2769165039062, "r": 547.2222290039062, "b": 699.0984497070312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 122]}], "orig": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15.", "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15."}, {"self_ref": "#/texts/190", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 21, "bbox": {"l": 64.23995208740234, "t": 377.292236328125, "r": 450.36871337890625, "b": 368.12579345703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "orig": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform"}, {"self_ref": "#/texts/191", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 21, "bbox": {"l": 535.8822631835938, "t": 37.6324462890625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "19", "text": "19"}, {"self_ref": "#/texts/192", "parent": {"cref": "#/groups/15"}, "children": [], "label": "list_item", "prov": [{"page_no": 22, "bbox": {"l": 136.09112548828125, "t": 721.4546508789062, "r": 525.693115234375, "b": 698.8700561523438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 94]}], "orig": "5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16.", "text": "5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/193", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 22, "bbox": {"l": 64.40975189208984, "t": 407.9462585449219, "r": 295.9855651855469, "b": 398.55523681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "Figure 16 Creating an external model on an x86 platform", "text": "Figure 16 Creating an external model on an x86 platform"}, {"self_ref": "#/texts/194", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 22, "bbox": {"l": 135.78622436523438, "t": 386.0187683105469, "r": 547.329345703125, "b": 339.69549560546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 356]}], "orig": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21."}, {"self_ref": "#/texts/195", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 22, "bbox": {"l": 63.867469787597656, "t": 37.66998291015625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "20", "text": "20"}, {"self_ref": "#/texts/196", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 22, "bbox": {"l": 93.32005310058594, "t": 37.29931640625, "r": 267.07440185546875, "b": 27.82635498046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/197", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 23, "bbox": {"l": 64.26493835449219, "t": 438.6904602050781, "r": 386.60101318359375, "b": 429.2548522949219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 76]}], "orig": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model"}, {"self_ref": "#/texts/198", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 23, "bbox": {"l": 135.85134887695312, "t": 416.78009033203125, "r": 547.2167358398438, "b": 358.6399230957031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 340]}], "orig": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale.", "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale."}, {"self_ref": "#/texts/199", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 23, "bbox": {"l": 64.34110260009766, "t": 67.2464599609375, "r": 507.7935485839844, "b": 57.9146728515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "orig": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale"}, {"self_ref": "#/texts/200", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 23, "bbox": {"l": 535.4277954101562, "t": 37.76495361328125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "21", "text": "21"}, {"self_ref": "#/texts/201", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 24, "bbox": {"l": 64.80000305175781, "t": 721.75732421875, "r": 389.5157470703125, "b": 706.0162963867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 42]}], "orig": "Use case 2: Credit default risk assessment", "text": "Use case 2: Credit default risk assessment", "level": 1}, {"self_ref": "#/texts/202", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 136.07400512695312, "t": 689.2387084960938, "r": 547.2247314453125, "b": 655.279296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 265]}], "orig": "In today's world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations.", "text": "In today's world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations."}, {"self_ref": "#/texts/203", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 24, "bbox": {"l": 64.54896545410156, "t": 635.5101318359375, "r": 186.71859741210938, "b": 622.16162109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "Industry challenges", "text": "Industry challenges", "level": 1}, {"self_ref": "#/texts/204", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 136.15374755859375, "t": 609.3872680664062, "r": 547.2955322265625, "b": 563.0860595703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 366]}], "orig": "Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone's likelihood of default, but that is not an efficient method for judgment as a business grows.", "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone's likelihood of default, but that is not an efficient method for judgment as a business grows."}, {"self_ref": "#/texts/205", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 24, "bbox": {"l": 64.6235122680664, "t": 543.4171142578125, "r": 341.16033935546875, "b": 530.6572875976562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 45]}], "orig": "Predictions of credit default risk assessment", "text": "Predictions of credit default risk assessment", "level": 1}, {"self_ref": "#/texts/206", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 135.9077606201172, "t": 517.2838745117188, "r": 547.2635498046875, "b": 435.2793884277344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 579]}], "orig": "In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan.", "text": "In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan."}, {"self_ref": "#/texts/207", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 136.04486083984375, "t": 423.1811218261719, "r": 547.1471557617188, "b": 389.1506042480469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 252]}], "orig": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk.", "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk."}, {"self_ref": "#/texts/208", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 24, "bbox": {"l": 136.09634399414062, "t": 377.2167663574219, "r": 547.2008666992188, "b": 330.975341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 321]}], "orig": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model.", "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model."}, {"self_ref": "#/texts/209", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 24, "bbox": {"l": 63.85818862915039, "t": 37.5885009765625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "22", "text": "22"}, {"self_ref": "#/texts/210", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 24, "bbox": {"l": 93.21298217773438, "t": 37.21533203125, "r": 267.07440185546875, "b": 27.90716552734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/211", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 25, "bbox": {"l": 64.25103759765625, "t": 448.5760498046875, "r": 395.7005615234375, "b": 439.3569641113281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "orig": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z"}, {"self_ref": "#/texts/212", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.72901916503906, "t": 426.48486328125, "r": 547.34521484375, "b": 380.574951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 317]}], "orig": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import.", "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import."}, {"self_ref": "#/texts/213", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.47738647460938, "t": 368.5098876953125, "r": 545.5831909179688, "b": 310.60186767578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 424]}], "orig": "Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors.", "text": "Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors."}, {"self_ref": "#/texts/214", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.9343719482422, "t": 298.35601806640625, "r": 528.6572875976562, "b": 264.64080810546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications.", "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications."}, {"self_ref": "#/texts/215", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.85601806640625, "t": 252.58935546875, "r": 547.310546875, "b": 182.3758544921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 498]}], "orig": "Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction.", "text": "Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction."}, {"self_ref": "#/texts/216", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 25, "bbox": {"l": 135.7754364013672, "t": 170.63201904296875, "r": 547.2376708984375, "b": 148.32958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 173]}], "orig": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk.", "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk."}, {"self_ref": "#/texts/217", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 25, "bbox": {"l": 535.4268188476562, "t": 37.6199951171875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "23", "text": "23"}, {"self_ref": "#/texts/218", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 26, "bbox": {"l": 63.90467071533203, "t": 37.68109130859375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "24", "text": "24"}, {"self_ref": "#/texts/219", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 26, "bbox": {"l": 93.28766632080078, "t": 37.2451171875, "r": 267.07440185546875, "b": 27.8919677734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/220", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 136.43939208984375, "t": 721.3068237304688, "r": 489.5701599121094, "b": 710.9625244140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 80]}], "orig": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z.", "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z."}, {"self_ref": "#/texts/221", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 26, "bbox": {"l": 64.37335968017578, "t": 430.6827697753906, "r": 344.09613037109375, "b": 421.3126220703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "orig": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z"}, {"self_ref": "#/texts/222", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 136.12535095214844, "t": 408.48529052734375, "r": 534.5686645507812, "b": 362.44940185546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 335]}], "orig": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model's endpoint.", "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model's endpoint."}, {"self_ref": "#/texts/223", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 26, "bbox": {"l": 136.19705200195312, "t": 350.4607849121094, "r": 547.2158813476562, "b": 328.7194519042969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 108]}], "orig": "In summary, here are some considerations for developing real-time AI models, such as credit risk assessment:", "text": "In summary, here are some considerations for developing real-time AI models, such as credit risk assessment:"}, {"self_ref": "#/texts/224", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.6735076904297, "t": 322.04962158203125, "r": 522.9054565429688, "b": 311.7396545410156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 102]}], "orig": "GLYPH A preference for in-platform run times of the model, such as faster execution results.", "text": "GLYPH A preference for in-platform run times of the model, such as faster execution results.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/225", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.52078247070312, "t": 304.5061340332031, "r": 445.5369873046875, "b": 294.32757568359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 81]}], "orig": "GLYPH Less overhead in the end-to-end flows might improve scoring time.", "text": "GLYPH Less overhead in the end-to-end flows might improve scoring time.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/226", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.63246154785156, "t": 287.9996643066406, "r": 547.3232421875, "b": 265.68341064453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 168]}], "orig": "GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform.", "text": "GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/227", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.62271118164062, "t": 258.63983154296875, "r": 541.7804565429688, "b": 236.74082946777344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 115]}], "orig": "GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment.", "text": "GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/228", "parent": {"cref": "#/groups/16"}, "children": [], "label": "list_item", "prov": [{"page_no": 26, "bbox": {"l": 135.50205993652344, "t": 230.15380859375, "r": 531.8067626953125, "b": 195.76141357421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 234]}], "orig": "GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means.", "text": "GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/229", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 27, "bbox": {"l": 64.79078674316406, "t": 721.92333984375, "r": 338.5379638671875, "b": 705.6964721679688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "orig": "Use case 3: Clearing and settlement", "text": "Use case 3: Clearing and settlement", "level": 1}, {"self_ref": "#/texts/230", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.91648864746094, "t": 689.2892456054688, "r": 539.5654907226562, "b": 630.9378051757812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 433]}], "orig": "Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day.", "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day."}, {"self_ref": "#/texts/231", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 27, "bbox": {"l": 64.3849868774414, "t": 611.3507690429688, "r": 179.53228759765625, "b": 598.3488159179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "Industry challenge", "text": "Industry challenge", "level": 1}, {"self_ref": "#/texts/232", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 136.17025756835938, "t": 585.2027587890625, "r": 538.4359130859375, "b": 563.2137451171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 184]}], "orig": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs.", "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs."}, {"self_ref": "#/texts/233", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 27, "bbox": {"l": 64.63189697265625, "t": 543.4601440429688, "r": 266.077880859375, "b": 530.2203369140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 32]}], "orig": "Clearing and settlement solution", "text": "Clearing and settlement solution", "level": 1}, {"self_ref": "#/texts/234", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.968505859375, "t": 517.2374267578125, "r": 545.6968383789062, "b": 470.9981994628906, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 277]}], "orig": "Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts.", "text": "Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts."}, {"self_ref": "#/texts/235", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.97213745117188, "t": 459.1885681152344, "r": 544.662109375, "b": 389.1208190917969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 499]}], "orig": "In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions.", "text": "In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions."}, {"self_ref": "#/texts/236", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.8656463623047, "t": 377.083740234375, "r": 543.3472900390625, "b": 319.3011169433594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 430]}], "orig": "The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds.", "text": "The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds."}, {"self_ref": "#/texts/237", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 27, "bbox": {"l": 135.92105102539062, "t": 307.17913818359375, "r": 547.2335815429688, "b": 261.00042724609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 298]}], "orig": "One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint.", "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint."}, {"self_ref": "#/texts/238", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 27, "bbox": {"l": 535.565673828125, "t": 37.67999267578125, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "25", "text": "25"}, {"self_ref": "#/texts/239", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 28, "bbox": {"l": 63.89773941040039, "t": 37.6005859375, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "26", "text": "26"}, {"self_ref": "#/texts/240", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 28, "bbox": {"l": 93.21942138671875, "t": 37.2734375, "r": 267.07440185546875, "b": 27.8814697265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/241", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 28, "bbox": {"l": 136.25498962402344, "t": 721.3104858398438, "r": 537.352294921875, "b": 699.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 146]}], "orig": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE.", "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE."}, {"self_ref": "#/texts/242", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 28, "bbox": {"l": 64.17871856689453, "t": 477.33721923828125, "r": 459.98809814453125, "b": 467.9989013671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data", "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data"}, {"self_ref": "#/texts/243", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 28, "bbox": {"l": 136.43458557128906, "t": 455.203369140625, "r": 353.37115478515625, "b": 445.08782958984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "Here are the steps of the high-level process flow:", "text": "Here are the steps of the high-level process flow:"}, {"self_ref": "#/texts/244", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.8000030517578, "t": 437.9080505371094, "r": 524.740966796875, "b": 415.95501708984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 135]}], "orig": "1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building.", "text": "1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/245", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.05679321289062, "t": 409.4246826171875, "r": 542.9837646484375, "b": 387.2192687988281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "orig": "2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D.", "text": "2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/246", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.27484130859375, "t": 380.01947021484375, "r": 545.7424926757812, "b": 345.4718933105469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 188]}], "orig": "3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository.", "text": "3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/247", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.03822326660156, "t": 339.3093566894531, "r": 468.5547790527344, "b": 328.7619323730469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "4. Deploy the saved model into a deployment space for batch deployment.", "text": "4. Deploy the saved model into a deployment space for batch deployment.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/248", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.39476013183594, "t": 321.93609619140625, "r": 417.2825622558594, "b": 311.90350341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 62]}], "orig": "5. Create a batch deployment by using any of these interfaces:", "text": "5. Create a batch deployment by using any of these interfaces:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/249", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 150.49728393554688, "t": 305.3652038574219, "r": 460.12939453125, "b": 295.11468505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 67]}], "orig": "a. Watson Studio user interface from an Analytics deployment space.", "text": "a. Watson Studio user interface from an Analytics deployment space.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/250", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 150.5271759033203, "t": 288.0757751464844, "r": 251.6896209716797, "b": 277.79693603515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 21]}], "orig": "b. WML Python client.", "text": "b. WML Python client.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/251", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 150.59584045410156, "t": 271.8419189453125, "r": 244.95565795898438, "b": 261.2212829589844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "c. WML REST APIs.", "text": "c. WML REST APIs.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/252", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.3202667236328, "t": 254.1214599609375, "r": 418.506591796875, "b": 243.8004150390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 61]}], "orig": "6. A hardware configuration can be chosen for the deployment.", "text": "6. A hardware configuration can be chosen for the deployment.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/253", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.2103271484375, "t": 237.25958251953125, "r": 545.685791015625, "b": 214.9263916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 160]}], "orig": "7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination.", "text": "7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/254", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.31875610351562, "t": 208.01806640625, "r": 510.0397033691406, "b": 185.52032470703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 99]}], "orig": "8. One way to run batch deployment to predict or score is to create and run a batch deployment job.", "text": "8. One way to run batch deployment to predict or score is to create and run a batch deployment job.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/255", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.13897705078125, "t": 179.425048828125, "r": 270.1285705566406, "b": 168.968994140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "9. Provide an input data type:", "text": "9. Provide an input data type:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/256", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 150.43360900878906, "t": 161.90948486328125, "r": 374.55621337890625, "b": 151.4150390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 50]}], "orig": "a. Inline data for entering a JSON format payload.", "text": "a. Inline data for entering a JSON format payload.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/257", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 150.56649780273438, "t": 145.2796630859375, "r": 492.3292236328125, "b": 135.2022705078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "orig": "b. Select Data asset , click Select data source , and then specify your asset.", "text": "b. Select Data asset , click Select data source , and then specify your asset.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/258", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.80201721191406, "t": 127.86083984375, "r": 471.90997314453125, "b": 117.6864013671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 75]}], "orig": "10.The output data type can be a new output file or a connected data asset.", "text": "10.The output data type can be a new output file or a connected data asset.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/259", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.80201721191406, "t": 111.1422119140625, "r": 546.2705688476562, "b": 89.26384735107422, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 93]}], "orig": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run.", "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/260", "parent": {"cref": "#/groups/17"}, "children": [], "label": "list_item", "prov": [{"page_no": 28, "bbox": {"l": 136.71322631835938, "t": 82.11285400390625, "r": 531.2200927734375, "b": 59.8948974609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 98]}], "orig": "12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL.", "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/261", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 29, "bbox": {"l": 64.4560546875, "t": 721.5007934570312, "r": 124.18352508544922, "b": 708.4141845703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Summary", "text": "Summary", "level": 1}, {"self_ref": "#/texts/262", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 135.6417999267578, "t": 695.3091430664062, "r": 532.9658813476562, "b": 660.84716796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 223]}], "orig": "With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages:", "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages:"}, {"self_ref": "#/texts/263", "parent": {"cref": "#/groups/18"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.6079559326172, "t": 654.12255859375, "r": 374.5103454589844, "b": 643.5902099609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 63]}], "orig": "GLYPH No Impact to SLAs and the batch process window.", "text": "GLYPH No Impact to SLAs and the batch process window.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/264", "parent": {"cref": "#/groups/18"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.4309844970703, "t": 637.3343505859375, "r": 508.5062255859375, "b": 626.9100952148438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "orig": "GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs.", "text": "GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/265", "parent": {"cref": "#/groups/18"}, "children": [], "label": "list_item", "prov": [{"page_no": 29, "bbox": {"l": 135.6011199951172, "t": 620.6939697265625, "r": 533.5338134765625, "b": 598.2996826171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 110]}], "orig": "GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring.", "text": "GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/266", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 29, "bbox": {"l": 64.69216918945312, "t": 571.3740844726562, "r": 482.53704833984375, "b": 554.8306884765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "orig": "Use case 4: Remaining Useful Life of an aircraft engine", "text": "Use case 4: Remaining Useful Life of an aircraft engine", "level": 1}, {"self_ref": "#/texts/267", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 136.27346801757812, "t": 538.683349609375, "r": 545.7247314453125, "b": 516.2785034179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 108]}], "orig": "In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems.", "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems."}, {"self_ref": "#/texts/268", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 136.0217742919922, "t": 504.0582580566406, "r": 547.2705688476562, "b": 458.0208740234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 339]}], "orig": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime.", "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime."}, {"self_ref": "#/texts/269", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 136.3080596923828, "t": 446.7120056152344, "r": 525.1622924804688, "b": 424.2519226074219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 114]}], "orig": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z.", "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z."}, {"self_ref": "#/texts/270", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 29, "bbox": {"l": 64.39527893066406, "t": 170.691650390625, "r": 244.8438262939453, "b": 161.38043212890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "Figure 22 Inferencing architecture on IBM Z", "text": "Figure 22 Inferencing architecture on IBM Z"}, {"self_ref": "#/texts/271", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 29, "bbox": {"l": 136.10833740234375, "t": 148.54931640625, "r": 547.2557373046875, "b": 66.6394271850586, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 557]}], "orig": "Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model's life.", "text": "Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model's life."}, {"self_ref": "#/texts/272", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 29, "bbox": {"l": 535.5003051757812, "t": 37.801513671875, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "27", "text": "27"}, {"self_ref": "#/texts/273", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 30, "bbox": {"l": 63.85002517700195, "t": 37.60455322265625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "28", "text": "28"}, {"self_ref": "#/texts/274", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 30, "bbox": {"l": 93.15624237060547, "t": 37.27899169921875, "r": 267.07440185546875, "b": 27.85723876953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/275", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.91494750976562, "t": 721.306396484375, "r": 547.2824096679688, "b": 615.0191040039062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 754]}], "orig": "Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist's journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see \"Use case 3: Clearing and settlement\" on page 25.", "text": "Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist's journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see \"Use case 3: Clearing and settlement\" on page 25."}, {"self_ref": "#/texts/276", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.84686279296875, "t": 603.3901977539062, "r": 545.1770629882812, "b": 557.2607421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 289]}], "orig": "Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices.", "text": "Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices."}, {"self_ref": "#/texts/277", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.91741943359375, "t": 545.34765625, "r": 547.212890625, "b": 510.9693298339844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 249]}], "orig": "We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works.", "text": "We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works."}, {"self_ref": "#/texts/278", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.88528442382812, "t": 499.3803405761719, "r": 547.3082885742188, "b": 452.83648681640625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 304]}], "orig": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator.", "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator."}, {"self_ref": "#/texts/279", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.9976348876953, "t": 441.36517333984375, "r": 547.282470703125, "b": 371.1309814453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 495]}], "orig": "For decision-making about an aircraft engine's life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction.", "text": "For decision-making about an aircraft engine's life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction."}, {"self_ref": "#/texts/280", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 135.7574462890625, "t": 359.3186950683594, "r": 547.32421875, "b": 313.1587829589844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 273]}], "orig": "The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point.", "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point."}, {"self_ref": "#/texts/281", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 136.12620544433594, "t": 301.5126953125, "r": 547.2745361328125, "b": 254.95623779296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 318]}], "orig": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating.", "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating."}, {"self_ref": "#/texts/282", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 30, "bbox": {"l": 136.40904235839844, "t": 243.3863525390625, "r": 521.204345703125, "b": 221.0084228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 121]}], "orig": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application.", "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application."}, {"self_ref": "#/texts/283", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 31, "bbox": {"l": 64.29751586914062, "t": 349.6379699707031, "r": 216.1868438720703, "b": 340.3518371582031, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "orig": "Figure 23 In-depth architectural view", "text": "Figure 23 In-depth architectural view"}, {"self_ref": "#/texts/284", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 31, "bbox": {"l": 136.26695251464844, "t": 327.9122314453125, "r": 501.76422119140625, "b": 306.0186462402344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 106]}], "orig": "In summary, consider the following points while developing an AI-based predictive maintenance application:", "text": "In summary, consider the following points while developing an AI-based predictive maintenance application:"}, {"self_ref": "#/texts/285", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 31, "bbox": {"l": 135.49343872070312, "t": 299.4659423828125, "r": 547.3203125, "b": 265.08624267578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 204]}], "orig": "GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages.", "text": "GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/286", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 31, "bbox": {"l": 135.57691955566406, "t": 257.9407958984375, "r": 491.34027099609375, "b": 247.70538330078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "GLYPH The trustworthiness of the predicted output is important for critical use cases.", "text": "GLYPH The trustworthiness of the predicted output is important for critical use cases.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/287", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 31, "bbox": {"l": 135.67471313476562, "t": 241.30987548828125, "r": 534.4998779296875, "b": 219.09210205078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 118]}], "orig": "GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications.", "text": "GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/288", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 31, "bbox": {"l": 135.61285400390625, "t": 212.05743408203125, "r": 547.2156982421875, "b": 190.240234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 141]}], "orig": "GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available.", "text": "GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/289", "parent": {"cref": "#/groups/19"}, "children": [], "label": "list_item", "prov": [{"page_no": 31, "bbox": {"l": 135.52349853515625, "t": 183.47650146484375, "r": 504.0291748046875, "b": 160.86175537109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 128]}], "orig": "GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle.", "text": "GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/290", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 31, "bbox": {"l": 535.4804077148438, "t": 37.7464599609375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "29", "text": "29"}, {"self_ref": "#/texts/291", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 32, "bbox": {"l": 64.292236328125, "t": 721.9068603515625, "r": 542.2593994140625, "b": 686.99609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 83]}], "orig": "Use case 5: AI-powered video analytics on an infant's motions for health prediction", "text": "Use case 5: AI-powered video analytics on an infant's motions for health prediction", "level": 1}, {"self_ref": "#/texts/292", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 136.04208374023438, "t": 670.8692016601562, "r": 546.6989135742188, "b": 612.2630004882812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 395]}], "orig": "Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world.", "text": "Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world."}, {"self_ref": "#/texts/293", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 135.93234252929688, "t": 600.051025390625, "r": 547.3121948242188, "b": 553.6912231445312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 280]}], "orig": "Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis.", "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis."}, {"self_ref": "#/texts/294", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 136.01303100585938, "t": 542.4129638671875, "r": 533.3443603515625, "b": 508.30059814453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 264]}], "orig": "Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health.", "text": "Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health."}, {"self_ref": "#/texts/295", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 135.85812377929688, "t": 496.4077453613281, "r": 535.1302490234375, "b": 426.2819519042969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 442]}], "orig": "In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby's life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders.", "text": "In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby's life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders."}, {"self_ref": "#/texts/296", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 32, "bbox": {"l": 64.58500671386719, "t": 406.79620361328125, "r": 186.71859741210938, "b": 393.4929504394531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 19]}], "orig": "Industry challenges", "text": "Industry challenges", "level": 1}, {"self_ref": "#/texts/297", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 135.78916931152344, "t": 380.6932067871094, "r": 547.2576293945312, "b": 334.298828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 323]}], "orig": "There are video surveillance systems that are installed for monitoring an infant's movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected.", "text": "There are video surveillance systems that are installed for monitoring an infant's movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected."}, {"self_ref": "#/texts/298", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 135.95849609375, "t": 322.5081787109375, "r": 547.2775268554688, "b": 264.06689453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 391]}], "orig": "There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something \"smart\" that monitors constantly the surveillance system and detect problems effectively.", "text": "There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something \"smart\" that monitors constantly the surveillance system and detect problems effectively."}, {"self_ref": "#/texts/299", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 135.81661987304688, "t": 251.96868896484375, "r": 547.2385864257812, "b": 218.02496337890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 248]}], "orig": "AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified.", "text": "AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified."}, {"self_ref": "#/texts/300", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 136.16104125976562, "t": 205.88714599609375, "r": 541.7665405273438, "b": 183.468017578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 173]}], "orig": "Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry.", "text": "Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry."}, {"self_ref": "#/texts/301", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 32, "bbox": {"l": 64.49705505371094, "t": 164.32861328125, "r": 278.4443054199219, "b": 150.97406005859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "Infant motion analytics in real time", "text": "Infant motion analytics in real time", "level": 1}, {"self_ref": "#/texts/302", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 32, "bbox": {"l": 135.9631805419922, "t": 137.95867919921875, "r": 547.2257080078125, "b": 67.82470703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 519]}], "orig": "AI is the current \"market trend evolution\" in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems.", "text": "AI is the current \"market trend evolution\" in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems."}, {"self_ref": "#/texts/303", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 32, "bbox": {"l": 64.11967468261719, "t": 37.5791015625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "30", "text": "30"}, {"self_ref": "#/texts/304", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 32, "bbox": {"l": 93.19580841064453, "t": 37.26409912109375, "r": 267.07440185546875, "b": 27.85504150390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/305", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 33, "bbox": {"l": 135.8349609375, "t": 721.387451171875, "r": 540.1576538085938, "b": 687.23095703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 258]}], "orig": "CP4D was used to build and deploy the AI-powered video analytics on infant's motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time.", "text": "CP4D was used to build and deploy the AI-powered video analytics on infant's motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time."}, {"self_ref": "#/texts/306", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 33, "bbox": {"l": 136.0093536376953, "t": 675.2120971679688, "r": 542.9444580078125, "b": 629.25927734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 288]}], "orig": "Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data.", "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data."}, {"self_ref": "#/texts/307", "parent": {"cref": "#/body"}, "children": [], "label": "caption", "prov": [{"page_no": 33, "bbox": {"l": 64.36393737792969, "t": 378.4368591308594, "r": 281.63330078125, "b": 369.383544921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "orig": "Figure 24 Architecture for AI-powered video analytics", "text": "Figure 24 Architecture for AI-powered video analytics"}, {"self_ref": "#/texts/308", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 33, "bbox": {"l": 135.9974822998047, "t": 356.6090087890625, "r": 547.311279296875, "b": 274.28826904296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 575]}], "orig": "Live camera feeds or recorded videos of an infant's movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant's body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture.", "text": "Live camera feeds or recorded videos of an infant's movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant's body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture."}, {"self_ref": "#/texts/309", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 33, "bbox": {"l": 135.75706481933594, "t": 262.49298095703125, "r": 539.9171752929688, "b": 192.76055908203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 454]}], "orig": "When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant's health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means.", "text": "When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant's health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means."}, {"self_ref": "#/texts/310", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 33, "bbox": {"l": 135.83775329589844, "t": 180.63201904296875, "r": 437.95953369140625, "b": 170.34564208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 68]}], "orig": "We can leverage the following AI technology stack for this use case:", "text": "We can leverage the following AI technology stack for this use case:"}, {"self_ref": "#/texts/311", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 33, "bbox": {"l": 135.53660583496094, "t": 164.04058837890625, "r": 546.6869506835938, "b": 141.7152099609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 117]}], "orig": "GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images.", "text": "GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/312", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 33, "bbox": {"l": 135.43955993652344, "t": 134.6781005859375, "r": 455.69329833984375, "b": 124.72181701660156, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 80]}], "orig": "GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow.", "text": "GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/313", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 33, "bbox": {"l": 135.51890563964844, "t": 118.01629638671875, "r": 543.4529418945312, "b": 95.74219512939453, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 120]}], "orig": "GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation.", "text": "GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/314", "parent": {"cref": "#/groups/20"}, "children": [], "label": "list_item", "prov": [{"page_no": 33, "bbox": {"l": 135.43861389160156, "t": 88.65191650390625, "r": 516.3308715820312, "b": 78.37835693359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 96]}], "orig": "GLYPH OpenCV: A real-time computer vision library that helps perform image processing.", "text": "GLYPH OpenCV: A real-time computer vision library that helps perform image processing.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/315", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 33, "bbox": {"l": 535.5228881835938, "t": 37.67767333984375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "31", "text": "31"}, {"self_ref": "#/texts/316", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.99948120117188, "t": 721.2702026367188, "r": 542.3601684570312, "b": 687.2371826171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 238]}], "orig": "WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions.", "text": "WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions."}, {"self_ref": "#/texts/317", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 34, "bbox": {"l": 64.3565673828125, "t": 659.8582763671875, "r": 223.8605499267578, "b": 644.0363159179688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 20]}], "orig": "Additional resources", "text": "Additional resources", "level": 1}, {"self_ref": "#/texts/318", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 135.6084747314453, "t": 627.3983154296875, "r": 547.2325439453125, "b": 605.2584838867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 149]}], "orig": "GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z.", "text": "GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/319", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 135.61322021484375, "t": 598.4909057617188, "r": 300.0693054199219, "b": 588.2786865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "orig": "GLYPH IBM Cloud Pak for Data Tutorials.", "text": "GLYPH IBM Cloud Pak for Data Tutorials.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/320", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 135.7628173828125, "t": 581.2073974609375, "r": 518.558837890625, "b": 559.299072265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 149]}], "orig": "GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE:", "text": "GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/321", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 151.3540802001953, "t": 551.8923950195312, "r": 527.840576171875, "b": 530.036376953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 127]}], "orig": "-Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case.", "text": "-Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/322", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 151.2523193359375, "t": 523.225341796875, "r": 539.9617919921875, "b": 501.28009033203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 152]}], "orig": "-Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "text": "-Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/323", "parent": {"cref": "#/groups/21"}, "children": [], "label": "list_item", "prov": [{"page_no": 34, "bbox": {"l": 151.19593811035156, "t": 494.5711669921875, "r": 547.2676391601562, "b": 448.30084228515625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 319]}], "orig": "-Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "text": "-Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/324", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 165.18856811523438, "t": 441.26715087890625, "r": 547.1928100585938, "b": 419.2614440917969, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 131]}], "orig": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE."}, {"self_ref": "#/texts/325", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 34, "bbox": {"l": 64.41288757324219, "t": 391.7469787597656, "r": 137.74366760253906, "b": 375.7332763671875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Summary", "text": "Summary", "level": 1}, {"self_ref": "#/texts/326", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.86285400390625, "t": 359.3092956542969, "r": 547.1648559570312, "b": 253.18939208984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 734]}], "orig": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation.", "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"self_ref": "#/texts/327", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 34, "bbox": {"l": 64.06120300292969, "t": 233.67156982421875, "r": 114.58550262451172, "b": 220.6373748779297, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Authors", "text": "Authors", "level": 1}, {"self_ref": "#/texts/328", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 34, "bbox": {"l": 64.16203308105469, "t": 37.50299072265625, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "32", "text": "32"}, {"self_ref": "#/texts/329", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 34, "bbox": {"l": 93.21607208251953, "t": 37.19580078125, "r": 267.07440185546875, "b": 27.91644287109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/330", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.81004333496094, "t": 207.376953125, "r": 538.573486328125, "b": 185.25857543945312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 112]}], "orig": "This publication was produced by a team of specialists from around the world working with the IBM Redbooks team:", "text": "This publication was produced by a team of specialists from around the world working with the IBM Redbooks team:"}, {"self_ref": "#/texts/331", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 34, "bbox": {"l": 135.75830078125, "t": 173.5089111328125, "r": 547.2435913085938, "b": 115.14935302734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 393]}], "orig": "Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management.", "text": "Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management."}, {"self_ref": "#/texts/332", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.0478515625, "t": 721.465576171875, "r": 546.0402221679688, "b": 651.166748046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 505]}], "orig": "Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master's degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems.", "text": "Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master's degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems."}, {"self_ref": "#/texts/333", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 135.68675231933594, "t": 639.4677734375, "r": 546.8887329101562, "b": 569.0224609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 501]}], "orig": "Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems.", "text": "Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems."}, {"self_ref": "#/texts/334", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 135.7921600341797, "t": 557.3799438476562, "r": 547.256103515625, "b": 438.8973693847656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 828]}], "orig": "Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization.", "text": "Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization."}, {"self_ref": "#/texts/335", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 135.95065307617188, "t": 427.2441711425781, "r": 432.8396301269531, "b": 417.0667419433594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 71]}], "orig": "Thanks to the following people for their contributions to this project:", "text": "Thanks to the following people for their contributions to this project:"}, {"self_ref": "#/texts/336", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.16671752929688, "t": 405.195556640625, "r": 314.3034973144531, "b": 383.0773620605469, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 65]}], "orig": "Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center", "text": "Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center"}, {"self_ref": "#/texts/337", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.28025817871094, "t": 371.7374572753906, "r": 364.17230224609375, "b": 349.3034973144531, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "Shin Kelly Yang, AI on IBM Z Product Management IBM US", "text": "Shin Kelly Yang, AI on IBM Z Product Management IBM US"}, {"self_ref": "#/texts/338", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 135.87332153320312, "t": 337.4849853515625, "r": 537.7623291015625, "b": 315.28411865234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 87]}], "orig": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM", "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM"}, {"self_ref": "#/texts/339", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 35, "bbox": {"l": 64.67491912841797, "t": 295.62060546875, "r": 349.12164306640625, "b": 282.3042297363281, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "orig": "Now you can become a published author, too!", "text": "Now you can become a published author, too!", "level": 1}, {"self_ref": "#/texts/340", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 135.876953125, "t": 269.32843017578125, "r": 547.3480224609375, "b": 187.2394561767578, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 559]}], "orig": "Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base.", "text": "Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"self_ref": "#/texts/341", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.39222717285156, "t": 175.36004638671875, "r": 547.3431396484375, "b": 165.0889892578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "orig": "Find out more about the residency program, browse the residency index, and apply online at:", "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"self_ref": "#/texts/342", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 35, "bbox": {"l": 136.80099487304688, "t": 157.7542724609375, "r": 301.6788024902344, "b": 148.4791259765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 34]}], "orig": "ibm.com /redbooks/residencies.html", "text": "ibm.com /redbooks/residencies.html"}, {"self_ref": "#/texts/343", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 35, "bbox": {"l": 535.5333251953125, "t": 37.59283447265625, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "33", "text": "33"}, {"self_ref": "#/texts/344", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 36, "bbox": {"l": 64.4889907836914, "t": 721.6314086914062, "r": 270.4855651855469, "b": 708.357421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 30]}], "orig": "Stay connected to IBM Redbooks", "text": "Stay connected to IBM Redbooks", "level": 1}, {"self_ref": "#/texts/345", "parent": {"cref": "#/groups/22"}, "children": [], "label": "list_item", "prov": [{"page_no": 36, "bbox": {"l": 135.56192016601562, "t": 695.48486328125, "r": 241.2664794921875, "b": 685.2982788085938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "GLYPH Find us on LinkedIn:", "text": "GLYPH Find us on LinkedIn:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/346", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 36, "bbox": {"l": 150.71234130859375, "t": 677.8062744140625, "r": 391.0767822265625, "b": 668.0650024414062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "orig": "http://www.linkedin.com/groups?home=&gid=2130806", "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"self_ref": "#/texts/347", "parent": {"cref": "#/groups/23"}, "children": [], "label": "list_item", "prov": [{"page_no": 36, "bbox": {"l": 135.51414489746094, "t": 661.1776733398438, "r": 546.8383178710938, "b": 639.2791137695312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 118]}], "orig": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:", "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/348", "parent": {"cref": "#/groups/23"}, "children": [], "label": "list_item", "prov": [{"page_no": 36, "bbox": {"l": 150.69110107421875, "t": 632.6083984375, "r": 451.35418701171875, "b": 622.588134765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 60]}], "orig": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/349", "parent": {"cref": "#/groups/23"}, "children": [], "label": "list_item", "prov": [{"page_no": 36, "bbox": {"l": 135.90457153320312, "t": 615.35009765625, "r": 430.1478271484375, "b": 604.872802734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 76]}], "orig": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:", "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/350", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 36, "bbox": {"l": 150.6310272216797, "t": 598.2605590820312, "r": 331.0777282714844, "b": 588.5687866210938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 36]}], "orig": "http://www.redbooks.ibm.com/rss.html", "text": "http://www.redbooks.ibm.com/rss.html"}, {"self_ref": "#/texts/351", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 36, "bbox": {"l": 64.23326110839844, "t": 37.54473876953125, "r": 78.4020004272461, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "34", "text": "34"}, {"self_ref": "#/texts/352", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 36, "bbox": {"l": 93.27912139892578, "t": 37.2301025390625, "r": 267.07440185546875, "b": 27.87841796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/353", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 37, "bbox": {"l": 64.80000305175781, "t": 719.029296875, "r": 151.5048065185547, "b": 695.9519653320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "Notices", "text": "Notices", "level": 1}, {"self_ref": "#/texts/354", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 64.05133819580078, "t": 659.9757080078125, "r": 547.2454833984375, "b": 629.731201171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 254]}], "orig": "This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it.", "text": "This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it."}, {"self_ref": "#/texts/355", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 64.02767944335938, "t": 619.982666015625, "r": 547.1796875, "b": 559.5601196289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 625]}], "orig": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service.", "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"self_ref": "#/texts/356", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 64.14295196533203, "t": 550.154052734375, "r": 547.3560180664062, "b": 520.18017578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 232]}], "orig": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:", "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"self_ref": "#/texts/357", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 64.09358215332031, "t": 520.0274658203125, "r": 535.3104248046875, "b": 509.72900390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 99]}], "orig": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US", "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US"}, {"self_ref": "#/texts/358", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 63.77083969116211, "t": 500.6291198730469, "r": 545.7673950195312, "b": 449.74090576171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 411]}], "orig": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you.", "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"self_ref": "#/texts/359", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 63.76580810546875, "t": 439.9736022949219, "r": 547.2484130859375, "b": 400.1820983886719, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 345]}], "orig": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice.", "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"self_ref": "#/texts/360", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 63.99868392944336, "t": 390.02362060546875, "r": 541.5413208007812, "b": 360.0369567871094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 286]}], "orig": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk.", "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"self_ref": "#/texts/361", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 64.16744995117188, "t": 349.7569580078125, "r": 519.2667846679688, "b": 329.5712890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 136]}], "orig": "IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you.", "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you."}, {"self_ref": "#/texts/362", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 63.904296875, "t": 319.8106994628906, "r": 505.2710266113281, "b": 299.6888427734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 191]}], "orig": "The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions.", "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions."}, {"self_ref": "#/texts/363", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 64.10684204101562, "t": 289.8807373046875, "r": 547.2424926757812, "b": 249.8016357421875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 408]}], "orig": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products.", "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"self_ref": "#/texts/364", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 64.23661041259766, "t": 239.82928466796875, "r": 544.685791015625, "b": 219.7401123046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 146]}], "orig": "Statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only.", "text": "Statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only."}, {"self_ref": "#/texts/365", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 63.82798385620117, "t": 209.76708984375, "r": 547.016357421875, "b": 170.14593505859375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 335]}], "orig": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental.", "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental."}, {"self_ref": "#/texts/366", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 37, "bbox": {"l": 64.29706573486328, "t": 160.24713134765625, "r": 172.50048828125, "b": 150.16616821289062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 18]}], "orig": "COPYRIGHT LICENSE:", "text": "COPYRIGHT LICENSE:", "level": 1}, {"self_ref": "#/texts/367", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 37, "bbox": {"l": 63.95261001586914, "t": 140.04864501953125, "r": 547.3580932617188, "b": 59.9888916015625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 779]}], "orig": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided \"AS IS\", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs.", "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided \"AS IS\", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs."}, {"self_ref": "#/texts/368", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 37, "bbox": {"l": 63.60262680053711, "t": 37.3072509765625, "r": 180.32760620117188, "b": 27.9490966796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 27]}], "orig": "' Copyright IBM Corp. 2023.", "text": "' Copyright IBM Corp. 2023."}, {"self_ref": "#/texts/369", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 37, "bbox": {"l": 535.6251220703125, "t": 37.6282958984375, "r": 547.2591552734375, "b": 27.93828010559082, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "35", "text": "35"}, {"self_ref": "#/texts/370", "parent": {"cref": "#/body"}, "children": [], "label": "section_header", "prov": [{"page_no": 38, "bbox": {"l": 64.03144836425781, "t": 721.8876953125, "r": 155.489501953125, "b": 706.0162963867188, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Trademarks", "text": "Trademarks", "level": 1}, {"self_ref": "#/texts/371", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 64.0931396484375, "t": 689.2715454101562, "r": 547.2343139648438, "b": 649.2987060546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 383]}], "orig": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \"Copyright and trademark information\" at http://www.ibm.com/legal/copytrade.shtml", "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \"Copyright and trademark information\" at http://www.ibm.com/legal/copytrade.shtml"}, {"self_ref": "#/texts/372", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 63.78811264038086, "t": 639.4071044921875, "r": 547.241455078125, "b": 619.1767578125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 181]}], "orig": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries.", "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries."}, {"self_ref": "#/texts/373", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 75.5999984741211, "t": 610.3914184570312, "r": 99.15697479248047, "b": 601.1370239257812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "Db2fi IBMfi", "text": "Db2fi IBMfi"}, {"self_ref": "#/texts/374", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 75.5999984741211, "t": 588.5880737304688, "r": 144.71075439453125, "b": 579.1167602539062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "orig": "IBM Blockchainfi", "text": "IBM Blockchainfi"}, {"self_ref": "#/texts/375", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 75.5999984741211, "t": 577.4935302734375, "r": 124.25857543945312, "b": 568.1367797851562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 20]}], "orig": "IBM Cloudfi IBM Clou", "text": "IBM Cloudfi IBM Clou"}, {"self_ref": "#/texts/376", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 75.47257232666016, "t": 567.2310791015625, "r": 142.73785400390625, "b": 557.1567993164062, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 7]}], "orig": "d Pakfi", "text": "d Pakfi"}, {"self_ref": "#/texts/377", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 75.5999984741211, "t": 556.1326904296875, "r": 128.0511016845703, "b": 546.1165161132812, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "IBM Telum\u2122", "text": "IBM Telum\u2122"}, {"self_ref": "#/texts/378", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 235.9648895263672, "t": 610.4598388671875, "r": 292.5691833496094, "b": 601.13623046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "IBM Watsonfi", "text": "IBM Watsonfi"}, {"self_ref": "#/texts/379", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 235.9771270751953, "t": 600.0650634765625, "r": 278.3294982910156, "b": 590.15625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 8]}], "orig": "IBM z16\u2122", "text": "IBM z16\u2122"}, {"self_ref": "#/texts/380", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 235.92138671875, "t": 588.3995361328125, "r": 272.8687744140625, "b": 579.115966796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 9]}], "orig": "Instanafi", "text": "Instanafi"}, {"self_ref": "#/texts/381", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 235.9377899169922, "t": 577.7839965820312, "r": 294.80047607421875, "b": 567.6576538085938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 14]}], "orig": "Open Libertyfi", "text": "Open Libertyfi"}, {"self_ref": "#/texts/382", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 235.86184692382812, "t": 566.484619140625, "r": 290.5615539550781, "b": 557.100341796875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "OpenPagesfi", "text": "OpenPagesfi"}, {"self_ref": "#/texts/383", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 236.06265258789062, "t": 555.6954345703125, "r": 283.79803466796875, "b": 546.11572265625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Redbooksfi", "text": "Redbooksfi"}, {"self_ref": "#/texts/384", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 64.08106994628906, "t": 533.9868774414062, "r": 312.0052490234375, "b": 523.8305053710938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "orig": "The following terms are trademarks of other companies:", "text": "The following terms are trademarks of other companies:"}, {"self_ref": "#/texts/385", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 64.17213439941406, "t": 514.7268676757812, "r": 528.6849365234375, "b": 493.8155212402344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 184]}], "orig": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.", "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."}, {"self_ref": "#/texts/386", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 63.988487243652344, "t": 484.4936828613281, "r": 541.6887817382812, "b": 464.2257080078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 174]}], "orig": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis."}, {"self_ref": "#/texts/387", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 64.36927795410156, "t": 454.6313781738281, "r": 531.9806518554688, "b": 434.2598876953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 140]}], "orig": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries.", "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries."}, {"self_ref": "#/texts/388", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 64.39899444580078, "t": 424.5513916015625, "r": 472.0943908691406, "b": 414.2801208496094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 90]}], "orig": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "text": "UNIX is a registered trademark of The Open Group in the United States and other countries."}, {"self_ref": "#/texts/389", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 64.1666259765625, "t": 404.60601806640625, "r": 465.3721618652344, "b": 394.30035400390625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 86]}], "orig": "Other company, product, or service names may be trademarks or service marks of others.", "text": "Other company, product, or service names may be trademarks or service marks of others."}, {"self_ref": "#/texts/390", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 38, "bbox": {"l": 64.26212310791016, "t": 36.5125732421875, "r": 78.4020004272461, "b": 26.91827964782715, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 2]}], "orig": "36", "text": "36"}, {"self_ref": "#/texts/391", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 38, "bbox": {"l": 93.35021209716797, "t": 36.15057373046875, "r": 267.07440185546875, "b": 26.59393310546875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 38]}], "orig": "IBM Cloud Pak for Data on IBM zSystems", "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"self_ref": "#/texts/392", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 396.7199401855469, "t": 610.1947631835938, "r": 464.44384765625, "b": 600.8096313476562, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 26]}], "orig": "Redbooks (log o) fi Turbon", "text": "Redbooks (log o) fi Turbon"}, {"self_ref": "#/texts/393", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 396.71099853515625, "t": 599.5802001953125, "r": 452.03265380859375, "b": 590.1554565429688, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 6]}], "orig": "omicfi", "text": "omicfi"}, {"self_ref": "#/texts/394", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 396.258544921875, "t": 588.4796142578125, "r": 451.70428466796875, "b": 579.1151733398438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 11]}], "orig": "WebSpherefi", "text": "WebSpherefi"}, {"self_ref": "#/texts/395", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 396.62286376953125, "t": 577.8291015625, "r": 424.4446716308594, "b": 568.1351928710938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 6]}], "orig": "z/OSfi", "text": "z/OSfi"}, {"self_ref": "#/texts/396", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 38, "bbox": {"l": 396.6561584472656, "t": 566.7672119140625, "r": 420.6365966796875, "b": 557.1552124023438, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 4]}], "orig": "z16\u2122", "text": "z16\u2122"}, {"self_ref": "#/texts/397", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 287.2200012207031, "t": 763.4519653320312, "r": 415.20721435546875, "b": 741.251953125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 10]}], "orig": "Back cover", "text": "Back cover"}, {"self_ref": "#/texts/398", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 495.9403076171875, "t": 680.78173828125, "r": 564.1664428710938, "b": 670.4779663085938, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 12]}], "orig": "REDP-5695-00", "text": "REDP-5695-00"}, {"self_ref": "#/texts/399", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 40, "bbox": {"l": 482.8758239746094, "t": 659.2940063476562, "r": 564.6472778320312, "b": 649.478271484375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 15]}], "orig": "ISBN 0738461067", "text": "ISBN 0738461067"}, {"self_ref": "#/texts/400", "parent": {"cref": "#/body"}, "children": [], "label": "page_footer", "prov": [{"page_no": 40, "bbox": {"l": 497.23223876953125, "t": 99.3863525390625, "r": 564.1887817382812, "b": 89.81710052490234, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 17]}], "orig": "Printed in U.S.A.", "text": "Printed in U.S.A."}], "pictures": [{"self_ref": "#/pictures/0", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 1, "bbox": {"l": 408.87640380859375, "t": 757.6637573242188, "r": 569.0722045898438, "b": 713.802490234375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/1", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 1, "bbox": {"l": 46.60354995727539, "t": 59.40655517578125, "r": 127.91421508789062, "b": 26.44677734375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/2", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 1, "bbox": {"l": 467.1597595214844, "t": 51.5799560546875, "r": 571.5428466796875, "b": 23.5855712890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/3", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 3, "bbox": {"l": 32.92374801635742, "t": 721.5759887695312, "r": 239.95321655273438, "b": 555.397705078125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/4", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 5, "bbox": {"l": 136.13192749023438, "t": 714.4678955078125, "r": 435.85162353515625, "b": 345.68524169921875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 16]}], "captions": [{"cref": "#/texts/30"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/5", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 6, "bbox": {"l": 63.98974609375, "t": 685.0554809570312, "r": 547.5855102539062, "b": 416.2847595214844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 33]}], "captions": [{"cref": "#/texts/37"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/6", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 7, "bbox": {"l": 65.5059585571289, "t": 712.4261474609375, "r": 547.4702758789062, "b": 441.6483154296875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 52]}], "captions": [{"cref": "#/texts/40"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/7", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 8, "bbox": {"l": 65.81348419189453, "t": 683.7611694335938, "r": 547.791259765625, "b": 430.7156677246094, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 78]}], "captions": [{"cref": "#/texts/47"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/8", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 9, "bbox": {"l": 63.88162612915039, "t": 714.5304565429688, "r": 547.2862548828125, "b": 492.099609375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 29]}], "captions": [{"cref": "#/texts/50"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/9", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 10, "bbox": {"l": 63.72787094116211, "t": 612.8547973632812, "r": 547.3121948242188, "b": 311.20458984375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 48]}], "captions": [{"cref": "#/texts/58"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/10", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 13, "bbox": {"l": 63.857383728027344, "t": 714.5877685546875, "r": 547.4847412109375, "b": 441.6200256347656, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 104]}], "captions": [{"cref": "#/texts/91"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/11", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 16, "bbox": {"l": 63.77848434448242, "t": 660.74267578125, "r": 546.8060302734375, "b": 462.53985595703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 35]}], "captions": [{"cref": "#/texts/144"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/12", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 18, "bbox": {"l": 64.32939147949219, "t": 714.298583984375, "r": 547.455810546875, "b": 501.2001647949219, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 54]}], "captions": [{"cref": "#/texts/172"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/13", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 18, "bbox": {"l": 63.88758850097656, "t": 423.3321228027344, "r": 547.6134033203125, "b": 125.8853759765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 49]}], "captions": [{"cref": "#/texts/175"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/14", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 19, "bbox": {"l": 63.96794891357422, "t": 672.72021484375, "r": 547.4464111328125, "b": 379.33050537109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "captions": [{"cref": "#/texts/179"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/15", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 19, "bbox": {"l": 64.33274841308594, "t": 318.6211242675781, "r": 547.9761962890625, "b": 68.50238037109375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 66]}], "captions": [{"cref": "#/texts/181"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/16", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 20, "bbox": {"l": 136.07406616210938, "t": 661.1522216796875, "r": 533.5489501953125, "b": 407.510986328125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 24]}], "captions": [{"cref": "#/texts/184"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/17", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 20, "bbox": {"l": 64.0412368774414, "t": 346.5400390625, "r": 547.8551635742188, "b": 84.3487548828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 28]}], "captions": [{"cref": "#/texts/186"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/18", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 21, "bbox": {"l": 64.23773956298828, "t": 684.8828125, "r": 547.417236328125, "b": 380.84503173828125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 91]}], "captions": [{"cref": "#/texts/190"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/19", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 22, "bbox": {"l": 63.799659729003906, "t": 684.6780395507812, "r": 547.7122192382812, "b": 410.76275634765625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 55]}], "captions": [{"cref": "#/texts/193"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/20", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 23, "bbox": {"l": 63.62750244140625, "t": 714.3441772460938, "r": 547.6529541015625, "b": 441.46466064453125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 76]}], "captions": [{"cref": "#/texts/197"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/21", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 23, "bbox": {"l": 64.15648651123047, "t": 344.8665466308594, "r": 547.9522705078125, "b": 70.03009033203125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 103]}], "captions": [{"cref": "#/texts/199"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/22", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 25, "bbox": {"l": 64.85054016113281, "t": 714.330810546875, "r": 545.2755126953125, "b": 451.7115173339844, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 82]}], "captions": [{"cref": "#/texts/211"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/23", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 26, "bbox": {"l": 65.03783416748047, "t": 697.0615234375, "r": 547.6334838867188, "b": 432.6387634277344, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 70]}], "captions": [{"cref": "#/texts/221"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/24", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 28, "bbox": {"l": 64.01190948486328, "t": 684.6367797851562, "r": 542.310546875, "b": 480.45562744140625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 97]}], "captions": [{"cref": "#/texts/242"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/25", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 29, "bbox": {"l": 63.826560974121094, "t": 410.2887268066406, "r": 539.9069213867188, "b": 173.48193359375, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 43]}], "captions": [{"cref": "#/texts/270"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/26", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 31, "bbox": {"l": 63.6925048828125, "t": 714.6727294921875, "r": 547.7992553710938, "b": 352.7718200683594, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 37]}], "captions": [{"cref": "#/texts/283"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/27", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 33, "bbox": {"l": 64.15681457519531, "t": 623.4725341796875, "r": 542.2742309570312, "b": 381.83746337890625, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 53]}], "captions": [{"cref": "#/texts/307"}], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/28", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 40, "bbox": {"l": 42.63053512573242, "t": 42.7210693359375, "r": 68.95333862304688, "b": 15.95574951171875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/29", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 40, "bbox": {"l": 475.4501647949219, "t": 747.644287109375, "r": 565.7938232421875, "b": 712.610595703125, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}, {"self_ref": "#/pictures/30", "parent": {"cref": "#/body"}, "children": [], "label": "picture", "prov": [{"page_no": 40, "bbox": {"l": 433.6951904296875, "t": 55.36602783203125, "r": 572.0396728515625, "b": 19.161434173583984, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 0]}], "captions": [], "references": [], "footnotes": [], "image": null, "annotations": []}], "tables": [], "key_value_items": [], "pages": {"1": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 1}, "2": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 2}, "3": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 3}, "4": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 4}, "5": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 5}, "6": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 6}, "7": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 7}, "8": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 8}, "9": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 9}, "10": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 10}, "11": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 11}, "12": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 12}, "13": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 13}, "14": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 14}, "15": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 15}, "16": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 16}, "17": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 17}, "18": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 18}, "19": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 19}, "20": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 20}, "21": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 21}, "22": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 22}, "23": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 23}, "24": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 24}, "25": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 25}, "26": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 26}, "27": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 27}, "28": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 28}, "29": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 29}, "30": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 30}, "31": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 31}, "32": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 32}, "33": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 33}, "34": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 34}, "35": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 35}, "36": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 36}, "37": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 37}, "38": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 38}, "39": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 39}, "40": {"size": {"width": 612.0, "height": 792.0}, "image": null, "page_no": 40}}} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5695.md b/tests/data/groundtruth/docling_v2/redp5695.md deleted file mode 100644 index 64e6099b..00000000 --- a/tests/data/groundtruth/docling_v2/redp5695.md +++ /dev/null @@ -1,666 +0,0 @@ -Front cover - - - -## IBM Cloud Pak for Data on IBM Z - -Jasmeet Bhatia - -Ravi Gummadi - -Chandra Shekhar Reddy Potula - -Srirama Sharma - -Data and AI - - - - - - - -## Executive overview - -Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology. - -With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences. - -This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput. - -This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. - -## IBM Z: An overview - -Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world's top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency. - -The most recent platform for IBM Z is IBM z16™. The IBM z16 supports the following features: - -- GLYPH On-chip AI acceleration -- GLYPH Quantum-safe crypto discovery -- GLYPH Simplified compliance -- GLYPH Flexible capacity -- GLYPH Modernization of applications -- GLYPH Sustainability - -With these features, enterprises can upgrade applications while preserving secure and resilient data. - -To learn more about these features, see the IBM z16 product page. - -Figure 1 on page 3 shows a picture of the IBM z16 mainframe. - -Figure 1 IBM z16 - - - -## IBM z16 and IBM LinuxONE Emperor 4 features - -IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI. - -Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement. - -Figure 2 IBM Z: Processor roadmap - - - -The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a 'built to build' focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization. - -Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum™ processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory. - -Figure 3 System design of IBM z16 LinuxONE Emperor 4 - - - -The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has "first in the industry" on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection. - -Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression. - -Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores. - -Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores - - - -The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases. - -Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities. - -Figure 5 Seamless integration - - - -## What is Cloud Pak for Data on IBM Z - -IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680. - -CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses. - -Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion. - -Figure 6 Solution overview of Cloud Pak for Data - - - -We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: - -- GLYPH Performance and Scale -- GLYPH Embedded Accelerators -- GLYPH Reliability and Availability -- GLYPH Security and Governance. - -From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security. - -## Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE - -With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks: - -- GLYPH Provision various containerized databases. -- GLYPH Explore, clean, shape, and alter data by using Data Refinery. -- GLYPH Use project-specific data that is uploaded, or connect to distant data. -- GLYPH Create Spark run times and applications. -- GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency. -- GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9. - -For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE. - -## Open-source ecosystem - -These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building. - -IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business. - -On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing. - -IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE. - -IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community's continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud. - -CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms. - -Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE. - -In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16™) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server. - -So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers. - -## Why AI on IBM Z - -Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI. - -Traditional ML models' power most of today's ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z). - -Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model. - -Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE - - - -In summary, here are some of the reasons why you should choose AI on IBM Z: - -- GLYPH World-class AI inference platform for enterprise workloads: -- -Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores. -- -Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform. -- -Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z. -- GLYPH Security: Encrypted memory, and improved trusted execution environments. -- GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system. - -## AI use cases - -With billions of transactions per day in many of today's industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale. - -Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. - -For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount. - -For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important. - -For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z. - -In the following sections, we describe the following use cases: - -- GLYPH "Use case 1: Responsible AI augmented with risk and regulatory compliance" on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks. -- GLYPH "Use case 2: Credit default risk assessment" on page 22 -- Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments. -- GLYPH "Use case 3: Clearing and settlement" on page 25 -- The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. -- GLYPH "Use case 4: Remaining Useful Life of an aircraft engine" on page 27 -- We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure. -- GLYPH "Use case 5: AI-powered video analytics on an infant's motions for health prediction" on page 30 -- In this section, we describe how AI can predict an infant's health conditions by monitoring real-time body movements. - -## Use case 1: Responsible AI augmented with risk and regulatory compliance - -Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task. - -How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring. - -## Industry challenges - -Here are the three main reasons why organizations struggle with the adoption of AI: - -- GLYPH Scaling with growing regulations -- GLYPH Lack of confidence in operationalized AI (making responsible AI) -- GLYPH Challenges around managing the risk throughout the entire AI workflow - -## Scaling with growing regulations - -Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination. - -## Responsible AI - -Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable. - -## Risks throughout the entire AI workflow - -Organizations need to mitigate risk of the following items: - -- GLYPH Deciding not to use certain technologies or practices -- GLYPH Using personal information when needed and with a user's consent -- GLYPH Ensuring automated decisions are free from bias -- GLYPH Customer confidence by providing explanations for business decisions -- GLYPH Fraud to the organization and to customer's accounts -- GLYPH Delays in putting models into production - -In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important. - -The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the "why" of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively. - -For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise. - -Figure 8 Typical AI model lifecycle - - - -Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows. - -## IBM governance solution for IBM Z - -AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises. - -AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization's use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model's behavior throughout the lifecycle, the data that was influential in its development, and the possible risks. - -In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance. - -## Lifecycle governance - -Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements: - -- GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. -- GLYPH Automate the capture of model metadata for report generation. -- GLYPH Drive transparent and explainable AI at scale. -- GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging. - -## Risk management - -Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale: - -- GLYPH Automate facts and workflow management to comply with business standards. -- GLYPH Use dynamic dashboards for clear and concise customizable results. -- GLYPH Enhanced collaboration across multiple regions and geographies. - -## Regulatory compliance - -Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks: - -- GLYPH Help adhere to external AI regulations for audit and compliance. -- GLYPH Convert external AI regulations into policies for automatic enforcement. -- GLYPH Use dynamic dashboards for compliance status across policies and regulations. - -Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways: - -- GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. -- GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86. - -Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. - -Figure 9 Remote AI governance solution end-to-end flow - - - -To achieve end-to-end AI governance, complete the following steps: - -- 1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10. - -Figure 10 Creating a model entry in IBM OpenPages - - - -- 2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11. - -Figure 11 Training an AI model by using Watson Studio - - - -- 3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12. - -Figure 12 Deploying an AI model by using WML on Cloud Pak for Data - - - -- 4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform. - -Figure 13 External model - - - -You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages. - -Figure 14 Tracking the model - - - -You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15. - -Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform - - - -- 5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16. - -Figure 16 Creating an external model on an x86 platform - - - -IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21. - -Figure 17 IBM OpenScale dashboard that is used to monitor the external model - - - -You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale. - -Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale - - - -## Use case 2: Credit default risk assessment - -In today's world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations. - -## Industry challenges - -Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone's likelihood of default, but that is not an efficient method for judgment as a business grows. - -## Predictions of credit default risk assessment - -In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan. - -Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk. - -Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model. - -Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z - - - -A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import. - -Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors. - -The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications. - -Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction. - -We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. - -Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. - -Figure 20 Architecture for credit risk prediction by using DL on IBM Z - - - -Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model's endpoint. - -In summary, here are some considerations for developing real-time AI models, such as credit risk assessment: - -- GLYPH A preference for in-platform run times of the model, such as faster execution results. -- GLYPH Less overhead in the end-to-end flows might improve scoring time. -- GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform. -- GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment. -- GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means. - -## Use case 3: Clearing and settlement - -Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day. - -## Industry challenge - -Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs. - -## Clearing and settlement solution - -Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts. - -In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions. - -The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds. - -One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint. - -Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE. - -Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data - - - -Here are the steps of the high-level process flow: - -- 1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building. -- 2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D. -- 3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository. -- 4. Deploy the saved model into a deployment space for batch deployment. -- 5. Create a batch deployment by using any of these interfaces: -- a. Watson Studio user interface from an Analytics deployment space. -- b. WML Python client. -- c. WML REST APIs. -- 6. A hardware configuration can be chosen for the deployment. -- 7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination. -- 8. One way to run batch deployment to predict or score is to create and run a batch deployment job. -- 9. Provide an input data type: -- a. Inline data for entering a JSON format payload. -- b. Select Data asset , click Select data source , and then specify your asset. -- 10.The output data type can be a new output file or a connected data asset. -- 11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run. -- 12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL. - -## Summary - -With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages: - -- GLYPH No Impact to SLAs and the batch process window. -- GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs. -- GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring. - -## Use case 4: Remaining Useful Life of an aircraft engine - -In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems. - -Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime. - -Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z. - -Figure 22 Inferencing architecture on IBM Z - - - -Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model's life. - -Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist's journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see "Use case 3: Clearing and settlement" on page 25. - -Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices. - -We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works. - -This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator. - -For decision-making about an aircraft engine's life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction. - -The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point. - -Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating. - -Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application. - -Figure 23 In-depth architectural view - - - -In summary, consider the following points while developing an AI-based predictive maintenance application: - -- GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages. -- GLYPH The trustworthiness of the predicted output is important for critical use cases. -- GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications. -- GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available. -- GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle. - -## Use case 5: AI-powered video analytics on an infant's motions for health prediction - -Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world. - -Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis. - -Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health. - -In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby's life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders. - -## Industry challenges - -There are video surveillance systems that are installed for monitoring an infant's movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected. - -There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something "smart" that monitors constantly the surveillance system and detect problems effectively. - -AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified. - -Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry. - -## Infant motion analytics in real time - -AI is the current "market trend evolution" in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems. - -CP4D was used to build and deploy the AI-powered video analytics on infant's motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time. - -Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data. - -Figure 24 Architecture for AI-powered video analytics - - - -Live camera feeds or recorded videos of an infant's movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant's body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture. - -When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant's health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means. - -We can leverage the following AI technology stack for this use case: - -- GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images. -- GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow. -- GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation. -- GLYPH OpenCV: A real-time computer vision library that helps perform image processing. - -WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions. - -## Additional resources - -- GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z. -- GLYPH IBM Cloud Pak for Data Tutorials. -- GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE: -- -Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case. -- -Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case. -- -Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case. - -A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE. - -## Summary - -This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation. - -## Authors - -This publication was produced by a team of specialists from around the world working with the IBM Redbooks team: - -Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management. - -Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master's degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems. - -Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems. - -Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization. - -Thanks to the following people for their contributions to this project: - -Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center - -Shin Kelly Yang, AI on IBM Z Product Management IBM US - -Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM - -## Now you can become a published author, too! - -Here's an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base. - -Find out more about the residency program, browse the residency index, and apply online at: - -ibm.com /redbooks/residencies.html - -## Stay connected to IBM Redbooks - -- GLYPH Find us on LinkedIn: - -http://www.linkedin.com/groups?home=&gid=2130806 - -- GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter: -- https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm -- GLYPH Stay current on recent Redbooks publications with RSS Feeds: - -http://www.redbooks.ibm.com/rss.html - -## Notices - -This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it. - -IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. - -IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: - -IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US - -INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. - -This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. - -Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. - -IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you. - -The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions. - -Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. - -Statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only. - -This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental. - -## COPYRIGHT LICENSE: - -This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided "AS IS", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs. - -## Trademarks - -IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at "Copyright and trademark information" at http://www.ibm.com/legal/copytrade.shtml - -The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries. - -Db2fi IBMfi - -IBM Blockchainfi - -IBM Cloudfi IBM Clou - -d Pakfi - -IBM Telum™ - -IBM Watsonfi - -IBM z16™ - -Instanafi - -Open Libertyfi - -OpenPagesfi - -Redbooksfi - -The following terms are trademarks of other companies: - -Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. - -The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis. - -Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries. - -UNIX is a registered trademark of The Open Group in the United States and other countries. - -Other company, product, or service names may be trademarks or service marks of others. - -Redbooks (log o) fi Turbon - -omicfi - -WebSpherefi - -z/OSfi - -z16™ - - - -Back cover - - - -REDP-5695-00 - -ISBN 0738461067 - - \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/redp5695.pages.json b/tests/data/groundtruth/docling_v2/redp5695.pages.json deleted file mode 100644 index 9c82cd2d..00000000 --- a/tests/data/groundtruth/docling_v2/redp5695.pages.json +++ /dev/null @@ -1 +0,0 @@ -[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 467.1597595214844, "t": 740.4200439453125, "r": 571.54285, "b": 768.4144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.779976487159729, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 41.4967, "t": 628.998046875, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}, "confidence": 0.7684483528137207, "cells": [{"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 44.82, "t": 108.52611541748047, "r": 535.76471, "b": 196.12842, "coord_origin": "TOPLEFT"}, "confidence": 0.722160816192627, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 43.98441696166992, "t": 300.904052734375, "r": 124.95372772216797, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8301644325256348, "cells": [{"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 44.41876983642578, "t": 326.1069030761719, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8449194431304932, "cells": [{"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 44.286624908447266, "t": 351.3352355957031, "r": 204.99734, "b": 365.7846984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.7996292114257812, "cells": [{"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 44.1224250793457, "t": 376.6038818359375, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}, "confidence": 0.8224513530731201, "cells": [{"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 408.87640380859375, "t": 34.33623504638672, "r": 569.0722045898438, "b": 78.19747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9278379678726196, "cells": []}, {"id": 9, "label": "picture", "bbox": {"l": 46.60354995727539, "t": 732.5934448242188, "r": 127.91421508789062, "b": 765.55322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.8796597719192505, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 467.1597595214844, "t": 740.4200439453125, "r": 571.54285, "b": 768.4144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.779976487159729, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 41.4967, "t": 628.998046875, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}, "confidence": 0.7684483528137207, "cells": [{"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 44.82, "t": 108.52611541748047, "r": 535.76471, "b": 196.12842, "coord_origin": "TOPLEFT"}, "confidence": 0.722160816192627, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 43.98441696166992, "t": 300.904052734375, "r": 124.95372772216797, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8301644325256348, "cells": [{"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 44.41876983642578, "t": 326.1069030761719, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8449194431304932, "cells": [{"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 44.286624908447266, "t": 351.3352355957031, "r": 204.99734, "b": 365.7846984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.7996292114257812, "cells": [{"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 44.1224250793457, "t": 376.6038818359375, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}, "confidence": 0.8224513530731201, "cells": [{"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 408.87640380859375, "t": 34.33623504638672, "r": 569.0722045898438, "b": 78.19747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9278379678726196, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 0, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 46.60354995727539, "t": 732.5934448242188, "r": 127.91421508789062, "b": 765.55322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.8796597719192505, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "picture", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 467.1597595214844, "t": 740.4200439453125, "r": 571.54285, "b": 768.4144287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.779976487159729, "cells": [{"id": 0, "text": "Redguide", "bbox": {"l": 467.28, "t": 742.816563, "r": 571.54285, "b": 767.70096, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 41.4967, "t": 628.998046875, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}, "confidence": 0.7684483528137207, "cells": [{"id": 1, "text": "Data and AI", "bbox": {"l": 41.4967, "t": 630.4333300000001, "r": 138.05457, "b": 652.22569, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Front cover", "bbox": {"l": 285.95999, "t": 9.22802999999999, "r": 417.89999, "b": 31.42804000000001, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 44.82, "t": 108.52611541748047, "r": 535.76471, "b": 196.12842, "coord_origin": "TOPLEFT"}, "confidence": 0.722160816192627, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data on ", "bbox": {"l": 44.82, "t": 110.22455000000002, "r": 535.76471, "b": 151.12896999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "IBM Z", "bbox": {"l": 44.82, "t": 155.22400000000005, "r": 149.55365, "b": 196.12842, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 43.98441696166992, "t": 300.904052734375, "r": 124.95372772216797, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.8301644325256348, "cells": [{"id": 5, "text": "Jasmeet Bhatia", "bbox": {"l": 44.759998, "t": 301.83829, "r": 124.83324, "b": 314.28049000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 44.41876983642578, "t": 326.1069030761719, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8449194431304932, "cells": [{"id": 6, "text": "Ravi Gummadi", "bbox": {"l": 44.759998, "t": 327.3378000000001, "r": 119.91647, "b": 339.7799999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 44.286624908447266, "t": 351.3352355957031, "r": 204.99734, "b": 365.7846984863281, "coord_origin": "TOPLEFT"}, "confidence": 0.7996292114257812, "cells": [{"id": 7, "text": "Chandra Shekhar Reddy Potula", "bbox": {"l": 44.759998, "t": 352.83730999999995, "r": 204.99734, "b": 365.27951, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 44.1224250793457, "t": 376.6038818359375, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}, "confidence": 0.8224513530731201, "cells": [{"id": 8, "text": "Srirama Sharma", "bbox": {"l": 44.759998, "t": 378.33682, "r": 128.92659, "b": 390.77902, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 408.87640380859375, "t": 34.33623504638672, "r": 569.0722045898438, "b": 78.19747924804688, "coord_origin": "TOPLEFT"}, "confidence": 0.9278379678726196, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 9, "page_no": 0, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 46.60354995727539, "t": 732.5934448242188, "r": 127.91421508789062, "b": 765.55322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.8796597719192505, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.59157943725586, "t": 754.58740234375, "r": 180.34423828125, "b": 764.0753173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9356479644775391, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2573852539062, "t": 754.3030395507812, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8480042219161987, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 256.93267822265625, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.939366340637207, "cells": [{"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.93707275390625, "t": 315.9909362792969, "r": 547.28046, "b": 398.67059326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9878793358802795, "cells": [{"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.84193420410156, "t": 410.041015625, "r": 547.34985, "b": 468.02005, "coord_origin": "TOPLEFT"}, "confidence": 0.9871250987052917, "cells": [{"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.86183166503906, "t": 479.9052734375, "r": 547.28827, "b": 538.6532592773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879317879676819, "cells": [{"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.76502990722656, "t": 549.9137573242188, "r": 547.276, "b": 620.0858764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879330992698669, "cells": [{"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "footnote", "bbox": {"l": 136.8, "t": 725.2650146484375, "r": 387.78561, "b": 734.9249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.8821995854377747, "cells": [{"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 32.92374801635742, "t": 70.42400360107422, "r": 239.95321655273438, "b": 236.60231018066406, "coord_origin": "TOPLEFT"}, "confidence": 0.8423530459403992, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.59157943725586, "t": 754.58740234375, "r": 180.34423828125, "b": 764.0753173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9356479644775391, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2573852539062, "t": 754.3030395507812, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8480042219161987, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "section_header", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 256.93267822265625, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.939366340637207, "cells": [{"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Executive overview"}, {"label": "text", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93707275390625, "t": 315.9909362792969, "r": 547.28046, "b": 398.67059326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9878793358802795, "cells": [{"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology."}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.84193420410156, "t": 410.041015625, "r": 547.34985, "b": 468.02005, "coord_origin": "TOPLEFT"}, "confidence": 0.9871250987052917, "cells": [{"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}]}, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences."}, {"label": "text", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86183166503906, "t": 479.9052734375, "r": 547.28827, "b": 538.6532592773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879317879676819, "cells": [{"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput."}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.76502990722656, "t": 549.9137573242188, "r": 547.276, "b": 620.0858764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879330992698669, "cells": [{"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}]}, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "footnote", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "footnote", "bbox": {"l": 136.8, "t": 725.2650146484375, "r": 387.78561, "b": 734.9249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.8821995854377747, "cells": [{"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html"}, {"label": "picture", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 32.92374801635742, "t": 70.42400360107422, "r": 239.95321655273438, "b": 236.60231018066406, "coord_origin": "TOPLEFT"}, "confidence": 0.8423530459403992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 256.93267822265625, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.939366340637207, "cells": [{"id": 2, "text": "Executive overview ", "bbox": {"l": 64.800003, "t": 258.10803, "r": 292.85278, "b": 280.30800999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Executive overview"}, {"label": "text", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.93707275390625, "t": 315.9909362792969, "r": 547.28046, "b": 398.67059326171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9878793358802795, "cells": [{"id": 3, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and ", "bbox": {"l": 136.8, "t": 316.84872, "r": 506.27911, "b": 326.06171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "consumers. According to The National Health Care Anti-Fraud Association, health care fraud ", "bbox": {"l": 136.8, "t": 328.84854, "r": 547.28046, "b": 338.06152, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the ", "bbox": {"l": 136.8, "t": 340.84836, "r": 524.11841, "b": 350.06134, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "numerous other industries where fraudulent activities occur daily. In addition, the growing ", "bbox": {"l": 136.79968, "t": 352.84854, "r": 532.83832, "b": 362.06152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "amount of data that enterprises own makes it difficult for them to detect fraud. Businesses ", "bbox": {"l": 136.79968, "t": 364.84836, "r": 535.57996, "b": 374.06134, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "can benefit by using an analytical platform to fully integrate their data with artificial intelligence ", "bbox": {"l": 136.79968, "t": 376.84817999999996, "r": 547.19049, "b": 386.06116, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "(AI) technology. ", "bbox": {"l": 136.80066, "t": 388.84799, "r": 209.60324, "b": 398.06097000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Most industries are susceptible to fraud, which poses a risk to both businesses and consumers. According to The National Health Care Anti-Fraud Association, health care fraud alone causes the nation around $68 billion annually.$^{1}$ This statistic does not include the numerous other industries where fraudulent activities occur daily. In addition, the growing amount of data that enterprises own makes it difficult for them to detect fraud. Businesses can benefit by using an analytical platform to fully integrate their data with artificial intelligence (AI) technology."}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.84193420410156, "t": 410.041015625, "r": 547.34985, "b": 468.02005, "coord_origin": "TOPLEFT"}, "confidence": 0.9871250987052917, "cells": [{"id": 10, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, ", "bbox": {"l": 136.80066, "t": 410.8078, "r": 547.34985, "b": 420.02078, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient ", "bbox": {"l": 136.80066, "t": 422.80761999999993, "r": 534.58722, "b": 432.0206, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and ", "bbox": {"l": 136.80066, "t": 434.80743, "r": 547.26221, "b": 444.02042, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "interactive applications with embedded AI, colocate data with commercial applications, and ", "bbox": {"l": 136.80167, "t": 446.80725, "r": 540.7652, "b": 456.02022999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "use AI to make inferences. ", "bbox": {"l": 136.80167, "t": 458.80707, "r": 257.92322, "b": 468.02005, "coord_origin": "TOPLEFT"}}]}, "text": "With IBM Cloud Pakfi for Data on IBM Z, enterprises can modernize their data infrastructure, develop, and deploy machine learning (ML) and AI models, and instantiate highly efficient analytics deployment on IBM LinuxONE. Enterprises can create cutting-edge, intelligent, and interactive applications with embedded AI, colocate data with commercial applications, and use AI to make inferences."}, {"label": "text", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.86183166503906, "t": 479.9052734375, "r": 547.28827, "b": 538.6532592773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879317879676819, "cells": [{"id": 15, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM ", "bbox": {"l": 136.80167, "t": 480.82663, "r": 529.99939, "b": 490.03961, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are ", "bbox": {"l": 136.80165, "t": 492.82645, "r": 525.74866, "b": 502.03943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "supported on the platform, and how the associated features can help enterprise customers in ", "bbox": {"l": 136.80165, "t": 504.82626, "r": 547.28827, "b": 514.03925, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "building AI and ML models by using core transactional data, which results in decreased ", "bbox": {"l": 136.80165, "t": 516.82608, "r": 524.57123, "b": 526.0390600000001, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "latency and increased throughput. ", "bbox": {"l": 136.80165, "t": 528.8259, "r": 290.11591, "b": 538.03889, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redguide publication presents a high-level overview of IBM Z. It describes IBM Cloud Pak for Data (CP4D) on IBM Z and IBM LinuxONE, the different features that are supported on the platform, and how the associated features can help enterprise customers in building AI and ML models by using core transactional data, which results in decreased latency and increased throughput."}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.76502990722656, "t": 549.9137573242188, "r": 547.276, "b": 620.0858764648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9879330992698669, "cells": [{"id": 20, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and ", "bbox": {"l": 136.80165, "t": 550.84546, "r": 523.98566, "b": 560.05846, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the ", "bbox": {"l": 136.80165, "t": 562.84526, "r": 528.39105, "b": 572.05826, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D ", "bbox": {"l": 136.80165, "t": 574.84506, "r": 547.276, "b": 584.0580600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "on IBM Z and LinuxONE, this publication shows how businesses can implement a highly ", "bbox": {"l": 136.80165, "t": 586.84486, "r": 529.57623, "b": 596.05786, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "efficient analytics deployment that minimizes latency, cost inefficiencies, and potential ", "bbox": {"l": 136.80164, "t": 598.84467, "r": 517.91602, "b": 608.0576599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "security exposures that are connected with data transportation.", "bbox": {"l": 136.80164, "t": 610.84447, "r": 415.15964, "b": 620.05746, "coord_origin": "TOPLEFT"}}]}, "text": "This publication highlights real-time CP4D on IBM Z use cases. Real-time Clearing and Settlement Transactions, Trustworthy AI and its Role in Day-To-Day Monitoring, and the Prevention of Retail Crimes are use cases that are described in this publication. Using CP4D on IBM Z and LinuxONE, this publication shows how businesses can implement a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "footnote", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "footnote", "bbox": {"l": 136.8, "t": 725.2650146484375, "r": 387.78561, "b": 734.9249267578125, "coord_origin": "TOPLEFT"}, "confidence": 0.8821995854377747, "cells": [{"id": 26, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html", "bbox": {"l": 136.8, "t": 727.709961, "r": 387.78561, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$https://www.bcbsm.com/health-care-fraud/fraud-statistics.html"}, {"label": "picture", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 32.92374801635742, "t": 70.42400360107422, "r": 239.95321655273438, "b": 236.60231018066406, "coord_origin": "TOPLEFT"}, "confidence": 0.8423530459403992, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.59157943725586, "t": 754.58740234375, "r": 180.34423828125, "b": 764.0753173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9356479644775391, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2573852539062, "t": 754.3030395507812, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8480042219161987, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.95490646362305, "t": 754.27392578125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8809324502944946, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.65045166015625, "t": 754.6927490234375, "r": 261.53851, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9455875754356384, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.69976043701172, "t": 70.11424255371094, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.96026211977005, "cells": [{"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.16062927246094, "t": 102.75202941894531, "r": 539.55145, "b": 161.23336791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9878602623939514, "cells": [{"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.83799743652344, "t": 172.61083984375, "r": 515.68988, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9694333076477051, "cells": [{"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.797607421875, "t": 201.2985076904297, "r": 255.07155, "b": 211.79501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9466004967689514, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7379150390625, "t": 218.8182373046875, "r": 289.6485290527344, "b": 229.28843688964844, "coord_origin": "TOPLEFT"}, "confidence": 0.951557457447052, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.6077423095703, "t": 235.31582641601562, "r": 247.8863983154297, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9488750696182251, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.57025146484375, "t": 252.62242126464844, "r": 225.32553100585938, "b": 263.3917236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9447478652000427, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6380615234375, "t": 269.9613342285156, "r": 280.60699, "b": 280.2677307128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9515380263328552, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.63339233398438, "t": 286.7400207519531, "r": 210.07028, "b": 297.0730895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9383591413497925, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.1382598876953, "t": 308.8077392578125, "r": 521.94366, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.972258448600769, "cells": [{"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.73519897460938, "t": 342.67401123046875, "r": 434.58963000000006, "b": 353.0493469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9527294039726257, "cells": [{"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.62892150878906, "t": 364.7782287597656, "r": 415.6936, "b": 374.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9560132622718811, "cells": [{"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "footnote", "bbox": {"l": 136.5249786376953, "t": 725.1834106445312, "r": 311.82391, "b": 734.9193115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8997626900672913, "cells": [{"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95490646362305, "t": 754.27392578125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8809324502944946, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.65045166015625, "t": 754.6927490234375, "r": 261.53851, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9455875754356384, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.69976043701172, "t": 70.11424255371094, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.96026211977005, "cells": [{"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z: An overview"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.16062927246094, "t": 102.75202941894531, "r": 539.55145, "b": 161.23336791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9878602623939514, "cells": [{"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.83799743652344, "t": 172.61083984375, "r": 515.68988, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9694333076477051, "cells": [{"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following features:"}, {"label": "list_item", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.797607421875, "t": 201.2985076904297, "r": 255.07155, "b": 211.79501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9466004967689514, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH On-chip AI acceleration"}, {"label": "list_item", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7379150390625, "t": 218.8182373046875, "r": 289.6485290527344, "b": 229.28843688964844, "coord_origin": "TOPLEFT"}, "confidence": 0.951557457447052, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Quantum-safe crypto discovery"}, {"label": "list_item", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6077423095703, "t": 235.31582641601562, "r": 247.8863983154297, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9488750696182251, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Simplified compliance"}, {"label": "list_item", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.57025146484375, "t": 252.62242126464844, "r": 225.32553100585938, "b": 263.3917236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9447478652000427, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Flexible capacity"}, {"label": "list_item", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6380615234375, "t": 269.9613342285156, "r": 280.60699, "b": 280.2677307128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9515380263328552, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Modernization of applications"}, {"label": "list_item", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.63339233398438, "t": 286.7400207519531, "r": 210.07028, "b": 297.0730895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9383591413497925, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability"}, {"label": "text", "id": 11, "page_no": 3, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1382598876953, "t": 308.8077392578125, "r": 521.94366, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.972258448600769, "cells": [{"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "With these features, enterprises can upgrade applications while preserving secure and resilient data."}, {"label": "text", "id": 12, "page_no": 3, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.73519897460938, "t": 342.67401123046875, "r": 434.58963000000006, "b": 353.0493469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9527294039726257, "cells": [{"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}]}, "text": "To learn more about these features, see the IBM z16 product page."}, {"label": "text", "id": 13, "page_no": 3, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.62892150878906, "t": 364.7782287597656, "r": 415.6936, "b": 374.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9560132622718811, "cells": [{"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe."}, {"label": "footnote", "id": 14, "page_no": 3, "cluster": {"id": 14, "label": "footnote", "bbox": {"l": 136.5249786376953, "t": 725.1834106445312, "r": 311.82391, "b": 734.9193115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8997626900672913, "cells": [{"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/"}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.69976043701172, "t": 70.11424255371094, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.96026211977005, "cells": [{"id": 2, "text": "IBM Z: An overview", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 212.32149, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z: An overview"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.16062927246094, "t": 102.75202941894531, "r": 539.55145, "b": 161.23336791992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9878602623939514, "cells": [{"id": 3, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 529.59741, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top ", "bbox": {"l": 136.8, "t": 115.48852999999997, "r": 539.55145, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 514.55249, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "designed for voluminous data, maximum security, real-time transaction analysis, and cost ", "bbox": {"l": 136.79953, "t": 139.48852999999997, "r": 534.53912, "b": 148.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "efficiency. ", "bbox": {"l": 136.79955, "t": 151.48834, "r": 183.94521, "b": 160.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Ever wonder how many transactions a bank processes per day? What about the pace at which these transactions happen? According to an IBMfi report, 44 of 50 of the world\u2019s top banks use IBM Z mainframes for these daily transactions.$^{2}$ IBM Z is a platform that is designed for voluminous data, maximum security, real-time transaction analysis, and cost efficiency."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.83799743652344, "t": 172.61083984375, "r": 515.68988, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9694333076477051, "cells": [{"id": 8, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following ", "bbox": {"l": 136.79955, "t": 173.50793, "r": 515.68988, "b": 182.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "features: ", "bbox": {"l": 136.79955, "t": 185.50775, "r": 178.43532, "b": 194.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "The most recent platform for IBM Z is IBM z16\u2122. The IBM z16 supports the following features:"}, {"label": "list_item", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.797607421875, "t": 201.2985076904297, "r": 255.07155, "b": 211.79501342773438, "coord_origin": "TOPLEFT"}, "confidence": 0.9466004967689514, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 202.63696000000004, "r": 141.77954, "b": 211.41174, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "On-chip AI acceleration", "bbox": {"l": 151.19971, "t": 202.48755000000006, "r": 255.07155, "b": 211.70056, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH On-chip AI acceleration"}, {"label": "list_item", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7379150390625, "t": 218.8182373046875, "r": 289.6485290527344, "b": 229.28843688964844, "coord_origin": "TOPLEFT"}, "confidence": 0.951557457447052, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 219.67651, "r": 141.77954, "b": 228.45128999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Quantum-safe crypto discovery", "bbox": {"l": 151.19971, "t": 219.52710000000002, "r": 289.5531, "b": 228.74010999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Quantum-safe crypto discovery"}, {"label": "list_item", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.6077423095703, "t": 235.31582641601562, "r": 247.8863983154297, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9488750696182251, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 236.65630999999996, "r": 141.77954, "b": 245.43109000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Simplified compliance", "bbox": {"l": 151.19971, "t": 236.50689999999997, "r": 247.85254, "b": 245.71991000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Simplified compliance"}, {"label": "list_item", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.57025146484375, "t": 252.62242126464844, "r": 225.32553100585938, "b": 263.3917236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9447478652000427, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 253.63611000000003, "r": 141.77954, "b": 262.41089, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Flexible capacity", "bbox": {"l": 151.19971, "t": 253.48668999999995, "r": 225.05908, "b": 262.69971, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Flexible capacity"}, {"label": "list_item", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6380615234375, "t": 269.9613342285156, "r": 280.60699, "b": 280.2677307128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9515380263328552, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.79955, "t": 270.67566, "r": 141.77954, "b": 279.45043999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Modernization of applications", "bbox": {"l": 151.19971, "t": 270.52625, "r": 280.60699, "b": 279.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Modernization of applications"}, {"label": "list_item", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.63339233398438, "t": 286.7400207519531, "r": 210.07028, "b": 297.0730895996094, "coord_origin": "TOPLEFT"}, "confidence": 0.9383591413497925, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80054, "t": 287.65546, "r": 141.78053, "b": 296.43024, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Sustainability", "bbox": {"l": 151.2007, "t": 287.50607, "r": 210.07028, "b": 296.71906, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability"}, {"label": "text", "id": 11, "page_no": 3, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.1382598876953, "t": 308.8077392578125, "r": 521.94366, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.972258448600769, "cells": [{"id": 22, "text": "With these features, enterprises can upgrade applications while preserving secure and ", "bbox": {"l": 136.80054, "t": 309.52563, "r": 521.94366, "b": 318.73862, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resilient data.", "bbox": {"l": 136.80054, "t": 321.52545, "r": 196.20497, "b": 330.73842999999994, "coord_origin": "TOPLEFT"}}]}, "text": "With these features, enterprises can upgrade applications while preserving secure and resilient data."}, {"label": "text", "id": 12, "page_no": 3, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.73519897460938, "t": 342.67401123046875, "r": 434.58963000000006, "b": 353.0493469238281, "coord_origin": "TOPLEFT"}, "confidence": 0.9527294039726257, "cells": [{"id": 24, "text": "To learn more about these features, see the IBM z16 product page.", "bbox": {"l": 136.80054, "t": 343.48526, "r": 434.58963000000006, "b": 352.69824, "coord_origin": "TOPLEFT"}}]}, "text": "To learn more about these features, see the IBM z16 product page."}, {"label": "text", "id": 13, "page_no": 3, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.62892150878906, "t": 364.7782287597656, "r": 415.6936, "b": 374.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9560132622718811, "cells": [{"id": 25, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe. ", "bbox": {"l": 136.80057, "t": 365.50482, "r": 415.6936, "b": 374.7178, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 on page 3 shows a picture of the IBM z16 mainframe."}, {"label": "footnote", "id": 14, "page_no": 3, "cluster": {"id": 14, "label": "footnote", "bbox": {"l": 136.5249786376953, "t": 725.1834106445312, "r": 311.82391, "b": 734.9193115234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8997626900672913, "cells": [{"id": 26, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/", "bbox": {"l": 136.8, "t": 727.709961, "r": 311.82391, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$https://www.ibm.com/case-studies/bankwest/"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.95490646362305, "t": 754.27392578125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8809324502944946, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.65045166015625, "t": 754.6927490234375, "r": 261.53851, "b": 763.9190063476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9455875754356384, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 541.0438232421875, "t": 754.4629516601562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8937394618988037, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 135.89208984375, "t": 448.34100341796875, "r": 211.0067596435547, "b": 458.0682678222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9125407934188843, "cells": [{"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.32122039794922, "t": 477.1279602050781, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}, "confidence": 0.9492653012275696, "cells": [{"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.82815551757812, "t": 503.3326416015625, "r": 547.17712, "b": 561.62086, "coord_origin": "TOPLEFT"}, "confidence": 0.977308452129364, "cells": [{"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 136.13192749023438, "t": 77.53209686279297, "r": 435.85162353515625, "b": 446.31475830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9853245615959167, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.0438232421875, "t": 754.4629516601562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8937394618988037, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}, {"label": "caption", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 135.89208984375, "t": 448.34100341796875, "r": 211.0067596435547, "b": 458.0682678222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9125407934188843, "cells": [{"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 IBM z16"}, {"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.32122039794922, "t": 477.1279602050781, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}, "confidence": 0.9492653012275696, "cells": [{"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16 and IBM LinuxONE Emperor 4 features"}, {"label": "text", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82815551757812, "t": 503.3326416015625, "r": 547.17712, "b": 561.62086, "coord_origin": "TOPLEFT"}, "confidence": 0.977308452129364, "cells": [{"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI."}, {"label": "picture", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.13192749023438, "t": 77.53209686279297, "r": 435.85162353515625, "b": 446.31475830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9853245615959167, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 135.89208984375, "t": 448.34100341796875, "r": 211.0067596435547, "b": 458.0682678222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9125407934188843, "cells": [{"id": 1, "text": "Figure 1 IBM z16", "bbox": {"l": 136.8, "t": 449.41799999999995, "r": 210.1689, "b": 457.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1 IBM z16"}, {"label": "section_header", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.32122039794922, "t": 477.1279602050781, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}, "confidence": 0.9492653012275696, "cells": [{"id": 2, "text": "IBM z16 and IBM LinuxONE Emperor 4 features", "bbox": {"l": 64.800003, "t": 478.25473, "r": 355.60165, "b": 490.24271, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16 and IBM LinuxONE Emperor 4 features"}, {"label": "text", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.82815551757812, "t": 503.3326416015625, "r": 547.17712, "b": 561.62086, "coord_origin": "TOPLEFT"}, "confidence": 0.977308452129364, "cells": [{"id": 3, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based ", "bbox": {"l": 136.8, "t": 504.40863, "r": 518.50519, "b": 513.6216099999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "workloads and databases, IBM Z has undergone tremendous transformations in its system ", "bbox": {"l": 136.8, "t": 516.40845, "r": 539.5545, "b": 525.6214299999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "design for many generations to build servers that cater to Linux-based workloads and security ", "bbox": {"l": 136.8, "t": 528.4082599999999, "r": 547.17712, "b": 537.62126, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "with a cyberresilient system, and support quantum computing and modernization by using a ", "bbox": {"l": 136.8, "t": 540.40807, "r": 543.91998, "b": 549.6210599999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "hybrid cloud with a focus on data and AI. ", "bbox": {"l": 136.8, "t": 552.40787, "r": 319.59286, "b": 561.62086, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z are based on enterprise mainframe technology. Starting with transaction-based workloads and databases, IBM Z has undergone tremendous transformations in its system design for many generations to build servers that cater to Linux-based workloads and security with a cyberresilient system, and support quantum computing and modernization by using a hybrid cloud with a focus on data and AI."}, {"label": "picture", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 136.13192749023438, "t": 77.53209686279297, "r": 435.85162353515625, "b": 446.31475830078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9853245615959167, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.0438232421875, "t": 754.4629516601562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8937394618988037, "cells": [{"id": 0, "text": "3", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "3"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.14278411865234, "t": 754.1334838867188, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8598024249076843, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.67771911621094, "t": 754.752685546875, "r": 261.53851, "b": 763.8809204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9530899524688721, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.2760009765625, "t": 70.37826538085938, "r": 543.51959, "b": 92.84950256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.8470332026481628, "cells": [{"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.39653778076172, "t": 378.7839050292969, "r": 213.14488220214844, "b": 388.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9416331648826599, "cells": [{"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.178955078125, "t": 400.78466796875, "r": 547.25659, "b": 494.9367980957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9834467768669128, "cells": [{"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1420135498047, "t": 506.7176818847656, "r": 547.25757, "b": 565.1494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871375560760498, "cells": [{"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.98974609375, "t": 106.94452667236328, "r": 547.5855102539062, "b": 375.7152404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836835265159607, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.14278411865234, "t": 754.1334838867188, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8598024249076843, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.67771911621094, "t": 754.752685546875, "r": 261.53851, "b": 763.8809204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9530899524688721, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.2760009765625, "t": 70.37826538085938, "r": 543.51959, "b": 92.84950256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.8470332026481628, "cells": [{"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement."}, {"label": "caption", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.39653778076172, "t": 378.7839050292969, "r": 213.14488220214844, "b": 388.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9416331648826599, "cells": [{"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 IBM Z: Processor roadmap"}, {"label": "text", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.178955078125, "t": 400.78466796875, "r": 547.25659, "b": 494.9367980957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9834467768669128, "cells": [{"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization."}, {"label": "text", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1420135498047, "t": 506.7176818847656, "r": 547.25757, "b": 565.1494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871375560760498, "cells": [{"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory."}, {"label": "picture", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.98974609375, "t": 106.94452667236328, "r": 547.5855102539062, "b": 375.7152404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836835265159607, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.2760009765625, "t": 70.37826538085938, "r": 543.51959, "b": 92.84950256347656, "coord_origin": "TOPLEFT"}, "confidence": 0.8470332026481628, "cells": [{"id": 2, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 543.51959, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transformation and improvement. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 286.23691, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 provides a snapshot of the IBM Z processor roadmap, which depicts the journey of transformation and improvement."}, {"label": "caption", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.39653778076172, "t": 378.7839050292969, "r": 213.14488220214844, "b": 388.0233459472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9416331648826599, "cells": [{"id": 4, "text": "Figure 2 IBM Z: Processor roadmap", "bbox": {"l": 64.800003, "t": 379.45801, "r": 212.60968, "b": 387.78302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 2 IBM Z: Processor roadmap"}, {"label": "text", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.178955078125, "t": 400.78466796875, "r": 547.25659, "b": 494.9367980957031, "coord_origin": "TOPLEFT"}, "confidence": 0.9834467768669128, "cells": [{"id": 5, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are ", "bbox": {"l": 136.8, "t": 401.38873, "r": 512.94336, "b": 410.60172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure ", "bbox": {"l": 136.8, "t": 413.38855, "r": 544.58929, "b": 422.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "platform for business with an extra focus on sustainability to help build sustainable data ", "bbox": {"l": 136.8, "t": 425.38837, "r": 524.4342, "b": 434.60135, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE ", "bbox": {"l": 136.80002, "t": 437.38818, "r": 544.23865, "b": 446.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. ", "bbox": {"l": 136.80002, "t": 449.388, "r": 542.95471, "b": 458.60098000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Depending on the workload, consolidation from numerous x86 servers into a LinuxONE ", "bbox": {"l": 136.80002, "t": 461.38782, "r": 525.11334, "b": 470.6008, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, ", "bbox": {"l": 136.80002, "t": 473.38763, "r": 547.25659, "b": 482.60062, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "which helps to achieve the sustainability goals of the organization.", "bbox": {"l": 136.80002, "t": 485.38745, "r": 428.53240999999997, "b": 494.60043, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 are the latest of the IBM Z, and they are developed with a \u2018built to build\u2019 focus to provide a powerful, cyberresilient, open, and secure platform for business with an extra focus on sustainability to help build sustainable data centers. Although the z16 server can host both IBM z/OSfi and Linux workloads, LinuxONE Emperor 4 is built to host Linux only workloads with a focus on consolidation and resiliency. Depending on the workload, consolidation from numerous x86 servers into a LinuxONE Emperor 4 can help reduce energy consumption by 75% and data center floor space by 50%, which helps to achieve the sustainability goals of the organization."}, {"label": "text", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1420135498047, "t": 506.7176818847656, "r": 547.25757, "b": 565.1494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871375560760498, "cells": [{"id": 13, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with ", "bbox": {"l": 136.80101, "t": 507.40701, "r": 547.25757, "b": 516.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise ", "bbox": {"l": 136.80101, "t": 519.40683, "r": 531.66705, "b": 528.6198099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications efficiently where their data resides to embed AI with super low latency. The ", "bbox": {"l": 136.80101, "t": 531.40662, "r": 526.3158, "b": 540.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "support for higher bandwidth and I/O rates is supported through FCP Express cards with an ", "bbox": {"l": 136.80101, "t": 543.40643, "r": 544.12909, "b": 552.61943, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "endpoint security solution. The memory subsystem supports up to 40 TB of memory.", "bbox": {"l": 136.80101, "t": 555.40623, "r": 510.1834999999999, "b": 564.61923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 on page 5 shows a summary of the system design of IBM LinuxONE Emperor 4 with the IBM Telum\u2122 processor. The IBM Telum processor chip is designed to run enterprise applications efficiently where their data resides to embed AI with super low latency. The support for higher bandwidth and I/O rates is supported through FCP Express cards with an endpoint security solution. The memory subsystem supports up to 40 TB of memory."}, {"label": "picture", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.98974609375, "t": 106.94452667236328, "r": 547.5855102539062, "b": 375.7152404785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836835265159607, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.14278411865234, "t": 754.1334838867188, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8598024249076843, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.67771911621094, "t": 754.752685546875, "r": 261.53851, "b": 763.8809204101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9530899524688721, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 541.200439453125, "t": 754.4961547851562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8813691735267639, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.30784606933594, "t": 352.14569091796875, "r": 297.72265625, "b": 361.3935241699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9315948486328125, "cells": [{"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.62088012695312, "t": 374.16082763671875, "r": 547.29742, "b": 432.24200439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9837573170661926, "cells": [{"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.72621154785156, "t": 444.0623474121094, "r": 547.32227, "b": 514.1723022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9840249419212341, "cells": [{"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 65.5059585571289, "t": 79.5738296508789, "r": 547.4702758789062, "b": 350.3516845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6088427901268005, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.200439453125, "t": 754.4961547851562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8813691735267639, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}, {"label": "caption", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.30784606933594, "t": 352.14569091796875, "r": 297.72265625, "b": 361.3935241699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9315948486328125, "cells": [{"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.62088012695312, "t": 374.16082763671875, "r": 547.29742, "b": 432.24200439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9837573170661926, "cells": [{"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has \u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection."}, {"label": "text", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.72621154785156, "t": 444.0623474121094, "r": 547.32227, "b": 514.1723022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9840249419212341, "cells": [{"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}]}, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression."}, {"label": "picture", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 65.5059585571289, "t": 79.5738296508789, "r": 547.4702758789062, "b": 350.3516845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6088427901268005, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.30784606933594, "t": 352.14569091796875, "r": 297.72265625, "b": 361.3935241699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9315948486328125, "cells": [{"id": 1, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4", "bbox": {"l": 64.800003, "t": 352.81799, "r": 297.52286, "b": 361.14301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3 System design of IBM z16 LinuxONE Emperor 4"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.62088012695312, "t": 374.16082763671875, "r": 547.29742, "b": 432.24200439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9837573170661926, "cells": [{"id": 2, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a ", "bbox": {"l": 136.8, "t": 374.80872, "r": 524.61151, "b": 384.0217, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "5.2", "bbox": {"l": 136.8, "t": 386.80853, "r": 150.69597, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GHz speed. They consist of four dual-chip modules (DCMs) per central processor ", "bbox": {"l": 153.47516, "t": 386.80853, "r": 516.81982, "b": 396.02151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has ", "bbox": {"l": 136.8, "t": 398.80835, "r": 547.29742, "b": 408.02133, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "\u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which ", "bbox": {"l": 136.8, "t": 410.80816999999996, "r": 544.5694, "b": 420.02115, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "supports many different use cases, including fraud detection. ", "bbox": {"l": 136.80103, "t": 422.80798, "r": 408.50385, "b": 432.02097, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 servers are built with 7-nm technology at a 5.2 GHz speed. They consist of four dual-chip modules (DCMs) per central processor complex (CPC) drawer, each of which is built with two 8-core Telum processor chips that has \u201cfirst in the industry\u201d on-chip acceleration for mid-transaction, real-time AI inferencing, which supports many different use cases, including fraud detection."}, {"label": "text", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.72621154785156, "t": 444.0623474121094, "r": 547.32227, "b": 514.1723022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9840249419212341, "cells": [{"id": 8, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache ", "bbox": {"l": 136.80103, "t": 444.82755, "r": 547.32227, "b": 454.04053, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the ", "bbox": {"l": 136.80103, "t": 456.82736, "r": 545.1839, "b": 466.04034, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chip. This cache helps address translation and access checking by prefetching the same ", "bbox": {"l": 136.80103, "t": 468.82718, "r": 530.6084, "b": 478.04016, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing ", "bbox": {"l": 136.80104, "t": 480.827, "r": 540.67108, "b": 490.03998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Assist instructions and direct memory access with protection, and per chip GZIP ", "bbox": {"l": 136.80104, "t": 492.82681, "r": 492.88702, "b": 502.03979, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "compression.", "bbox": {"l": 136.80103, "t": 504.82663, "r": 196.24731, "b": 514.03961, "coord_origin": "TOPLEFT"}}]}, "text": "Each core has access to a huge private 32 MB L2 cache where up to 16 MB of the L2 cache of an inactive core can be used as virtual cache (L3 / L4) by neighboring active cores on the chip. This cache helps address translation and access checking by prefetching the same virtual cache into the L2 cache. The virtual cache also includes Neural Network Processing Assist instructions and direct memory access with protection, and per chip GZIP compression."}, {"label": "picture", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 65.5059585571289, "t": 79.5738296508789, "r": 547.4702758789062, "b": 350.3516845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6088427901268005, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 541.200439453125, "t": 754.4961547851562, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8813691735267639, "cells": [{"id": 0, "text": "5", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "5"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.22818756103516, "t": 754.2823486328125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8751445412635803, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.59947204589844, "t": 754.7195434570312, "r": 261.53851, "b": 763.9192504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9498522877693176, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.43333435058594, "t": 70.56073760986328, "r": 541.31055, "b": 93.01757049560547, "coord_origin": "TOPLEFT"}, "confidence": 0.90760338306427, "cells": [{"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.16301727294922, "t": 364.0627746582031, "r": 387.35461, "b": 373.4560546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9267767071723938, "cells": [{"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.82852172851562, "t": 385.96783447265625, "r": 547.23456, "b": 468.49432373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9764872193336487, "cells": [{"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.02378845214844, "t": 479.8658142089844, "r": 544.62225, "b": 502.5115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9691742062568665, "cells": [{"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 65.81348419189453, "t": 108.23880767822266, "r": 547.791259765625, "b": 361.2843322753906, "coord_origin": "TOPLEFT"}, "confidence": 0.668588399887085, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22818756103516, "t": 754.2823486328125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8751445412635803, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.59947204589844, "t": 754.7195434570312, "r": 261.53851, "b": 763.9192504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9498522877693176, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43333435058594, "t": 70.56073760986328, "r": 541.31055, "b": 93.01757049560547, "coord_origin": "TOPLEFT"}, "confidence": 0.90760338306427, "cells": [{"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores."}, {"label": "caption", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.16301727294922, "t": 364.0627746582031, "r": 387.35461, "b": 373.4560546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9267767071723938, "cells": [{"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores"}, {"label": "text", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82852172851562, "t": 385.96783447265625, "r": 547.23456, "b": 468.49432373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9764872193336487, "cells": [{"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases."}, {"label": "text", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.02378845214844, "t": 479.8658142089844, "r": 544.62225, "b": 502.5115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9691742062568665, "cells": [{"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities."}, {"label": "picture", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 65.81348419189453, "t": 108.23880767822266, "r": 547.791259765625, "b": 361.2843322753906, "coord_origin": "TOPLEFT"}, "confidence": 0.668588399887085, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43333435058594, "t": 70.56073760986328, "r": 541.31055, "b": 93.01757049560547, "coord_origin": "TOPLEFT"}, "confidence": 0.90760338306427, "cells": [{"id": 2, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.31055, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Z processor cores. ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 242.90685999999997, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 provides more information about the features of AI Accelerator integration with the IBM Z processor cores."}, {"label": "caption", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.16301727294922, "t": 364.0627746582031, "r": 387.35461, "b": 373.4560546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9267767071723938, "cells": [{"id": 4, "text": "Figure 4", "bbox": {"l": 64.800003, "t": 365.05798, "r": 97.754448, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "IBM z16 on-chip AI Accelerator integration with IBM Z processor cores ", "bbox": {"l": 105.24736, "t": 365.05798, "r": 387.35461, "b": 373.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4 IBM z16 on-chip AI Accelerator integration with IBM Z processor cores"}, {"label": "text", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.82852172851562, "t": 385.96783447265625, "r": 547.23456, "b": 468.49432373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9764872193336487, "cells": [{"id": 6, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware ", "bbox": {"l": 136.8, "t": 387.04873999999995, "r": 528.51288, "b": 396.26172, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "features that are shown in Figure 4 with addressing data and AI workloads in mind. ", "bbox": {"l": 136.8, "t": 399.04855, "r": 505.67551, "b": 408.26154, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Regardless of where the ML and deep learning (DL) frameworks are used to build and train ", "bbox": {"l": 136.8, "t": 411.04837, "r": 542.40015, "b": 420.26135, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "data and AI models, the inferencing on existing enterprise application data can happen along ", "bbox": {"l": 136.8, "t": 423.0481899999999, "r": 547.23456, "b": 432.26117, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM ", "bbox": {"l": 136.8, "t": 435.048, "r": 540.64105, "b": 444.26099, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during ", "bbox": {"l": 136.8, "t": 447.04782, "r": 506.2542700000001, "b": 456.26079999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "inferencing. Support for various other frameworks is planned for future releases.", "bbox": {"l": 136.8, "t": 459.04764, "r": 490.18079000000006, "b": 468.26062, "coord_origin": "TOPLEFT"}}]}, "text": "The IBM z16 and IBM LinuxONE Emperor 4 server platforms are built with the hardware features that are shown in Figure 4 with addressing data and AI workloads in mind. Regardless of where the ML and deep learning (DL) frameworks are used to build and train data and AI models, the inferencing on existing enterprise application data can happen along currently running enterprise business applications. CP4D 4.6 supports Tensorflow and IBM Snap ML frameworks, which are optimized to use the on-chip AI Accelerator during inferencing. Support for various other frameworks is planned for future releases."}, {"label": "text", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.02378845214844, "t": 479.8658142089844, "r": 544.62225, "b": 502.5115051269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9691742062568665, "cells": [{"id": 13, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads ", "bbox": {"l": 136.8, "t": 481.00745, "r": 544.62225, "b": 490.22043, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "on the IBM z16 while leveraging the underlying hardware capabilities. ", "bbox": {"l": 136.8, "t": 493.00726, "r": 446.24227999999994, "b": 502.22025, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 on page 7 shows the seamless integration of AI into existing enterprises workloads on the IBM z16 while leveraging the underlying hardware capabilities."}, {"label": "picture", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 65.81348419189453, "t": 108.23880767822266, "r": 547.791259765625, "b": 361.2843322753906, "coord_origin": "TOPLEFT"}, "confidence": 0.668588399887085, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.22818756103516, "t": 754.2823486328125, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8751445412635803, "cells": [{"id": 0, "text": "6 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "6"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.59947204589844, "t": 754.7195434570312, "r": 261.53851, "b": 763.9192504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9498522877693176, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 540.8759155273438, "t": 754.2392578125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8702407479286194, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.26493072509766, "t": 301.75836181640625, "r": 189.6370086669922, "b": 310.74301, "coord_origin": "TOPLEFT"}, "confidence": 0.9447076320648193, "cells": [{"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.28071594238281, "t": 338.1206970214844, "r": 341.6769714355469, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9576840996742249, "cells": [{"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.9339141845703, "t": 370.57708740234375, "r": 547.13208, "b": 416.7144775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9846300482749939, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8167266845703, "t": 428.53900146484375, "r": 545.08618, "b": 546.9762573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9876003265380859, "cells": [{"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 63.88162612915039, "t": 77.46954345703125, "r": 547.2862548828125, "b": 299.900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9817203283309937, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.8759155273438, "t": 754.2392578125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8702407479286194, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}, {"label": "caption", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493072509766, "t": 301.75836181640625, "r": 189.6370086669922, "b": 310.74301, "coord_origin": "TOPLEFT"}, "confidence": 0.9447076320648193, "cells": [{"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 Seamless integration"}, {"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.28071594238281, "t": 338.1206970214844, "r": 341.6769714355469, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9576840996742249, "cells": [{"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What is Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9339141845703, "t": 370.57708740234375, "r": 547.13208, "b": 416.7144775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9846300482749939, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8167266845703, "t": 428.53900146484375, "r": 545.08618, "b": 546.9762573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9876003265380859, "cells": [{"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses."}, {"label": "picture", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.88162612915039, "t": 77.46954345703125, "r": 547.2862548828125, "b": 299.900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9817203283309937, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493072509766, "t": 301.75836181640625, "r": 189.6370086669922, "b": 310.74301, "coord_origin": "TOPLEFT"}, "confidence": 0.9447076320648193, "cells": [{"id": 1, "text": "Figure 5 Seamless integration", "bbox": {"l": 64.800003, "t": 302.41799999999995, "r": 189.15477, "b": 310.74301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 5 Seamless integration"}, {"label": "section_header", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.28071594238281, "t": 338.1206970214844, "r": 341.6769714355469, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9576840996742249, "cells": [{"id": 2, "text": "What is Cloud Pak for Data on IBM Z", "bbox": {"l": 64.800003, "t": 339.0607, "r": 341.13141, "b": 353.8236999999999, "coord_origin": "TOPLEFT"}}]}, "text": "What is Cloud Pak for Data on IBM Z"}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.9339141845703, "t": 370.57708740234375, "r": 547.13208, "b": 416.7144775390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9846300482749939, "cells": [{"id": 3, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data ", "bbox": {"l": 136.8, "t": 371.38873, "r": 547.13208, "b": 380.60172, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: ", "bbox": {"l": 136.8, "t": 383.38855, "r": 532.961, "b": 392.6015300000001, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder ", "bbox": {"l": 136.8, "t": 395.38837, "r": 534.08069, "b": 404.60135, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "rungs, see ", "bbox": {"l": 136.8, "t": 407.38818, "r": 186.25638, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Become Data Driven with IBM Z Infused Data Fabric", "bbox": {"l": 186.24045, "t": 407.38818, "r": 418.34933, "b": 416.60117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ", REDP-5680. ", "bbox": {"l": 418.44092, "t": 407.38818, "r": 482.83331, "b": 416.60117, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data allows enterprises to simplify, unify, and automate the delivery of data and AI. It categorizes the activities within the journey to AI as four rungs of the AI Ladder: Collect, Organize, Analyze, and Infuse. For more information about each of the AI Ladder rungs, see Become Data Driven with IBM Z Infused Data Fabric , REDP-5680."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8167266845703, "t": 428.53900146484375, "r": 545.08618, "b": 546.9762573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9876003265380859, "cells": [{"id": 9, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You ", "bbox": {"l": 136.80099, "t": 429.40775, "r": 542.388, "b": 438.62073000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "can use it to create ML and AI models that may be included into modern intelligent ", "bbox": {"l": 136.80099, "t": 441.40756, "r": 502.96643, "b": 450.62054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "applications. You also can use it to use and construct applications for mission-critical data. ", "bbox": {"l": 136.79999, "t": 453.40738, "r": 538.49261, "b": 462.62036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and ", "bbox": {"l": 136.79997, "t": 465.4072, "r": 545.08618, "b": 474.62018, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "potential security exposures. Enterprises can safely store and access their most important ", "bbox": {"l": 136.79997, "t": 477.40701, "r": 536.80255, "b": 486.62, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "company data, and leverage their current infrastructure by using cutting-edge hybrid cloud ", "bbox": {"l": 136.79997, "t": 489.40683, "r": 537.39636, "b": 498.61981, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "applications. Enterprises can combine their current database applications without any ", "bbox": {"l": 136.79997, "t": 501.40665, "r": 516.77905, "b": 510.61963, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, ", "bbox": {"l": 136.79997, "t": 513.4064599999999, "r": 527.8623, "b": 522.6194499999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "enterprises can update their database infrastructure to benefit from easier management, a ", "bbox": {"l": 136.79997, "t": 525.4062799999999, "r": 537.32935, "b": 534.6192599999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "quicker time to value, and lower operating expenses.", "bbox": {"l": 136.79997, "t": 537.40608, "r": 370.20856, "b": 546.6190799999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D on IBM Z provides enterprises with a resilient and secure private cloud platform. You can use it to create ML and AI models that may be included into modern intelligent applications. You also can use it to use and construct applications for mission-critical data. With CP4D on IBM Z, enterprises can lower data movement latency, cost inefficiencies, and potential security exposures. Enterprises can safely store and access their most important company data, and leverage their current infrastructure by using cutting-edge hybrid cloud applications. Enterprises can combine their current database applications without any rewrites, which results in reduced cost and complexity. Lastly, by using CP4D on IBM Z, enterprises can update their database infrastructure to benefit from easier management, a quicker time to value, and lower operating expenses."}, {"label": "picture", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.88162612915039, "t": 77.46954345703125, "r": 547.2862548828125, "b": 299.900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9817203283309937, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.8759155273438, "t": 754.2392578125, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8702407479286194, "cells": [{"id": 0, "text": "7", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "7"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.2588882446289, "t": 754.197998046875, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8762364983558655, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.62134552001953, "t": 754.7377319335938, "r": 261.53851, "b": 763.8740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9511485695838928, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.00271606445312, "t": 70.69949340820312, "r": 547.28058, "b": 164.883544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.984743595123291, "cells": [{"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.43482208251953, "t": 483.486328125, "r": 264.04919, "b": 492.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9446989297866821, "cells": [{"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.67288208007812, "t": 505.269287109375, "r": 518.39545, "b": 515.68896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9399420619010925, "cells": [{"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7481231689453, "t": 522.5965576171875, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}, "confidence": 0.9303468465805054, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7166748046875, "t": 539.3995971679688, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}, "confidence": 0.923041820526123, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.57183837890625, "t": 556.74267578125, "r": 263.64544677734375, "b": 567.2510986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9483156800270081, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.74082946777344, "t": 573.56103515625, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}, "confidence": 0.9437612891197205, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.00941467285156, "t": 595.1112670898438, "r": 547.28143, "b": 689.7734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9868659377098083, "cells": [{"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "picture", "bbox": {"l": 63.72787094116211, "t": 179.1451873779297, "r": 547.3121948242188, "b": 480.79541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9759865999221802, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2588882446289, "t": 754.197998046875, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8762364983558655, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.62134552001953, "t": 754.7377319335938, "r": 261.53851, "b": 763.8740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9511485695838928, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.00271606445312, "t": 70.69949340820312, "r": 547.28058, "b": 164.883544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.984743595123291, "cells": [{"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.43482208251953, "t": 483.486328125, "r": 264.04919, "b": 492.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9446989297866821, "cells": [{"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 Solution overview of Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.67288208007812, "t": 505.269287109375, "r": 518.39545, "b": 515.68896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9399420619010925, "cells": [{"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}]}, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D:"}, {"label": "list_item", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7481231689453, "t": 522.5965576171875, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}, "confidence": 0.9303468465805054, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and Scale"}, {"label": "list_item", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7166748046875, "t": 539.3995971679688, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}, "confidence": 0.923041820526123, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Embedded Accelerators"}, {"label": "list_item", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.57183837890625, "t": 556.74267578125, "r": 263.64544677734375, "b": 567.2510986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9483156800270081, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reliability and Availability"}, {"label": "list_item", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74082946777344, "t": 573.56103515625, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}, "confidence": 0.9437612891197205, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security and Governance."}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.00941467285156, "t": 595.1112670898438, "r": 547.28143, "b": 689.7734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9868659377098083, "cells": [{"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}]}, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security."}, {"label": "picture", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.72787094116211, "t": 179.1451873779297, "r": 547.3121948242188, "b": 480.79541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9759865999221802, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.00271606445312, "t": 70.69949340820312, "r": 547.28058, "b": 164.883544921875, "coord_origin": "TOPLEFT"}, "confidence": 0.984743595123291, "cells": [{"id": 2, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.24561, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 516.8139, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Common Foundational Services come next, which offer clarity throughout the data and AI ", "bbox": {"l": 136.80002, "t": 95.50829999999996, "r": 534.69507, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle, that is, from user access management to monitoring and service provisioning. A ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 532.9491, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "high-level view of the services is shown in the middle section. The services have several ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 529.53284, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a ", "bbox": {"l": 136.80005, "t": 131.50775, "r": 547.28058, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "seamless user experience for all distinct personas across the AI lifecycle, from data gathering ", "bbox": {"l": 136.80005, "t": 143.50757, "r": 547.19391, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "through AI infusion. ", "bbox": {"l": 136.80008, "t": 155.50739, "r": 225.63828, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 shows a solution overview of CP4D. The infrastructure alternatives are shown at the bottom, and they include IBM Z and LinuxONE. They all leverage Red Hat OpenShift. Common Foundational Services come next, which offer clarity throughout the data and AI lifecycle, that is, from user access management to monitoring and service provisioning. A high-level view of the services is shown in the middle section. The services have several different capabilities that span the AI hierarchy. The platform can be expanded, and it offers a seamless user experience for all distinct personas across the AI lifecycle, from data gathering through AI infusion."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.43482208251953, "t": 483.486328125, "r": 264.04919, "b": 492.95330810546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9446989297866821, "cells": [{"id": 10, "text": "Figure 6 Solution overview of Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 484.39798, "r": 264.04919, "b": 492.72299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 6 Solution overview of Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.67288208007812, "t": 505.269287109375, "r": 518.39545, "b": 515.68896484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9399420619010925, "cells": [{"id": 11, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D: ", "bbox": {"l": 136.8, "t": 506.38861, "r": 518.39545, "b": 515.60159, "coord_origin": "TOPLEFT"}}]}, "text": "We highlight the four main pillars that make IBM Z the correct infrastructure for CP4D:"}, {"label": "list_item", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7481231689453, "t": 522.5965576171875, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}, "confidence": 0.9303468465805054, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 523.51779, "r": 141.78096, "b": 532.2925700000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Performance and Scale", "bbox": {"l": 151.20113, "t": 523.36841, "r": 255.66061, "b": 532.58139, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Performance and Scale"}, {"label": "list_item", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7166748046875, "t": 539.3995971679688, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}, "confidence": 0.923041820526123, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 540.49762, "r": 141.78096, "b": 549.27237, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Embedded Accelerators", "bbox": {"l": 151.20113, "t": 540.34822, "r": 257.89264, "b": 549.56122, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Embedded Accelerators"}, {"label": "list_item", "id": 7, "page_no": 9, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.57183837890625, "t": 556.74267578125, "r": 263.64544677734375, "b": 567.2510986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9483156800270081, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 557.53719, "r": 141.78096, "b": 566.31194, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Reliability and Availability", "bbox": {"l": 151.20113, "t": 557.38779, "r": 263.38062, "b": 566.60078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Reliability and Availability"}, {"label": "list_item", "id": 8, "page_no": 9, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74082946777344, "t": 573.56103515625, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}, "confidence": 0.9437612891197205, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80096, "t": 574.517, "r": 141.78096, "b": 583.29175, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security and Governance. ", "bbox": {"l": 151.20113, "t": 574.3676, "r": 269.54684, "b": 583.5806, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security and Governance."}, {"label": "text", "id": 9, "page_no": 9, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.00941467285156, "t": 595.1112670898438, "r": 547.28143, "b": 689.7734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9868659377098083, "cells": [{"id": 20, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high ", "bbox": {"l": 136.80096, "t": 596.38716, "r": 518.51489, "b": 605.60016, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "transaction processing and a powerful infrastructure. From the embedded accelerators ", "bbox": {"l": 136.80096, "t": 608.38696, "r": 521.82758, "b": 617.59996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL ", "bbox": {"l": 136.80096, "t": 620.38676, "r": 536.88837, "b": 629.5997600000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "inference technology even in the most demanding, sensitive, and latency-prone real-time ", "bbox": {"l": 136.80096, "t": 632.38657, "r": 531.82153, "b": 641.59956, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "workloads. From a reliability perspective, CP4D on IBM Z provides high availability and ", "bbox": {"l": 136.80095, "t": 644.3863699999999, "r": 523.38043, "b": 653.59937, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting ", "bbox": {"l": 136.80096, "t": 656.38617, "r": 527.28973, "b": 665.59917, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "sensitive data and AI models for enterprises in highly regulated industries or those industries ", "bbox": {"l": 136.80098, "t": 668.38597, "r": 547.28143, "b": 677.59898, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "that are worried about security.", "bbox": {"l": 136.80098, "t": 680.38578, "r": 274.02484, "b": 689.59879, "coord_origin": "TOPLEFT"}}]}, "text": "From a performance perspective, CP4D on IBM Z provides your data and AI with high transaction processing and a powerful infrastructure. From the embedded accelerators perspective, CP4D on IBM Z can investigate each transaction thanks to a cutting-edge DL inference technology even in the most demanding, sensitive, and latency-prone real-time workloads. From a reliability perspective, CP4D on IBM Z provides high availability and resiliency. Lastly from the security perspective, CP4D on IBM Z is suitable for protecting sensitive data and AI models for enterprises in highly regulated industries or those industries that are worried about security."}, {"label": "picture", "id": 10, "page_no": 9, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 63.72787094116211, "t": 179.1451873779297, "r": 547.3121948242188, "b": 480.79541015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9759865999221802, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.2588882446289, "t": 754.197998046875, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8762364983558655, "cells": [{"id": 0, "text": "8 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "8"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.62134552001953, "t": 754.7377319335938, "r": 261.53851, "b": 763.8740234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9511485695838928, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 87.840302, "t": 755.538002, "r": 261.53851, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 540.9940795898438, "t": 754.3685302734375, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8976032733917236, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 64.78146362304688, "t": 70.03508758544922, "r": 519.7558, "b": 86.2610855102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9496250748634338, "cells": [{"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.4989776611328, "t": 102.55187225341797, "r": 544.54041, "b": 148.83160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9850783348083496, "cells": [{"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.4654083251953, "t": 155.99386596679688, "r": 341.2695007324219, "b": 165.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9414460062980652, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.58457946777344, "t": 172.69300842285156, "r": 423.51254, "b": 182.9974822998047, "coord_origin": "TOPLEFT"}, "confidence": 0.9599420428276062, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.65841674804688, "t": 189.37014770507812, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9574293494224548, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5748748779297, "t": 206.63885498046875, "r": 331.7222, "b": 216.97801208496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9566726684570312, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.54833984375, "t": 223.43775939941406, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9559329748153687, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.70672607421875, "t": 240.82850646972656, "r": 499.12784, "b": 251.19873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9593135714530945, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.2892303466797, "t": 262.5376892089844, "r": 538.98682, "b": 284.71887, "coord_origin": "TOPLEFT"}, "confidence": 0.9708739519119263, "cells": [{"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "section_header", "bbox": {"l": 64.76227569580078, "t": 312.55224609375, "r": 250.52972000000003, "b": 328.220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9684263467788696, "cells": [{"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.97999572753906, "t": 344.667724609375, "r": 543.42596, "b": 415.0365905761719, "coord_origin": "TOPLEFT"}, "confidence": 0.988315224647522, "cells": [{"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.85617065429688, "t": 426.64752197265625, "r": 547.23969, "b": 520.862060546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870705008506775, "cells": [{"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.98208618164062, "t": 532.6904296875, "r": 537.35345, "b": 578.9651489257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9855135083198547, "cells": [{"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.20474243164062, "t": 590.5270385742188, "r": 540.76263, "b": 624.9845581054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9835407137870789, "cells": [{"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 136.00357055664062, "t": 636.6727294921875, "r": 544.60699, "b": 683.03759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842023849487305, "cells": [{"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.9940795898438, "t": 754.3685302734375, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8976032733917236, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}, {"label": "section_header", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.78146362304688, "t": 70.03508758544922, "r": 519.7558, "b": 86.2610855102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9496250748634338, "cells": [{"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.4989776611328, "t": 102.55187225341797, "r": 544.54041, "b": 148.83160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9850783348083496, "cells": [{"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks:"}, {"label": "list_item", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.4654083251953, "t": 155.99386596679688, "r": 341.2695007324219, "b": 165.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9414460062980652, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Provision various containerized databases."}, {"label": "list_item", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.58457946777344, "t": 172.69300842285156, "r": 423.51254, "b": 182.9974822998047, "coord_origin": "TOPLEFT"}, "confidence": 0.9599420428276062, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore, clean, shape, and alter data by using Data Refinery."}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.65841674804688, "t": 189.37014770507812, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9574293494224548, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use project-specific data that is uploaded, or connect to distant data."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5748748779297, "t": 206.63885498046875, "r": 331.7222, "b": 216.97801208496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9566726684570312, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create Spark run times and applications."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.54833984375, "t": 223.43775939941406, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9559329748153687, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70672607421875, "t": 240.82850646972656, "r": 499.12784, "b": 251.19873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9593135714530945, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9."}, {"label": "text", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.2892303466797, "t": 262.5376892089844, "r": 538.98682, "b": 284.71887, "coord_origin": "TOPLEFT"}, "confidence": 0.9708739519119263, "cells": [{"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.76227569580078, "t": 312.55224609375, "r": 250.52972000000003, "b": 328.220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9684263467788696, "cells": [{"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source ecosystem"}, {"label": "text", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.97999572753906, "t": 344.667724609375, "r": 543.42596, "b": 415.0365905761719, "coord_origin": "TOPLEFT"}, "confidence": 0.988315224647522, "cells": [{"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building."}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.85617065429688, "t": 426.64752197265625, "r": 547.23969, "b": 520.862060546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870705008506775, "cells": [{"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}]}, "text": "IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.98208618164062, "t": 532.6904296875, "r": 537.35345, "b": 578.9651489257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9855135083198547, "cells": [{"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}]}, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing."}, {"label": "text", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.20474243164062, "t": 590.5270385742188, "r": 540.76263, "b": 624.9845581054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9835407137870789, "cells": [{"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE."}, {"label": "text", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.00357055664062, "t": 636.6727294921875, "r": 544.60699, "b": 683.03759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842023849487305, "cells": [{"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud."}], "body": [{"label": "section_header", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.78146362304688, "t": 70.03508758544922, "r": 519.7558, "b": 86.2610855102539, "coord_origin": "TOPLEFT"}, "confidence": 0.9496250748634338, "cells": [{"id": 1, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 519.7558, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Cloud Pak for Data capabilities on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.4989776611328, "t": 102.55187225341797, "r": 544.54041, "b": 148.83160400390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9850783348083496, "cells": [{"id": 2, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.20593, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM ", "bbox": {"l": 136.79999, "t": 115.48852999999997, "r": 536.32245, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Watson Machine Learning (WLM) services. By using these two fundamental services, users ", "bbox": {"l": 136.8, "t": 127.48834000000011, "r": 544.54041, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "can accomplish the following tasks:", "bbox": {"l": 136.80002, "t": 139.48816, "r": 292.84833, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With CP4D on IBM Z and IBM LinuxONE, users can develop, train, and deploy AI and ML models. Users can accomplish this task by using the CP4D IBM Watsonfi Studio and IBM Watson Machine Learning (WLM) services. By using these two fundamental services, users can accomplish the following tasks:"}, {"label": "list_item", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.4654083251953, "t": 155.99386596679688, "r": 341.2695007324219, "b": 165.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9414460062980652, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 156.67711999999995, "r": 141.78001, "b": 165.45190000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Provision various containerized databases.", "bbox": {"l": 151.20018, "t": 156.52770999999996, "r": 341.24393, "b": 165.74072, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Provision various containerized databases."}, {"label": "list_item", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.58457946777344, "t": 172.69300842285156, "r": 423.51254, "b": 182.9974822998047, "coord_origin": "TOPLEFT"}, "confidence": 0.9599420428276062, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 173.65692, "r": 141.78001, "b": 182.43169999999998, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Explore, clean, shape, and alter data by using Data Refinery. ", "bbox": {"l": 151.20018, "t": 173.50751000000002, "r": 423.51254, "b": 182.72051999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore, clean, shape, and alter data by using Data Refinery."}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.65841674804688, "t": 189.37014770507812, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9574293494224548, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 190.63671999999997, "r": 141.78001, "b": 199.41150000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use project-specific data that is uploaded, or connect to distant data.", "bbox": {"l": 151.20018, "t": 190.4873, "r": 454.56392999999997, "b": 199.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use project-specific data that is uploaded, or connect to distant data."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5748748779297, "t": 206.63885498046875, "r": 331.7222, "b": 216.97801208496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9566726684570312, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.8, "t": 207.67627000000005, "r": 141.78, "b": 216.45105, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Create Spark run times and applications.", "bbox": {"l": 151.20016, "t": 207.52686000000006, "r": 331.7222, "b": 216.73987, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create Spark run times and applications."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.54833984375, "t": 223.43775939941406, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9559329748153687, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 224.65607, "r": 141.78, "b": 233.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Create, build, evaluate, and deploy analytics and ML models with trust and transparency.", "bbox": {"l": 151.20016, "t": 224.50665000000004, "r": 544.10718, "b": 233.71966999999995, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Create, build, evaluate, and deploy analytics and ML models with trust and transparency."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.70672607421875, "t": 240.82850646972656, "r": 499.12784, "b": 251.19873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9593135714530945, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 241.63585999999998, "r": 141.78, "b": 250.41063999999994, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9.", "bbox": {"l": 151.20016, "t": 241.48645, "r": 499.12784, "b": 250.69946000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Leverage the AI Integrated Accelerator for TensorFlow 2.7.2 and Snap ML 1.9."}, {"label": "text", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.2892303466797, "t": 262.5376892089844, "r": 538.98682, "b": 284.71887, "coord_origin": "TOPLEFT"}, "confidence": 0.9708739519119263, "cells": [{"id": 18, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on ", "bbox": {"l": 136.8, "t": 263.50604, "r": 538.98682, "b": 272.71906, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "IBM Z and IBM LinuxONE.", "bbox": {"l": 136.79999, "t": 275.50586, "r": 254.52917, "b": 284.71887, "coord_origin": "TOPLEFT"}}]}, "text": "For more information about the specifics of these capabilities, see Capabilities on Linux on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "section_header", "bbox": {"l": 64.76227569580078, "t": 312.55224609375, "r": 250.52972000000003, "b": 328.220458984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9684263467788696, "cells": [{"id": 20, "text": "Open-source ecosystem", "bbox": {"l": 64.800003, "t": 313.20071, "r": 250.52972000000003, "b": 327.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source ecosystem"}, {"label": "text", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.97999572753906, "t": 344.667724609375, "r": 543.42596, "b": 415.0365905761719, "coord_origin": "TOPLEFT"}, "confidence": 0.988315224647522, "cells": [{"id": 21, "text": "These days, innovation and product development are not limited to closed doors within an ", "bbox": {"l": 136.8, "t": 345.52872, "r": 536.28241, "b": 354.7417, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "organization. In any industry sector, the solutions include a mix of proprietary code ", "bbox": {"l": 136.79999, "t": 357.52853, "r": 503.47137, "b": 366.74152, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "addressing the core business solution that is supported or integrated into other software ", "bbox": {"l": 136.79999, "t": 369.52835, "r": 527.47821, "b": 378.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "components from open source. In some cases, enterprises business solutions also are built ", "bbox": {"l": 136.79999, "t": 381.52817, "r": 543.42596, "b": 390.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "from open-source community offerings. Thus, open-source software becomes an important ", "bbox": {"l": 136.79999, "t": 393.52798, "r": 541.23053, "b": 402.74097, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "ingredient in modern-day solution building. ", "bbox": {"l": 136.79999, "t": 405.5278, "r": 327.38654, "b": 414.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "These days, innovation and product development are not limited to closed doors within an organization. In any industry sector, the solutions include a mix of proprietary code addressing the core business solution that is supported or integrated into other software components from open source. In some cases, enterprises business solutions also are built from open-source community offerings. Thus, open-source software becomes an important ingredient in modern-day solution building."}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.85617065429688, "t": 426.64752197265625, "r": 547.23969, "b": 520.862060546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9870705008506775, "cells": [{"id": 27, "text": "IBM actively participates in various open-source communities as part of steering boards ", "bbox": {"l": 136.79999, "t": 427.48761, "r": 526.17334, "b": 436.70059000000003, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "defining the roadmap of the community, and also in contributing code to make the community ", "bbox": {"l": 136.8, "t": 439.48743, "r": 547.23969, "b": 448.70041, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "a better place for everyone to participate. Red Hat also actively participates in various ", "bbox": {"l": 136.8, "t": 451.48724, "r": 517.25299, "b": 460.70023, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "open-source communities and makes extensive contributions. In open-source communities, ", "bbox": {"l": 136.8, "t": 463.48706, "r": 544.01959, "b": 472.70004, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "although most open-source development happens on x86 / amd64 or the Intel architecture, ", "bbox": {"l": 136.8, "t": 475.48688, "r": 541.23773, "b": 484.69986, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "the same open-source software is used by other architectures, such as IBM Power (ppc64le), ", "bbox": {"l": 136.8, "t": 487.54645, "r": 547.14795, "b": 496.75943, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ", "bbox": {"l": 136.8, "t": 499.54626, "r": 539.51367, "b": 508.75925, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ecosystem on any architecture is key and critical to business.", "bbox": {"l": 136.79901, "t": 511.54608, "r": 407.2449, "b": 520.75906, "coord_origin": "TOPLEFT"}}]}, "text": "IBM actively participates in various open-source communities as part of steering boards defining the roadmap of the community, and also in contributing code to make the community a better place for everyone to participate. Red Hat also actively participates in various open-source communities and makes extensive contributions. In open-source communities, although most open-source development happens on x86 / amd64 or the Intel architecture, the same open-source software is used by other architectures, such as IBM Power (ppc64le), IBM Z and IBM LInuxONE (s390x), ARM, and Sparc. So, the availability of an open-source ecosystem on any architecture is key and critical to business."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.98208618164062, "t": 532.6904296875, "r": 537.35345, "b": 578.9651489257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9855135083198547, "cells": [{"id": 35, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ", "bbox": {"l": 136.79901, "t": 533.50589, "r": 527.90936, "b": 542.71889, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "ecosystem that ranges from operating systems such as Linux; application run times; cloud ", "bbox": {"l": 136.79901, "t": 545.50569, "r": 537.35345, "b": 554.71869, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and container services; DevOps and automation; big data; observability; analytics; ", "bbox": {"l": 136.79901, "t": 557.50549, "r": 502.30115, "b": 566.71849, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing.", "bbox": {"l": 136.79803, "t": 569.5052900000001, "r": 496.86108, "b": 578.71829, "coord_origin": "TOPLEFT"}}]}, "text": "On IBM Z and IBM LinuxONE (s390x) architecture, there is a huge open-source support ecosystem that ranges from operating systems such as Linux; application run times; cloud and container services; DevOps and automation; big data; observability; analytics; databases; and storage. The ecosystem on IBM Z and IBM LinuxONE is growing."}, {"label": "text", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.20474243164062, "t": 590.5270385742188, "r": 540.76263, "b": 624.9845581054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9835407137870789, "cells": [{"id": 39, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can ", "bbox": {"l": 136.79803, "t": 591.52486, "r": 540.76263, "b": 600.73785, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "see the growing list of open-source software for IBM Z and LinuxONE at The Growing ", "bbox": {"l": 136.79803, "t": 603.52466, "r": 517.90955, "b": 612.73766, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Ecosystem of Open-Source Software for IBM Z and LinuxONE.", "bbox": {"l": 136.79803, "t": 615.52446, "r": 415.62726, "b": 624.73746, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE include much open-source software in their ecosystem. You can see the growing list of open-source software for IBM Z and LinuxONE at The Growing Ecosystem of Open-Source Software for IBM Z and LinuxONE."}, {"label": "text", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "text", "bbox": {"l": 136.00357055664062, "t": 636.6727294921875, "r": 544.60699, "b": 683.03759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9842023849487305, "cells": [{"id": 42, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x ", "bbox": {"l": 136.79803, "t": 637.54402, "r": 544.60699, "b": 646.75702, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). ", "bbox": {"l": 136.79803, "t": 649.54382, "r": 538.40308, "b": 658.7568200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Also, for open-source community developers, infrastructure resources are available on a ", "bbox": {"l": 136.79802, "t": 661.54362, "r": 529.5954, "b": 670.75663, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "no-charge basis through the IBM LinuxONE community cloud. ", "bbox": {"l": 136.79802, "t": 673.54343, "r": 413.47775, "b": 682.75644, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Z and IBM LinuxONE are available to various communities to include support for s390x builds as part of their community\u2019s continuous integration and continuous delivery (CI/CD). Also, for open-source community developers, infrastructure resources are available on a no-charge basis through the IBM LinuxONE community cloud."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 540.9940795898438, "t": 754.3685302734375, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8976032733917236, "cells": [{"id": 0, "text": "9", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "9"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.45117950439453, "t": 754.43408203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155402183532715, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.23697662353516, "t": 754.7630004882812, "r": 267.0744, "b": 764.1210327148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9532065987586975, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.01052856445312, "t": 70.46507263183594, "r": 547.31226, "b": 140.8048095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9860562086105347, "cells": [{"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.78475952148438, "t": 152.72494506835938, "r": 547.35016, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9879527688026428, "cells": [{"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.8437957763672, "t": 222.7408905029297, "r": 546.23071, "b": 292.7997741699219, "coord_origin": "TOPLEFT"}, "confidence": 0.988102376461029, "cells": [{"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.206298828125, "t": 304.8152160644531, "r": 521.34369, "b": 327.1700744628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9795346260070801, "cells": [{"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.09524536132812, "t": 354.2298889160156, "r": 191.27430725097656, "b": 370.04730224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9598572254180908, "cells": [{"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.68882751464844, "t": 386.67742919921875, "r": 547.25861, "b": 457.1266174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9882671236991882, "cells": [{"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.5255584716797, "t": 468.73712158203125, "r": 547.28253, "b": 551.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9885222911834717, "cells": [{"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.04042053222656, "t": 562.6182861328125, "r": 547.3233, "b": 608.7926635742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9859467148780823, "cells": [{"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45117950439453, "t": 754.43408203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155402183532715, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.23697662353516, "t": 754.7630004882812, "r": 267.0744, "b": 764.1210327148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9532065987586975, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.01052856445312, "t": 70.46507263183594, "r": 547.31226, "b": 140.8048095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9860562086105347, "cells": [{"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms."}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.78475952148438, "t": 152.72494506835938, "r": 547.35016, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9879527688026428, "cells": [{"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE."}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8437957763672, "t": 222.7408905029297, "r": 546.23071, "b": 292.7997741699219, "coord_origin": "TOPLEFT"}, "confidence": 0.988102376461029, "cells": [{"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server."}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.206298828125, "t": 304.8152160644531, "r": 521.34369, "b": 327.1700744628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9795346260070801, "cells": [{"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}]}, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers."}, {"label": "section_header", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.09524536132812, "t": 354.2298889160156, "r": 191.27430725097656, "b": 370.04730224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9598572254180908, "cells": [{"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Why AI on IBM Z"}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.68882751464844, "t": 386.67742919921875, "r": 547.25861, "b": 457.1266174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9882671236991882, "cells": [{"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.5255584716797, "t": 468.73712158203125, "r": 547.28253, "b": 551.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9885222911834717, "cells": [{"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}]}, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z)."}, {"label": "text", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04042053222656, "t": 562.6182861328125, "r": 547.3233, "b": 608.7926635742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9859467148780823, "cells": [{"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model."}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.01052856445312, "t": 70.46507263183594, "r": 547.31226, "b": 140.8048095703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9860562086105347, "cells": [{"id": 2, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 513.53369, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "open-source run times like Python; open-source data platforms like Anaconda; ML and DL ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 537.95197, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of ", "bbox": {"l": 136.79999, "t": 95.50829999999996, "r": 547.31226, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "them are available and supported on s390x architecture to provide seamless parity with x86 ", "bbox": {"l": 136.79999, "t": 107.50811999999996, "r": 544.53857, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "architecture and a seamless experience for enterprise data scientists, architects, and data ", "bbox": {"l": 136.79999, "t": 119.50792999999999, "r": 536.82458, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and AI solution developers on IBM Z and IBM LinuxONE platforms.", "bbox": {"l": 136.79999, "t": 131.50775, "r": 432.89679, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D includes a mix of open-source and proprietary data and AI runtime databases; open-source run times like Python; open-source data platforms like Anaconda; ML and DL frameworks like Pytorch and Tensorflow; and thousands of reusable Python packages. All of them are available and supported on s390x architecture to provide seamless parity with x86 architecture and a seamless experience for enterprise data scientists, architects, and data and AI solution developers on IBM Z and IBM LinuxONE platforms."}, {"label": "text", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.78475952148438, "t": 152.72494506835938, "r": 547.35016, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9879527688026428, "cells": [{"id": 8, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data ", "bbox": {"l": 136.79999, "t": 153.52733999999998, "r": 536.9231, "b": 162.74036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "science ML frameworks; analytics and data visualization tools; and open-source data science ", "bbox": {"l": 136.79999, "t": 165.52715999999998, "r": 547.35016, "b": 174.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux ", "bbox": {"l": 136.79999, "t": 177.52697999999998, "r": 542.97577, "b": 186.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For ", "bbox": {"l": 136.79999, "t": 189.52679, "r": 533.46613, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE.", "bbox": {"l": 136.8, "t": 201.52661, "r": 491.7684300000001, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Anaconda is one of the open-source data platforms that provide Python and R based data science ML frameworks; analytics and data visualization tools; and open-source data science tools and libraries like Conda, XGBoost, and SciKit-Learn. Anaconda runs natively on Linux on IBM Z and IBM LinuxONE, and on IBM z/OS Container Extensions (zcX) on z/OS. For more information, see Announcing Anaconda for Linux on IBM Z and LinuxONE."}, {"label": "text", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.8437957763672, "t": 222.7408905029297, "r": 546.23071, "b": 292.7997741699219, "coord_origin": "TOPLEFT"}, "confidence": 0.988102376461029, "cells": [{"id": 13, "text": "In addition to strong, open-source ecosystem support for application development on Linux ", "bbox": {"l": 136.79901, "t": 223.48639000000003, "r": 540.69092, "b": 232.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers ", "bbox": {"l": 136.79901, "t": 235.48621000000003, "r": 534.01886, "b": 244.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "(IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be ", "bbox": {"l": 136.79901, "t": 247.48602000000005, "r": 539.51672, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "leveraged by open-source software to perform better on the server infrastructure. For ", "bbox": {"l": 136.80002, "t": 259.48584000000005, "r": 515.11157, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that ", "bbox": {"l": 136.80002, "t": 271.48566000000005, "r": 546.23071, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "leverage the AI accelerators when running on an IBM z16 server.", "bbox": {"l": 136.80003, "t": 283.4855, "r": 424.7088, "b": 292.69849, "coord_origin": "TOPLEFT"}}]}, "text": "In addition to strong, open-source ecosystem support for application development on Linux and enterprise operating systems, a new generation of IBM Z and IBM LinuxONE servers (IBM z16\u2122) also have strong platform support, and AI acceleration capabilities that can be leveraged by open-source software to perform better on the server infrastructure. For example, the recently released CP4D 4.6 has Tensorflow and IBM SnapML frameworks that leverage the AI accelerators when running on an IBM z16 server."}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.206298828125, "t": 304.8152160644531, "r": 521.34369, "b": 327.1700744628906, "coord_origin": "TOPLEFT"}, "confidence": 0.9795346260070801, "cells": [{"id": 19, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is ", "bbox": {"l": 136.80003, "t": 305.50507, "r": 521.34369, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "supported and optimized on IBM Z and IBM LinuxONE servers.", "bbox": {"l": 136.80003, "t": 317.50488000000007, "r": 416.28656, "b": 326.71786, "coord_origin": "TOPLEFT"}}]}, "text": "So, to summarize, there is a huge, growing data and AI open source ecosystem that is supported and optimized on IBM Z and IBM LinuxONE servers."}, {"label": "section_header", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.09524536132812, "t": 354.2298889160156, "r": 191.27430725097656, "b": 370.04730224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9598572254180908, "cells": [{"id": 21, "text": "Why AI on IBM Z", "bbox": {"l": 64.800003, "t": 355.20071, "r": 191.0069, "b": 369.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Why AI on IBM Z"}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.68882751464844, "t": 386.67742919921875, "r": 547.25861, "b": 457.1266174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9882671236991882, "cells": [{"id": 22, "text": "Data and AI playing a major role in the modernization story to enable the digital ", "bbox": {"l": 136.8, "t": 387.52872, "r": 489.0134, "b": 396.7417, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transformation journey of every organization. Many organizations recognize the business ", "bbox": {"l": 136.8, "t": 399.52853, "r": 531.73199, "b": 408.74152, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put ", "bbox": {"l": 136.8, "t": 411.52835, "r": 537.43396, "b": 420.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "your data to work. With CP4D, all your data users can collaborate from a single, unified ", "bbox": {"l": 136.8, "t": 423.52817, "r": 524.1084, "b": 432.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "interface that supports many services that work together, including collecting data, organizing ", "bbox": {"l": 136.8, "t": 435.52798, "r": 547.25861, "b": 444.74097, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the data, analyzing the data, and infusing AI.", "bbox": {"l": 136.8, "t": 447.5278, "r": 334.1156, "b": 456.7407799999999, "coord_origin": "TOPLEFT"}}]}, "text": "Data and AI playing a major role in the modernization story to enable the digital transformation journey of every organization. Many organizations recognize the business value of infusing AI into their infrastructure. CP4D provides the cloud-native solution to put your data to work. With CP4D, all your data users can collaborate from a single, unified interface that supports many services that work together, including collecting data, organizing the data, analyzing the data, and infusing AI."}, {"label": "text", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.5255584716797, "t": 468.73712158203125, "r": 547.28253, "b": 551.2116088867188, "coord_origin": "TOPLEFT"}, "confidence": 0.9885222911834717, "cells": [{"id": 28, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI ", "bbox": {"l": 136.8, "t": 469.48761, "r": 529.47882, "b": 478.70059, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as ", "bbox": {"l": 136.8, "t": 481.48743, "r": 545.62219, "b": 490.70041, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training ", "bbox": {"l": 136.80002, "t": 493.547, "r": 541.26062, "b": 502.75998, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 505.54681, "r": 541.28766, "b": 514.7598, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "(Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. ", "bbox": {"l": 136.80002, "t": 517.54663, "r": 511.26416, "b": 526.7596100000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 ", "bbox": {"l": 136.80002, "t": 529.54642, "r": 547.28253, "b": 538.7594300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "(Linux on IBM Z).", "bbox": {"l": 136.80002, "t": 541.54623, "r": 213.4173, "b": 550.75923, "coord_origin": "TOPLEFT"}}]}, "text": "Traditional ML models\u2019 power most of today\u2019s ML applications in business and among AI practitioners. CP4D supports traditional ML frameworks for training and inferencing, such as Scikit-learn, Snap ML, and XGBoost. Snap ML is a library that provides high-speed training and inferencing of ML models that leverage the AI accelerator while running on an IBM z16 (Linux on IBM Z). CP4D supports DL frameworks such as TensorFlow and PyTorch. TensorFlow is a DL framework that leverages the AI accelerator while running on an IBM z16 (Linux on IBM Z)."}, {"label": "text", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.04042053222656, "t": 562.6182861328125, "r": 547.3233, "b": 608.7926635742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9859467148780823, "cells": [{"id": 35, "text": "Figure 7 on page 11 provides an overview of the components that are supported on ", "bbox": {"l": 136.80002, "t": 563.50604, "r": 508.50827000000004, "b": 572.7190400000001, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, ", "bbox": {"l": 136.80002, "t": 575.50584, "r": 547.3233, "b": 584.71884, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "and WML for deployment of the model. Eventually, applications can use the AI inference ", "bbox": {"l": 136.80002, "t": 587.5056500000001, "r": 529.62152, "b": 596.71864, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "endpoint to score the model. ", "bbox": {"l": 136.80002, "t": 599.50545, "r": 265.69339, "b": 608.71844, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 on page 11 provides an overview of the components that are supported on CP4D on IBM Z. You can leverage Watson Studio for model building, training, and validation, and WML for deployment of the model. Eventually, applications can use the AI inference endpoint to score the model."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45117950439453, "t": 754.43408203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155402183532715, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.23697662353516, "t": 754.7630004882812, "r": 267.0744, "b": 764.1210327148438, "coord_origin": "TOPLEFT"}, "confidence": 0.9532065987586975, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.8191528320312, "t": 754.3023071289062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9041211009025574, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.15190887451172, "t": 353.40753173828125, "r": 506.3805236816406, "b": 362.9499206542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9419980049133301, "cells": [{"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.55064392089844, "t": 375.4695739746094, "r": 492.94083, "b": 385.46099853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9363874197006226, "cells": [{"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.7388458251953, "t": 392.1660461425781, "r": 413.40018, "b": 402.2774658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9464669823646545, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 151.22914123535156, "t": 409.4760437011719, "r": 526.18811, "b": 431.24091, "coord_origin": "TOPLEFT"}, "confidence": 0.9700906872749329, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.42306518554688, "t": 438.09356689453125, "r": 547.24652, "b": 460.22052, "coord_origin": "TOPLEFT"}, "confidence": 0.9732586741447449, "cells": [{"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.33360290527344, "t": 467.51483154296875, "r": 546.75769, "b": 489.2516174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9748732447624207, "cells": [{"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.7086639404297, "t": 496.2107238769531, "r": 490.03317, "b": 506.39105224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9550834894180298, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.6390838623047, "t": 513.5339965820312, "r": 547.27051, "b": 535.7632446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9789533019065857, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.31088256835938, "t": 562.8890380859375, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}, "confidence": 0.9544580578804016, "cells": [{"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.98568725585938, "t": 595.26904296875, "r": 533.90125, "b": 629.24123, "coord_origin": "TOPLEFT"}, "confidence": 0.9852948188781738, "cells": [{"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.95875549316406, "t": 641.30712890625, "r": 547.24664, "b": 687.2891845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9874392151832581, "cells": [{"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.34823608398438, "t": 699.2769165039062, "r": 547.31128, "b": 721.6598510742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9817102551460266, "cells": [{"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.857383728027344, "t": 77.41220092773438, "r": 547.4847412109375, "b": 350.3799743652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8191528320312, "t": 754.3023071289062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9041211009025574, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "caption", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.15190887451172, "t": 353.40753173828125, "r": 506.3805236816406, "b": 362.9499206542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9419980049133301, "cells": [{"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.55064392089844, "t": 375.4695739746094, "r": 492.94083, "b": 385.46099853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9363874197006226, "cells": [{"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z:"}, {"label": "list_item", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.7388458251953, "t": 392.1660461425781, "r": 413.40018, "b": 402.2774658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9464669823646545, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH World-class AI inference platform for enterprise workloads:"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.22914123535156, "t": 409.4760437011719, "r": 526.18811, "b": 431.24091, "coord_origin": "TOPLEFT"}, "confidence": 0.9700906872749329, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}]}, "text": "-Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores."}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.42306518554688, "t": 438.09356689453125, "r": 547.24652, "b": 460.22052, "coord_origin": "TOPLEFT"}, "confidence": 0.9732586741447449, "cells": [{"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}]}, "text": "-Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.33360290527344, "t": 467.51483154296875, "r": 546.75769, "b": 489.2516174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9748732447624207, "cells": [{"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}]}, "text": "-Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7086639404297, "t": 496.2107238769531, "r": 490.03317, "b": 506.39105224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9550834894180298, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security: Encrypted memory, and improved trusted execution environments."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6390838623047, "t": 513.5339965820312, "r": 547.27051, "b": 535.7632446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9789533019065857, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system."}, {"label": "section_header", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.31088256835938, "t": 562.8890380859375, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}, "confidence": 0.9544580578804016, "cells": [{"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}]}, "text": "AI use cases"}, {"label": "text", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.98568725585938, "t": 595.26904296875, "r": 533.90125, "b": 629.24123, "coord_origin": "TOPLEFT"}, "confidence": 0.9852948188781738, "cells": [{"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}]}, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale."}, {"label": "text", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.95875549316406, "t": 641.30712890625, "r": 547.24664, "b": 687.2891845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9874392151832581, "cells": [{"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "text", "id": 12, "page_no": 12, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.34823608398438, "t": 699.2769165039062, "r": 547.31128, "b": 721.6598510742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9817102551460266, "cells": [{"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}]}, "text": "For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount."}, {"label": "picture", "id": 13, "page_no": 12, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.857383728027344, "t": 77.41220092773438, "r": 547.4847412109375, "b": 350.3799743652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.15190887451172, "t": 353.40753173828125, "r": 506.3805236816406, "b": 362.9499206542969, "coord_origin": "TOPLEFT"}, "confidence": 0.9419980049133301, "cells": [{"id": 1, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE", "bbox": {"l": 64.800003, "t": 354.01801, "r": 505.42822, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 7 Developing, training, and deploying an AI model on Cloud Pak for Data on IBM Z and IBM LinuxONE"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.55064392089844, "t": 375.4695739746094, "r": 492.94083, "b": 385.46099853515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9363874197006226, "cells": [{"id": 2, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z: ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 492.94083, "b": 385.22171, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some of the reasons why you should choose AI on IBM Z:"}, {"label": "list_item", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.7388458251953, "t": 392.1660461425781, "r": 413.40018, "b": 402.2774658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9464669823646545, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 393.13791, "r": 141.78, "b": 401.91269000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "World-class AI inference platform for enterprise workloads: ", "bbox": {"l": 151.20016, "t": 392.98853, "r": 413.40018, "b": 402.20151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH World-class AI inference platform for enterprise workloads:"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 151.22914123535156, "t": 409.4760437011719, "r": 526.18811, "b": 431.24091, "coord_origin": "TOPLEFT"}, "confidence": 0.9700906872749329, "cells": [{"id": 5, "text": "-", "bbox": {"l": 152.03979, "t": 410.02811, "r": 157.60942, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Embedded accelerators: A centralized on-chip AI accelerator that is shared by all ", "bbox": {"l": 165.59933, "t": 410.02811, "r": 526.18811, "b": 419.24109, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "cores.", "bbox": {"l": 165.59933, "t": 422.02792, "r": 192.78615, "b": 431.24091, "coord_origin": "TOPLEFT"}}]}, "text": "-Embedded accelerators: A centralized on-chip AI accelerator that is shared by all cores."}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.42306518554688, "t": 438.09356689453125, "r": 547.24652, "b": 460.22052, "coord_origin": "TOPLEFT"}, "confidence": 0.9732586741447449, "cells": [{"id": 8, "text": "-", "bbox": {"l": 152.03979, "t": 439.00772, "r": 157.61043, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Industry standard AI ecosystem: Many industry open-source data science frameworks ", "bbox": {"l": 165.59935, "t": 439.00772, "r": 547.24652, "b": 448.2207, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "are available on the platform.", "bbox": {"l": 165.59933, "t": 451.00754, "r": 294.55841, "b": 460.22052, "coord_origin": "TOPLEFT"}}]}, "text": "-Industry standard AI ecosystem: Many industry open-source data science frameworks are available on the platform."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.33360290527344, "t": 467.51483154296875, "r": 546.75769, "b": 489.2516174316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9748732447624207, "cells": [{"id": 11, "text": "-", "bbox": {"l": 152.03979, "t": 467.98734, "r": 157.60843, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and ", "bbox": {"l": 165.59933, "t": 467.98734, "r": 546.75769, "b": 477.20032, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "then deploy on IBM Z.", "bbox": {"l": 165.59933, "t": 479.98715, "r": 263.37762, "b": 489.20013, "coord_origin": "TOPLEFT"}}]}, "text": "-Seamlessly integrate AI into existing enterprise workload stacks: Train anywhere, and then deploy on IBM Z."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.7086639404297, "t": 496.2107238769531, "r": 490.03317, "b": 506.39105224609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9550834894180298, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.799, "t": 497.17612, "r": 141.77899, "b": 505.9509, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Security: Encrypted memory, and improved trusted execution environments. ", "bbox": {"l": 151.19916, "t": 497.02673, "r": 490.03317, "b": 506.23972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security: Encrypted memory, and improved trusted execution environments."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.6390838623047, "t": 513.5339965820312, "r": 547.27051, "b": 535.7632446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9789533019065857, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.799, "t": 514.15591, "r": 141.77899, "b": 522.93069, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Sustainability: Reduce your energy consumption with real-time monitoring tools about the ", "bbox": {"l": 151.19916, "t": 514.00653, "r": 547.27051, "b": 523.21951, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "energy consumption of the system.", "bbox": {"l": 151.19916, "t": 526.00635, "r": 306.23645, "b": 535.21933, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Sustainability: Reduce your energy consumption with real-time monitoring tools about the energy consumption of the system."}, {"label": "section_header", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.31088256835938, "t": 562.8890380859375, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}, "confidence": 0.9544580578804016, "cells": [{"id": 19, "text": "AI use cases", "bbox": {"l": 64.800003, "t": 563.70062, "r": 161.74744, "b": 578.46362, "coord_origin": "TOPLEFT"}}]}, "text": "AI use cases"}, {"label": "text", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.98568725585938, "t": 595.26904296875, "r": 533.90125, "b": 629.24123, "coord_origin": "TOPLEFT"}, "confidence": 0.9852948188781738, "cells": [{"id": 20, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time ", "bbox": {"l": 136.8, "t": 596.02863, "r": 533.90125, "b": 605.24162, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "insights about what is happening in your data. AI on the IBM Z stack understands these ", "bbox": {"l": 136.79999, "t": 608.02843, "r": 525.72296, "b": 617.2414200000001, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "situations, and it delivers in-transaction inference in real time and at scale.", "bbox": {"l": 136.79999, "t": 620.02823, "r": 463.9240699999999, "b": 629.24123, "coord_origin": "TOPLEFT"}}]}, "text": "With billions of transactions per day in many of today\u2019s industries, it is key to get real-time insights about what is happening in your data. AI on the IBM Z stack understands these situations, and it delivers in-transaction inference in real time and at scale."}, {"label": "text", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.95875549316406, "t": 641.30712890625, "r": 547.24664, "b": 687.2891845703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9874392151832581, "cells": [{"id": 23, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions ", "bbox": {"l": 136.79999, "t": 641.98804, "r": 547.24664, "b": 651.20103, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "need real-time fraud detection to prevent fraud. Other types of possible use cases might be ", "bbox": {"l": 136.79999, "t": 653.98784, "r": 541.79242, "b": 663.20084, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and ", "bbox": {"l": 136.79999, "t": 665.98764, "r": 541.78253, "b": 675.20065, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "instant payments. ", "bbox": {"l": 136.79999, "t": 677.98745, "r": 217.88634, "b": 687.20045, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "text", "id": 12, "page_no": 12, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.34823608398438, "t": 699.2769165039062, "r": 547.31128, "b": 721.6598510742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9817102551460266, "cells": [{"id": 27, "text": "For insurance companies, a pressing use case would be claims processing. For markets and ", "bbox": {"l": 136.79999, "t": 700.007019, "r": 547.31128, "b": 709.220024, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "trading, clearing and settlement use cases are paramount. ", "bbox": {"l": 136.79999, "t": 712.006828, "r": 397.38748, "b": 721.219833, "coord_origin": "TOPLEFT"}}]}, "text": "For insurance companies, a pressing use case would be claims processing. For markets and trading, clearing and settlement use cases are paramount."}, {"label": "picture", "id": 13, "page_no": 12, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.857383728027344, "t": 77.41220092773438, "r": 547.4847412109375, "b": 350.3799743652344, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8191528320312, "t": 754.3023071289062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9041211009025574, "cells": [{"id": 0, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.53218078613281, "t": 754.509033203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160951375961304, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.2241439819336, "t": 754.7615356445312, "r": 267.0744, "b": 764.1396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9570255279541016, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.15476989746094, "t": 70.64640045166016, "r": 525.18512, "b": 104.7277603149414, "coord_origin": "TOPLEFT"}, "confidence": 0.9839752912521362, "cells": [{"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.8750762939453, "t": 116.78321838378906, "r": 547.31134, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9775494337081909, "cells": [{"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.158935546875, "t": 162.72833251953125, "r": 413.42313, "b": 172.92796325683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9381385445594788, "cells": [{"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.51185607910156, "t": 180.31353759765625, "r": 545.1839, "b": 230.8561553955078, "coord_origin": "TOPLEFT"}, "confidence": 0.700736403465271, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6671600341797, "t": 237.22537231445312, "r": 402.90234, "b": 247.7976837158203, "coord_origin": "TOPLEFT"}, "confidence": 0.927428662776947, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 150.19342041015625, "t": 254.68844604492188, "r": 547.2406, "b": 301.0074157714844, "coord_origin": "TOPLEFT"}, "confidence": 0.817919135093689, "cells": [{"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.68087768554688, "t": 307.4832763671875, "r": 371.7962, "b": 317.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9381933212280273, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.48846435546875, "t": 324.5227966308594, "r": 541.1402, "b": 346.9660339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.7946481108665466, "cells": [{"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.71913146972656, "t": 353.8939514160156, "r": 455.3772277832031, "b": 364.2116394042969, "coord_origin": "TOPLEFT"}, "confidence": 0.896625280380249, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.2084197998047, "t": 370.6900634765625, "r": 534.64014, "b": 392.9651794433594, "coord_origin": "TOPLEFT"}, "confidence": 0.7541017532348633, "cells": [{"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.66246032714844, "t": 399.35772705078125, "r": 539.65314, "b": 421.6989440917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9588227868080139, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 150.8683624267578, "t": 428.65521240234375, "r": 547.24268, "b": 451.055908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.7970486879348755, "cells": [{"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "section_header", "bbox": {"l": 64.4876708984375, "t": 478.11065673828125, "r": 547.25647, "b": 513.474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484166502952576, "cells": [{"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.6639404296875, "t": 529.3472290039062, "r": 547.17877, "b": 575.7841186523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9858030080795288, "cells": [{"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.313232421875, "t": 588.0188598632812, "r": 547.24249, "b": 610.3685913085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9748781323432922, "cells": [{"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "section_header", "bbox": {"l": 64.53734588623047, "t": 629.2350463867188, "r": 186.7186, "b": 642.421142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9630159139633179, "cells": [{"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 136.22996520996094, "t": 655.5369873046875, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}, "confidence": 0.9516966938972473, "cells": [{"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.8061065673828, "t": 672.6024780273438, "r": 293.9800720214844, "b": 682.9390869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9561625123023987, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 135.63792419433594, "t": 689.974609375, "r": 435.72745, "b": 700.486083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9557024240493774, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 135.60543823242188, "t": 706.6790161132812, "r": 466.06842041015625, "b": 717.1160888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9607930183410645, "cells": [{"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53218078613281, "t": 754.509033203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160951375961304, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2241439819336, "t": 754.7615356445312, "r": 267.0744, "b": 764.1396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9570255279541016, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.15476989746094, "t": 70.64640045166016, "r": 525.18512, "b": 104.7277603149414, "coord_origin": "TOPLEFT"}, "confidence": 0.9839752912521362, "cells": [{"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8750762939453, "t": 116.78321838378906, "r": 547.31134, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9775494337081909, "cells": [{"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.158935546875, "t": 162.72833251953125, "r": 413.42313, "b": 172.92796325683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9381385445594788, "cells": [{"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In the following sections, we describe the following use cases:"}, {"label": "list_item", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51185607910156, "t": 180.31353759765625, "r": 545.1839, "b": 230.8561553955078, "coord_origin": "TOPLEFT"}, "confidence": 0.700736403465271, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks."}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6671600341797, "t": 237.22537231445312, "r": 402.90234, "b": 247.7976837158203, "coord_origin": "TOPLEFT"}, "confidence": 0.927428662776947, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 2: Credit default risk assessment\u201d on page 22"}, {"label": "list_item", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.19342041015625, "t": 254.68844604492188, "r": 547.2406, "b": 301.0074157714844, "coord_origin": "TOPLEFT"}, "confidence": 0.817919135093689, "cells": [{"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.68087768554688, "t": 307.4832763671875, "r": 371.7962, "b": 317.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9381933212280273, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 3: Clearing and settlement\u201d on page 25"}, {"label": "list_item", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.48846435546875, "t": 324.5227966308594, "r": 541.1402, "b": 346.9660339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.7946481108665466, "cells": [{"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process."}, {"label": "list_item", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.71913146972656, "t": 353.8939514160156, "r": 455.3772277832031, "b": 364.2116394042969, "coord_origin": "TOPLEFT"}, "confidence": 0.896625280380249, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.2084197998047, "t": 370.6900634765625, "r": 534.64014, "b": 392.9651794433594, "coord_origin": "TOPLEFT"}, "confidence": 0.7541017532348633, "cells": [{"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure."}, {"label": "list_item", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.66246032714844, "t": 399.35772705078125, "r": 539.65314, "b": 421.6989440917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9588227868080139, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on page 30"}, {"label": "list_item", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.8683624267578, "t": 428.65521240234375, "r": 547.24268, "b": 451.055908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.7970486879348755, "cells": [{"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}]}, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring real-time body movements."}, {"label": "section_header", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.4876708984375, "t": 478.11065673828125, "r": 547.25647, "b": 513.474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484166502952576, "cells": [{"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 1: Responsible AI augmented with risk and regulatory compliance"}, {"label": "text", "id": 15, "page_no": 13, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.6639404296875, "t": 529.3472290039062, "r": 547.17877, "b": 575.7841186523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9858030080795288, "cells": [{"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}]}, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task."}, {"label": "text", "id": 16, "page_no": 13, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.313232421875, "t": 588.0188598632812, "r": 547.24249, "b": 610.3685913085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9748781323432922, "cells": [{"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}]}, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring."}, {"label": "section_header", "id": 17, "page_no": 13, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.53734588623047, "t": 629.2350463867188, "r": 186.7186, "b": 642.421142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9630159139633179, "cells": [{"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 18, "page_no": 13, "cluster": {"id": 18, "label": "text", "bbox": {"l": 136.22996520996094, "t": 655.5369873046875, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}, "confidence": 0.9516966938972473, "cells": [{"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the three main reasons why organizations struggle with the adoption of AI:"}, {"label": "list_item", "id": 19, "page_no": 13, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.8061065673828, "t": 672.6024780273438, "r": 293.9800720214844, "b": 682.9390869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9561625123023987, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scaling with growing regulations"}, {"label": "list_item", "id": 20, "page_no": 13, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.63792419433594, "t": 689.974609375, "r": 435.72745, "b": 700.486083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9557024240493774, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Lack of confidence in operationalized AI (making responsible AI)"}, {"label": "list_item", "id": 21, "page_no": 13, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.60543823242188, "t": 706.6790161132812, "r": 466.06842041015625, "b": 717.1160888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9607930183410645, "cells": [{"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Challenges around managing the risk throughout the entire AI workflow"}], "body": [{"label": "text", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.15476989746094, "t": 70.64640045166016, "r": 525.18512, "b": 104.7277603149414, "coord_origin": "TOPLEFT"}, "confidence": 0.9839752912521362, "cells": [{"id": 2, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 525.18512, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "cancer detection, and patient monitoring activities such as infant motion analysis, is ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 507.30304, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "important. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 183.95863, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For the health care industry, medical image processing (such as MRIs and x-rays), skin cancer detection, and patient monitoring activities such as infant motion analysis, is important."}, {"label": "text", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.8750762939453, "t": 116.78321838378906, "r": 547.31134, "b": 150.74054, "coord_origin": "TOPLEFT"}, "confidence": 0.9775494337081909, "cells": [{"id": 5, "text": "For the airline industry, processes such as air traffic management, flight management ", "bbox": {"l": 136.8, "t": 117.52788999999996, "r": 516.80676, "b": 126.74090999999987, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "systems, and flight maintenance predictions are use cases that are ideal candidates for using ", "bbox": {"l": 136.8, "t": 129.52770999999996, "r": 547.31134, "b": 138.74072, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AI on IBM Z. ", "bbox": {"l": 136.8, "t": 141.52752999999996, "r": 195.16162, "b": 150.74054, "coord_origin": "TOPLEFT"}}]}, "text": "For the airline industry, processes such as air traffic management, flight management systems, and flight maintenance predictions are use cases that are ideal candidates for using AI on IBM Z."}, {"label": "text", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.158935546875, "t": 162.72833251953125, "r": 413.42313, "b": 172.92796325683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9381385445594788, "cells": [{"id": 8, "text": "In the following sections, we describe the following use cases: ", "bbox": {"l": 136.8, "t": 163.4873, "r": 413.42313, "b": 172.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In the following sections, we describe the following use cases:"}, {"label": "list_item", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51185607910156, "t": 180.31353759765625, "r": 545.1839, "b": 230.8561553955078, "coord_origin": "TOPLEFT"}, "confidence": 0.700736403465271, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 180.67627000000005, "r": 141.78, "b": 189.45105, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "\u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12", "bbox": {"l": 151.20016, "t": 180.52686000000006, "r": 545.1839, "b": 189.73987, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to ", "bbox": {"l": 151.20016, "t": 197.50665000000004, "r": 538.44098, "b": 206.71966999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to ", "bbox": {"l": 151.20016, "t": 209.50647000000004, "r": 526.64929, "b": 218.71947999999998, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "protect new end-to-end risks. ", "bbox": {"l": 151.20016, "t": 221.50629000000004, "r": 282.7309, "b": 230.71929999999998, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 1: Responsible AI augmented with risk and regulatory compliance\u201d on page 12 AI model lifecycle governance, risk management, and regulatory compliance are key to the success of the enterprises. It is imperative to adopt a typical AI model lifecycle to protect new end-to-end risks."}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6671600341797, "t": 237.22537231445312, "r": 402.90234, "b": 247.7976837158203, "coord_origin": "TOPLEFT"}, "confidence": 0.927428662776947, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.8, "t": 238.63549999999998, "r": 141.78, "b": 247.41027999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "\u201cUse case 2: Credit default risk assessment\u201d on page 22 ", "bbox": {"l": 151.20016, "t": 238.48608000000002, "r": 402.90234, "b": 247.69910000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 2: Credit default risk assessment\u201d on page 22"}, {"label": "list_item", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 150.19342041015625, "t": 254.68844604492188, "r": 547.2406, "b": 301.0074157714844, "coord_origin": "TOPLEFT"}, "confidence": 0.817919135093689, "cells": [{"id": 16, "text": "Core banking solutions running on IBM Z that are involved in processing inbound ", "bbox": {"l": 151.20016, "t": 255.52562999999998, "r": 511.25512999999995, "b": 264.73865, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "transactions need real-time fraud detection to prevent fraud. Other types of possible use ", "bbox": {"l": 151.20016, "t": 267.52545, "r": 542.90094, "b": 276.73846000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection ", "bbox": {"l": 151.20016, "t": 279.52527, "r": 547.2406, "b": 288.73828, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "in payments, and instant payments.", "bbox": {"l": 151.20016, "t": 291.52512, "r": 308.37991, "b": 300.7381, "coord_origin": "TOPLEFT"}}]}, "text": "Core banking solutions running on IBM Z that are involved in processing inbound transactions need real-time fraud detection to prevent fraud. Other types of possible use cases might be credit risk analysis, anti-money laundering, loan approval, fraud detection in payments, and instant payments."}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.68087768554688, "t": 307.4832763671875, "r": 371.7962, "b": 317.9508361816406, "coord_origin": "TOPLEFT"}, "confidence": 0.9381933212280273, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 308.6543, "r": 141.78, "b": 317.42908, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "\u201cUse case 3: Clearing and settlement\u201d on page 25", "bbox": {"l": 151.20016, "t": 308.50491, "r": 371.7962, "b": 317.7179, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 3: Clearing and settlement\u201d on page 25"}, {"label": "list_item", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.48846435546875, "t": 324.5227966308594, "r": 541.1402, "b": 346.9660339355469, "coord_origin": "TOPLEFT"}, "confidence": 0.7946481108665466, "cells": [{"id": 22, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, ", "bbox": {"l": 151.20016, "t": 325.48471, "r": 541.1402, "b": 334.69768999999997, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "and propose solutions for a more efficient settlement process.", "bbox": {"l": 151.20018, "t": 337.48453, "r": 424.07242, "b": 346.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "The use of AI can help to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process."}, {"label": "list_item", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.71913146972656, "t": 353.8939514160156, "r": 455.3772277832031, "b": 364.2116394042969, "coord_origin": "TOPLEFT"}, "confidence": 0.896625280380249, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 354.67349, "r": 141.78001, "b": 363.44827, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27", "bbox": {"l": 151.20018, "t": 354.52411, "r": 455.18243, "b": 363.73709, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 4: Remaining Useful Life of an aircraft engine\u201d on page 27"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.2084197998047, "t": 370.6900634765625, "r": 534.64014, "b": 392.9651794433594, "coord_origin": "TOPLEFT"}, "confidence": 0.7541017532348633, "cells": [{"id": 26, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the ", "bbox": {"l": 151.20018, "t": 371.50391, "r": 534.64014, "b": 380.71689, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "remaining time or cycles that an aircraft engine is likely to operate before failure.", "bbox": {"l": 151.20018, "t": 383.50371999999993, "r": 505.18069, "b": 392.7167099999999, "coord_origin": "TOPLEFT"}}]}, "text": "We describe how AI can help to avoid unplanned aircraft downtime by determining the remaining time or cycles that an aircraft engine is likely to operate before failure."}, {"label": "list_item", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.66246032714844, "t": 399.35772705078125, "r": 539.65314, "b": 421.6989440917969, "coord_origin": "TOPLEFT"}, "confidence": 0.9588227868080139, "cells": [{"id": 28, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 400.63290000000006, "r": 141.78001, "b": 409.40767999999997, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "\u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on ", "bbox": {"l": 151.20018, "t": 400.48352, "r": 539.65314, "b": 409.6965, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "page 30", "bbox": {"l": 151.20018, "t": 412.48333999999994, "r": 187.31914, "b": 421.69632, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH \u201cUse case 5: AI-powered video analytics on an infant\u2019s motions for health prediction\u201d on page 30"}, {"label": "list_item", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 150.8683624267578, "t": 428.65521240234375, "r": 547.24268, "b": 451.055908203125, "coord_origin": "TOPLEFT"}, "confidence": 0.7970486879348755, "cells": [{"id": 31, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring ", "bbox": {"l": 151.20018, "t": 429.52292, "r": 547.24268, "b": 438.7359, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "real-time body movements.", "bbox": {"l": 151.20018, "t": 441.52274, "r": 271.72714, "b": 450.73572, "coord_origin": "TOPLEFT"}}]}, "text": "In this section, we describe how AI can predict an infant\u2019s health conditions by monitoring real-time body movements."}, {"label": "section_header", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "section_header", "bbox": {"l": 64.4876708984375, "t": 478.11065673828125, "r": 547.25647, "b": 513.474365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9484166502952576, "cells": [{"id": 33, "text": "Use case 1: Responsible AI augmented with risk and regulatory ", "bbox": {"l": 64.800003, "t": 479.2207, "r": 547.25647, "b": 493.9837, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "compliance", "bbox": {"l": 64.800003, "t": 498.24023, "r": 152.77151, "b": 513.00323, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 1: Responsible AI augmented with risk and regulatory compliance"}, {"label": "text", "id": 15, "page_no": 13, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.6639404296875, "t": 529.3472290039062, "r": 547.17877, "b": 575.7841186523438, "coord_origin": "TOPLEFT"}, "confidence": 0.9858030080795288, "cells": [{"id": 35, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new ", "bbox": {"l": 136.8, "t": 530.50861, "r": 542.87628, "b": 539.72162, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies ", "bbox": {"l": 136.8, "t": 542.50842, "r": 547.17877, "b": 551.72142, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "while establishing organization trust in the models, underlying data, and the process to be ", "bbox": {"l": 136.79999, "t": 554.5082199999999, "r": 535.17603, "b": 563.72122, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "followed. An AI model lifecycle can be a daunting task.", "bbox": {"l": 136.79999, "t": 566.50803, "r": 377.95047, "b": 575.72102, "coord_origin": "TOPLEFT"}}]}, "text": "Advancement in AI is changing the world, and organizations must adopt AI to embrace new challenges daily. Many enterprises see tremendous value in adopting AI and ML technologies while establishing organization trust in the models, underlying data, and the process to be followed. An AI model lifecycle can be a daunting task."}, {"label": "text", "id": 16, "page_no": 13, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.313232421875, "t": 588.0188598632812, "r": 547.24249, "b": 610.3685913085938, "coord_origin": "TOPLEFT"}, "confidence": 0.9748781323432922, "cells": [{"id": 39, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the ", "bbox": {"l": 136.79999, "t": 588.52759, "r": 547.24249, "b": 597.74059, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "trustworthiness of AI and its importance in daily monitoring. ", "bbox": {"l": 136.79999, "t": 600.52739, "r": 400.68033, "b": 609.7403899999999, "coord_origin": "TOPLEFT"}}]}, "text": "How mature is your AI governance? In this section, we provide a use case demonstrating the trustworthiness of AI and its importance in daily monitoring."}, {"label": "section_header", "id": 17, "page_no": 13, "cluster": {"id": 17, "label": "section_header", "bbox": {"l": 64.53734588623047, "t": 629.2350463867188, "r": 186.7186, "b": 642.421142578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9630159139633179, "cells": [{"id": 41, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 630.35472, "r": 186.7186, "b": 642.34273, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 18, "page_no": 13, "cluster": {"id": 18, "label": "text", "bbox": {"l": 136.22996520996094, "t": 655.5369873046875, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}, "confidence": 0.9516966938972473, "cells": [{"id": 42, "text": "Here are the three main reasons why organizations struggle with the adoption of AI: ", "bbox": {"l": 136.8, "t": 656.5086200000001, "r": 508.98724000000004, "b": 665.72162, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the three main reasons why organizations struggle with the adoption of AI:"}, {"label": "list_item", "id": 19, "page_no": 13, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.8061065673828, "t": 672.6024780273438, "r": 293.9800720214844, "b": 682.9390869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9561625123023987, "cells": [{"id": 43, "text": "GLYPH", "bbox": {"l": 136.8, "t": 673.69759, "r": 141.78, "b": 682.47234, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Scaling with growing regulations", "bbox": {"l": 151.20016, "t": 673.54818, "r": 293.96283, "b": 682.76118, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Scaling with growing regulations"}, {"label": "list_item", "id": 20, "page_no": 13, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 135.63792419433594, "t": 689.974609375, "r": 435.72745, "b": 700.486083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9557024240493774, "cells": [{"id": 45, "text": "GLYPH", "bbox": {"l": 136.8, "t": 690.6774, "r": 141.78, "b": 699.4521560000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Lack of confidence in operationalized AI (making responsible AI)", "bbox": {"l": 151.20016, "t": 690.52799, "r": 435.72745, "b": 699.740997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Lack of confidence in operationalized AI (making responsible AI)"}, {"label": "list_item", "id": 21, "page_no": 13, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 135.60543823242188, "t": 706.6790161132812, "r": 466.06842041015625, "b": 717.1160888671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9607930183410645, "cells": [{"id": 47, "text": "GLYPH", "bbox": {"l": 136.8, "t": 707.657211, "r": 141.78, "b": 716.431969, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Challenges around managing the risk throughout the entire AI workflow", "bbox": {"l": 151.20016, "t": 707.507805, "r": 465.6782799999999, "b": 716.72081, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Challenges around managing the risk throughout the entire AI workflow"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.53218078613281, "t": 754.509033203125, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160951375961304, "cells": [{"id": 0, "text": "12 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "12"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.2241439819336, "t": 754.7615356445312, "r": 267.0744, "b": 764.1396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9570255279541016, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.9011840820312, "t": 754.3621215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.915951669216156, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 136.29180908203125, "t": 70.39407348632812, "r": 324.71161, "b": 82.81320190429688, "coord_origin": "TOPLEFT"}, "confidence": 0.9631897211074829, "cells": [{"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92501831054688, "t": 85.20021057128906, "r": 536.31555, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.988149106502533, "cells": [{"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.52218627929688, "t": 171.78952026367188, "r": 223.41616821289062, "b": 183.66505432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9572980999946594, "cells": [{"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.9759521484375, "t": 186.67660522460938, "r": 547.32831, "b": 233.0913543701172, "coord_origin": "TOPLEFT"}, "confidence": 0.9755564332008362, "cells": [{"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 136.5354461669922, "t": 248.45245361328125, "r": 364.06561, "b": 260.55926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9580543637275696, "cells": [{"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.28106689453125, "t": 263.99212646484375, "r": 389.47919, "b": 274.5697326660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9462679028511047, "cells": [{"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.77525329589844, "t": 280.7226257324219, "r": 382.91455, "b": 290.9065246582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9557760953903198, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.74273681640625, "t": 297.4331359863281, "r": 450.99023, "b": 308.05767822265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9605316519737244, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.5438995361328, "t": 314.5897521972656, "r": 366.21268, "b": 324.8603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9523881077766418, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.47459411621094, "t": 331.47955322265625, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9583740830421448, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.48123168945312, "t": 348.7354736328125, "r": 386.45636, "b": 358.875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537600874900818, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 135.62051391601562, "t": 366.0385437011719, "r": 331.24911, "b": 376.2076721191406, "coord_origin": "TOPLEFT"}, "confidence": 0.9608153700828552, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.05039978027344, "t": 387.55609130859375, "r": 547.18677, "b": 421.69937, "coord_origin": "TOPLEFT"}, "confidence": 0.9833502769470215, "cells": [{"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.85047912597656, "t": 433.4964294433594, "r": 547.24658, "b": 491.7182, "coord_origin": "TOPLEFT"}, "confidence": 0.9875410199165344, "cells": [{"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.9011840820312, "t": 754.3621215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.915951669216156, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}, {"label": "section_header", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.29180908203125, "t": 70.39407348632812, "r": 324.71161, "b": 82.81320190429688, "coord_origin": "TOPLEFT"}, "confidence": 0.9631897211074829, "cells": [{"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Scaling with growing regulations"}, {"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92501831054688, "t": 85.20021057128906, "r": 536.31555, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.988149106502533, "cells": [{"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination."}, {"label": "section_header", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.52218627929688, "t": 171.78952026367188, "r": 223.41616821289062, "b": 183.66505432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9572980999946594, "cells": [{"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9759521484375, "t": 186.67660522460938, "r": 547.32831, "b": 233.0913543701172, "coord_origin": "TOPLEFT"}, "confidence": 0.9755564332008362, "cells": [{"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable."}, {"label": "section_header", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.5354461669922, "t": 248.45245361328125, "r": 364.06561, "b": 260.55926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9580543637275696, "cells": [{"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}]}, "text": "Risks throughout the entire AI workflow"}, {"label": "text", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28106689453125, "t": 263.99212646484375, "r": 389.47919, "b": 274.5697326660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9462679028511047, "cells": [{"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Organizations need to mitigate risk of the following items:"}, {"label": "list_item", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.77525329589844, "t": 280.7226257324219, "r": 382.91455, "b": 290.9065246582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9557760953903198, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Deciding not to use certain technologies or practices"}, {"label": "list_item", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74273681640625, "t": 297.4331359863281, "r": 450.99023, "b": 308.05767822265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9605316519737244, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using personal information when needed and with a user\u2019s consent"}, {"label": "list_item", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5438995361328, "t": 314.5897521972656, "r": 366.21268, "b": 324.8603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9523881077766418, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ensuring automated decisions are free from bias"}, {"label": "list_item", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.47459411621094, "t": 331.47955322265625, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9583740830421448, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Customer confidence by providing explanations for business decisions"}, {"label": "list_item", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.48123168945312, "t": 348.7354736328125, "r": 386.45636, "b": 358.875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537600874900818, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Fraud to the organization and to customer\u2019s accounts"}, {"label": "list_item", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.62051391601562, "t": 366.0385437011719, "r": 331.24911, "b": 376.2076721191406, "coord_origin": "TOPLEFT"}, "confidence": 0.9608153700828552, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Delays in putting models into production"}, {"label": "text", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05039978027344, "t": 387.55609130859375, "r": 547.18677, "b": 421.69937, "coord_origin": "TOPLEFT"}, "confidence": 0.9833502769470215, "cells": [{"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}]}, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important."}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.85047912597656, "t": 433.4964294433594, "r": 547.24658, "b": 491.7182, "coord_origin": "TOPLEFT"}, "confidence": 0.9875410199165344, "cells": [{"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}]}, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively."}], "body": [{"label": "section_header", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.29180908203125, "t": 70.39407348632812, "r": 324.71161, "b": 82.81320190429688, "coord_origin": "TOPLEFT"}, "confidence": 0.9631897211074829, "cells": [{"id": 1, "text": "Scaling with growing regulations", "bbox": {"l": 136.8, "t": 71.36395000000005, "r": 324.71161, "b": 82.46398999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Scaling with growing regulations"}, {"label": "text", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92501831054688, "t": 85.20021057128906, "r": 536.31555, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.988149106502533, "cells": [{"id": 2, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 528.54681, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "proposing strict AI policies. Countries are monitoring adherence of these policies by the ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 525.13123, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enterprises and imposing fines for any violations. Responding to these regulations are ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 519.0838, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "challenging global organizations where multiple regulations apply. For enterprises, it is ", "bbox": {"l": 136.8, "t": 122.50811999999996, "r": 520.57288, "b": 131.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "important to adopt AI policies when there is change, and to validate explainable models to ", "bbox": {"l": 136.8, "t": 134.50793, "r": 536.31555, "b": 143.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "protect against discrimination.", "bbox": {"l": 136.8, "t": 146.50775, "r": 269.03491, "b": 155.72076000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Laws and regulations in the data and AI space are accelerating, and many countries are proposing strict AI policies. Countries are monitoring adherence of these policies by the enterprises and imposing fines for any violations. Responding to these regulations are challenging global organizations where multiple regulations apply. For enterprises, it is important to adopt AI policies when there is change, and to validate explainable models to protect against discrimination."}, {"label": "section_header", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.52218627929688, "t": 171.78952026367188, "r": 223.41616821289062, "b": 183.66505432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9572980999946594, "cells": [{"id": 8, "text": "Responsible AI", "bbox": {"l": 136.8, "t": 172.40399000000002, "r": 223.38721, "b": 183.50402999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI"}, {"label": "text", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9759521484375, "t": 186.67660522460938, "r": 547.32831, "b": 233.0913543701172, "coord_origin": "TOPLEFT"}, "confidence": 0.9755564332008362, "cells": [{"id": 9, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. ", "bbox": {"l": 136.8, "t": 187.48870999999997, "r": 547.32831, "b": 196.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "A data scientist cannot maximize accuracy and model performance above all other concerns. ", "bbox": {"l": 136.8, "t": 199.48852999999997, "r": 547.25458, "b": 208.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Practicing responsible AI is a best practice, and you must establish protection and validation ", "bbox": {"l": 136.79999, "t": 211.48834, "r": 546.10297, "b": 220.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "to ensure that any models that are placed into production are fair and explainable.", "bbox": {"l": 136.79999, "t": 223.48816, "r": 498.54129, "b": 232.70117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Responsible AI protects against loss of data privacy, and reduced customer loyalty and trust. A data scientist cannot maximize accuracy and model performance above all other concerns. Practicing responsible AI is a best practice, and you must establish protection and validation to ensure that any models that are placed into production are fair and explainable."}, {"label": "section_header", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 136.5354461669922, "t": 248.45245361328125, "r": 364.06561, "b": 260.55926513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9580543637275696, "cells": [{"id": 13, "text": "Risks throughout the entire AI workflow", "bbox": {"l": 136.8, "t": 249.38396999999998, "r": 364.06561, "b": 260.48401, "coord_origin": "TOPLEFT"}}]}, "text": "Risks throughout the entire AI workflow"}, {"label": "text", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28106689453125, "t": 263.99212646484375, "r": 389.47919, "b": 274.5697326660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9462679028511047, "cells": [{"id": 14, "text": "Organizations need to mitigate risk of the following items:", "bbox": {"l": 136.8, "t": 264.52855999999997, "r": 389.47919, "b": 273.74158, "coord_origin": "TOPLEFT"}}]}, "text": "Organizations need to mitigate risk of the following items:"}, {"label": "list_item", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.77525329589844, "t": 280.7226257324219, "r": 382.91455, "b": 290.9065246582031, "coord_origin": "TOPLEFT"}, "confidence": 0.9557760953903198, "cells": [{"id": 15, "text": "GLYPH", "bbox": {"l": 136.8, "t": 281.65777999999995, "r": 141.78, "b": 290.43256, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Deciding not to use certain technologies or practices", "bbox": {"l": 151.20016, "t": 281.50839, "r": 382.91455, "b": 290.72137, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Deciding not to use certain technologies or practices"}, {"label": "list_item", "id": 8, "page_no": 14, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.74273681640625, "t": 297.4331359863281, "r": 450.99023, "b": 308.05767822265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9605316519737244, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.8, "t": 298.63757, "r": 141.78, "b": 307.41235, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Using personal information when needed and with a user\u2019s consent ", "bbox": {"l": 151.20016, "t": 298.48819, "r": 450.99023, "b": 307.70117, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using personal information when needed and with a user\u2019s consent"}, {"label": "list_item", "id": 9, "page_no": 14, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.5438995361328, "t": 314.5897521972656, "r": 366.21268, "b": 324.8603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9523881077766418, "cells": [{"id": 19, "text": "GLYPH", "bbox": {"l": 136.8, "t": 315.67715, "r": 141.78, "b": 324.45193000000006, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Ensuring automated decisions are free from bias", "bbox": {"l": 151.20016, "t": 315.5277699999999, "r": 366.21268, "b": 324.74075, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Ensuring automated decisions are free from bias"}, {"label": "list_item", "id": 10, "page_no": 14, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.47459411621094, "t": 331.47955322265625, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}, "confidence": 0.9583740830421448, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.8, "t": 332.65695000000005, "r": 141.78, "b": 341.43172999999996, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Customer confidence by providing explanations for business decisions", "bbox": {"l": 151.20016, "t": 332.50757, "r": 462.31461, "b": 341.72055, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Customer confidence by providing explanations for business decisions"}, {"label": "list_item", "id": 11, "page_no": 14, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.48123168945312, "t": 348.7354736328125, "r": 386.45636, "b": 358.875, "coord_origin": "TOPLEFT"}, "confidence": 0.9537600874900818, "cells": [{"id": 23, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 349.63674999999995, "r": 141.77998, "b": 358.41153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Fraud to the organization and to customer\u2019s accounts", "bbox": {"l": 151.20015, "t": 349.48737, "r": 386.45636, "b": 358.70035000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Fraud to the organization and to customer\u2019s accounts"}, {"label": "list_item", "id": 12, "page_no": 14, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 135.62051391601562, "t": 366.0385437011719, "r": 331.24911, "b": 376.2076721191406, "coord_origin": "TOPLEFT"}, "confidence": 0.9608153700828552, "cells": [{"id": 25, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 366.67633, "r": 141.77998, "b": 375.45111, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Delays in putting models into production ", "bbox": {"l": 151.20015, "t": 366.52695, "r": 331.24911, "b": 375.73993, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Delays in putting models into production"}, {"label": "text", "id": 13, "page_no": 14, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.05039978027344, "t": 387.55609130859375, "r": 547.18677, "b": 421.69937, "coord_origin": "TOPLEFT"}, "confidence": 0.9833502769470215, "cells": [{"id": 27, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what ", "bbox": {"l": 136.79999, "t": 388.48676, "r": 547.18677, "b": 397.6997400000001, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "aspects of trust are most important to them. Although explaining how AI decides is the ", "bbox": {"l": 136.79999, "t": 400.48657, "r": 519.48199, "b": 409.69955, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "primary concern, all of these concerns are important. ", "bbox": {"l": 136.79999, "t": 412.48639, "r": 372.96661, "b": 421.69937, "coord_origin": "TOPLEFT"}}]}, "text": "In fact, in a recent survey, these concerns were echoed by real AI adopters when asked what aspects of trust are most important to them. Although explaining how AI decides is the primary concern, all of these concerns are important."}, {"label": "text", "id": 14, "page_no": 14, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.85047912597656, "t": 433.4964294433594, "r": 547.24658, "b": 491.7182, "coord_origin": "TOPLEFT"}, "confidence": 0.9875410199165344, "cells": [{"id": 30, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the ", "bbox": {"l": 136.79999, "t": 434.5059499999999, "r": 516.63068, "b": 443.71893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing ", "bbox": {"l": 136.79999, "t": 446.50577000000004, "r": 543.4837, "b": 455.71875, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "into production. Without a formalized process, there is no way to mitigate these risks to unlock ", "bbox": {"l": 136.79999, "t": 458.50558, "r": 547.24658, "b": 467.71857, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "the scale that is required to make automated decisions profitable. With these decisions, the ", "bbox": {"l": 136.79999, "t": 470.5054, "r": 541.69409, "b": 479.71838, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "business can operate proactively instead of reactively. ", "bbox": {"l": 136.79999, "t": 482.50522, "r": 378.89471, "b": 491.7182, "coord_origin": "TOPLEFT"}}]}, "text": "The key point here is that risk exists throughout the entire AI lifecycle starting with the underlying data and the business justification behind the \u201cwhy\u201d of the project and continuing into production. Without a formalized process, there is no way to mitigate these risks to unlock the scale that is required to make automated decisions profitable. With these decisions, the business can operate proactively instead of reactively."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.9011840820312, "t": 754.3621215820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.915951669216156, "cells": [{"id": 0, "text": "13", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "13"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.407470703125, "t": 754.3117065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9113772511482239, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.1883316040039, "t": 754.7257080078125, "r": 267.0744, "b": 764.1552124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9578691720962524, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.13604736328125, "t": 70.62796020507812, "r": 547.30731, "b": 117.06792449951172, "coord_origin": "TOPLEFT"}, "confidence": 0.9846124053001404, "cells": [{"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17765808105469, "t": 332.0653381347656, "r": 206.827880859375, "b": 341.4869689941406, "coord_origin": "TOPLEFT"}, "confidence": 0.952994704246521, "cells": [{"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.79885864257812, "t": 354.1422119140625, "r": 540.12024, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9863293766975403, "cells": [{"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.70143127441406, "t": 443.571044921875, "r": 279.45147705078125, "b": 456.88272, "coord_origin": "TOPLEFT"}, "confidence": 0.9659296274185181, "cells": [{"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.8342742919922, "t": 469.94647216796875, "r": 540.66016, "b": 492.26154, "coord_origin": "TOPLEFT"}, "confidence": 0.9788194298744202, "cells": [{"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.8035888671875, "t": 503.9425354003906, "r": 547.3551, "b": 610.21979, "coord_origin": "TOPLEFT"}, "confidence": 0.9855291247367859, "cells": [{"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.9875030517578, "t": 621.9910888671875, "r": 543.35425, "b": 668.23876, "coord_origin": "TOPLEFT"}, "confidence": 0.9869634509086609, "cells": [{"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 63.77848434448242, "t": 131.25733947753906, "r": 546.8060302734375, "b": 329.46014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9830358028411865, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.407470703125, "t": 754.3117065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9113772511482239, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1883316040039, "t": 754.7257080078125, "r": 267.0744, "b": 764.1552124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9578691720962524, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.13604736328125, "t": 70.62796020507812, "r": 547.30731, "b": 117.06792449951172, "coord_origin": "TOPLEFT"}, "confidence": 0.9846124053001404, "cells": [{"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise."}, {"label": "caption", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17765808105469, "t": 332.0653381347656, "r": 206.827880859375, "b": 341.4869689941406, "coord_origin": "TOPLEFT"}, "confidence": 0.952994704246521, "cells": [{"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 8 Typical AI model lifecycle"}, {"label": "text", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.79885864257812, "t": 354.1422119140625, "r": 540.12024, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9863293766975403, "cells": [{"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows."}, {"label": "section_header", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.70143127441406, "t": 443.571044921875, "r": 279.45147705078125, "b": 456.88272, "coord_origin": "TOPLEFT"}, "confidence": 0.9659296274185181, "cells": [{"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}]}, "text": "IBM governance solution for IBM Z"}, {"label": "text", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8342742919922, "t": 469.94647216796875, "r": 540.66016, "b": 492.26154, "coord_origin": "TOPLEFT"}, "confidence": 0.9788194298744202, "cells": [{"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}]}, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises."}, {"label": "text", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8035888671875, "t": 503.9425354003906, "r": 547.3551, "b": 610.21979, "coord_origin": "TOPLEFT"}, "confidence": 0.9855291247367859, "cells": [{"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}]}, "text": "AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, and the possible risks."}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9875030517578, "t": 621.9910888671875, "r": 543.35425, "b": 668.23876, "coord_origin": "TOPLEFT"}, "confidence": 0.9869634509086609, "cells": [{"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}]}, "text": "In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance."}, {"label": "picture", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.77848434448242, "t": 131.25733947753906, "r": 546.8060302734375, "b": 329.46014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9830358028411865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.13604736328125, "t": 70.62796020507812, "r": 547.30731, "b": 117.06792449951172, "coord_origin": "TOPLEFT"}, "confidence": 0.9846124053001404, "cells": [{"id": 2, "text": "For example, a business can start testing a model before production for fairness metrics. For ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 547.12024, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 547.30731, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 547.28247, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "lifecycle in an enterprise. ", "bbox": {"l": 136.8, "t": 107.50811999999996, "r": 249.57208, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, a business can start testing a model before production for fairness metrics. For this task, enterprises need an end-to-end workflow with approvals to mitigate these risks and increase the scale of AI investments, as shown in Figure 8, which presents a typical AI model lifecycle in an enterprise."}, {"label": "caption", "id": 3, "page_no": 15, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17765808105469, "t": 332.0653381347656, "r": 206.827880859375, "b": 341.4869689941406, "coord_origin": "TOPLEFT"}, "confidence": 0.952994704246521, "cells": [{"id": 6, "text": "Figure 8 Typical AI model lifecycle", "bbox": {"l": 64.800003, "t": 333.0779999999999, "r": 206.07208, "b": 341.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 8 Typical AI model lifecycle"}, {"label": "text", "id": 4, "page_no": 15, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.79885864257812, "t": 354.1422119140625, "r": 540.12024, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9863293766975403, "cells": [{"id": 7, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their ", "bbox": {"l": 136.8, "t": 355.00872999999996, "r": 531.15924, "b": 364.22171, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "brand from new end-to-end risks. To ensure various aspects of both regulatory compliance ", "bbox": {"l": 136.80002, "t": 367.00854, "r": 540.12024, "b": 376.22153, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and security, the personas that must be involved include the chief financial officer (CFO), ", "bbox": {"l": 136.80002, "t": 379.00836, "r": 531.84265, "b": 388.22134, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer ", "bbox": {"l": 136.80002, "t": 391.0081799999999, "r": 523.93213, "b": 400.22116, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "(CRO), along with the data engineers, data scientists, and business analysts, who build AI ", "bbox": {"l": 136.80002, "t": 403.00800000000004, "r": 537.40796, "b": 412.22098, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "workflows. ", "bbox": {"l": 136.80002, "t": 415.00781, "r": 186.17273, "b": 424.2207900000001, "coord_origin": "TOPLEFT"}}]}, "text": "Due to regulations, more stakeholders adopt the typical AI model lifecycle to protect their brand from new end-to-end risks. To ensure various aspects of both regulatory compliance and security, the personas that must be involved include the chief financial officer (CFO), chief marketing officer (CMO), chief data officer (CDO), HR, and chief regulatory officer (CRO), along with the data engineers, data scientists, and business analysts, who build AI workflows."}, {"label": "section_header", "id": 5, "page_no": 15, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.70143127441406, "t": 443.571044921875, "r": 279.45147705078125, "b": 456.88272, "coord_origin": "TOPLEFT"}, "confidence": 0.9659296274185181, "cells": [{"id": 13, "text": "IBM governance solution for IBM Z", "bbox": {"l": 64.800003, "t": 444.89474, "r": 279.09619, "b": 456.88272, "coord_origin": "TOPLEFT"}}]}, "text": "IBM governance solution for IBM Z"}, {"label": "text", "id": 6, "page_no": 15, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.8342742919922, "t": 469.94647216796875, "r": 540.66016, "b": 492.26154, "coord_origin": "TOPLEFT"}, "confidence": 0.9788194298744202, "cells": [{"id": 14, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the ", "bbox": {"l": 136.8, "t": 471.04874, "r": 540.66016, "b": 480.26172, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "success of enterprises.", "bbox": {"l": 136.8, "t": 483.04855, "r": 238.91193000000004, "b": 492.26154, "coord_origin": "TOPLEFT"}}]}, "text": "AI model lifecycle governance, risk management, and regulatory compliance are key to the success of enterprises."}, {"label": "text", "id": 7, "page_no": 15, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.8035888671875, "t": 503.9425354003906, "r": 547.3551, "b": 610.21979, "coord_origin": "TOPLEFT"}, "confidence": 0.9855291247367859, "cells": [{"id": 16, "text": "AI governance is a comprehensive framework that uses a set of automated processes, ", "bbox": {"l": 136.8, "t": 505.00836, "r": 522.28375, "b": 514.22134, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles ", "bbox": {"l": 136.8, "t": 517.00818, "r": 518.83173, "b": 526.22116, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "guiding the design, development, deployment, and monitoring of models are critical in driving ", "bbox": {"l": 136.8, "t": 529.00797, "r": 547.24677, "b": 538.22098, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "responsible and trustworthy AI. AI governance includes processes that trace and record the ", "bbox": {"l": 136.8, "t": 541.00778, "r": 543.55243, "b": 550.22078, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "origin of data, models (including associated metadata), and pipelines for audits. The details of ", "bbox": {"l": 136.8, "t": 553.00758, "r": 547.3551, "b": 562.22058, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "entry should include the techniques that trained each model, the hyperparameters that were ", "bbox": {"l": 136.8, "t": 565.00739, "r": 545.16895, "b": 574.22038, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "used, and the metrics from testing phases. These details provide increased transparency into ", "bbox": {"l": 136.8, "t": 577.00719, "r": 547.3075, "b": 586.22018, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, ", "bbox": {"l": 136.8, "t": 589.00699, "r": 547.27661, "b": 598.21999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "and the possible risks.", "bbox": {"l": 136.8, "t": 601.00679, "r": 235.71976, "b": 610.21979, "coord_origin": "TOPLEFT"}}]}, "text": "AI governance is a comprehensive framework that uses a set of automated processes, methodologies, and tools to manage an organization\u2019s use of AI. Consistent principles guiding the design, development, deployment, and monitoring of models are critical in driving responsible and trustworthy AI. AI governance includes processes that trace and record the origin of data, models (including associated metadata), and pipelines for audits. The details of entry should include the techniques that trained each model, the hyperparameters that were used, and the metrics from testing phases. These details provide increased transparency into the model\u2019s behavior throughout the lifecycle, the data that was influential in its development, and the possible risks."}, {"label": "text", "id": 8, "page_no": 15, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.9875030517578, "t": 621.9910888671875, "r": 543.35425, "b": 668.23876, "coord_origin": "TOPLEFT"}, "confidence": 0.9869634509086609, "cells": [{"id": 25, "text": "In a world where trust, transparency and explainable AI matters, every organization wants ", "bbox": {"l": 136.8, "t": 623.02635, "r": 535.70215, "b": 632.2393500000001, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance along with the comfort of understanding how analytic insights and decisions are ", "bbox": {"l": 136.8, "t": 635.02615, "r": 543.35425, "b": 644.23915, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "made. The following sections describe some of the principles and organizational ", "bbox": {"l": 136.8, "t": 647.0259599999999, "r": 493.54346000000004, "b": 656.2389499999999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "requirements for AI governance. ", "bbox": {"l": 136.8, "t": 659.02576, "r": 282.2887, "b": 668.23876, "coord_origin": "TOPLEFT"}}]}, "text": "In a world where trust, transparency and explainable AI matters, every organization wants compliance along with the comfort of understanding how analytic insights and decisions are made. The following sections describe some of the principles and organizational requirements for AI governance."}, {"label": "picture", "id": 9, "page_no": 15, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 63.77848434448242, "t": 131.25733947753906, "r": 546.8060302734375, "b": 329.46014404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9830358028411865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.407470703125, "t": 754.3117065429688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9113772511482239, "cells": [{"id": 0, "text": "14 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "14"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.1883316040039, "t": 754.7257080078125, "r": 267.0744, "b": 764.1552124023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9578691720962524, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.963623046875, "t": 754.3152465820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105063676834106, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 136.3389434814453, "t": 70.3511962890625, "r": 249.09483337402344, "b": 81.77921295166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9597545266151428, "cells": [{"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.980224609375, "t": 85.47271728515625, "r": 544.04358, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9820835590362549, "cells": [{"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.69290161132812, "t": 126.65188598632812, "r": 517.36163, "b": 137.11279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9599407315254211, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.61203002929688, "t": 144.06478881835938, "r": 428.48267, "b": 154.2803192138672, "coord_origin": "TOPLEFT"}, "confidence": 0.9574074745178223, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6266632080078, "t": 160.60958862304688, "r": 352.83337, "b": 170.9593963623047, "coord_origin": "TOPLEFT"}, "confidence": 0.9567543864250183, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.69007873535156, "t": 177.45838928222656, "r": 531.14728, "b": 187.81533813476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9560735821723938, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.56716918945312, "t": 200.49346923828125, "r": 231.8074951171875, "b": 211.7656707763672, "coord_origin": "TOPLEFT"}, "confidence": 0.9554390907287598, "cells": [{"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.1630859375, "t": 216.0500030517578, "r": 544.07233, "b": 237.92694091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9777550101280212, "cells": [{"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.6591033935547, "t": 244.775146484375, "r": 497.78207, "b": 254.89271545410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9544404745101929, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.6646270751953, "t": 261.35205078125, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9548507332801819, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.5814971923828, "t": 278.5577087402344, "r": 440.54816000000005, "b": 288.8544616699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9628311991691589, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 136.37454223632812, "t": 301.3377685546875, "r": 258.3398742675781, "b": 312.59286, "coord_origin": "TOPLEFT"}, "confidence": 0.9562974572181702, "cells": [{"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9670867919922, "t": 316.8338928222656, "r": 547.24664, "b": 363.3339538574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852515459060669, "cells": [{"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 135.71563720703125, "t": 369.3797607421875, "r": 433.33899, "b": 379.9487609863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9577170014381409, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 135.65516662597656, "t": 386.6414794921875, "r": 465.02979000000005, "b": 397.0399169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9534773826599121, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 135.6472930908203, "t": 403.3809509277344, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9609959721565247, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 136.04916381835938, "t": 425.9317932128906, "r": 547.25159, "b": 472.63140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": [{"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 135.6191864013672, "t": 478.54052734375, "r": 526.84161, "b": 500.71951, "coord_origin": "TOPLEFT"}, "confidence": 0.9704018831253052, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 135.48377990722656, "t": 507.9300537109375, "r": 541.80554, "b": 566.3822631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9851728677749634, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 136.42056274414062, "t": 577.5960693359375, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}, "confidence": 0.9513794779777527, "cells": [{"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "footnote", "bbox": {"l": 136.24427795410156, "t": 725.0267333984375, "r": 418.4429931640625, "b": 735.0806274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9410406947135925, "cells": [{"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.963623046875, "t": 754.3152465820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105063676834106, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "section_header", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.3389434814453, "t": 70.3511962890625, "r": 249.09483337402344, "b": 81.77921295166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9597545266151428, "cells": [{"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance"}, {"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.980224609375, "t": 85.47271728515625, "r": 544.04358, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9820835590362549, "cells": [{"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements:"}, {"label": "list_item", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.69290161132812, "t": 126.65188598632812, "r": 517.36163, "b": 137.11279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9599407315254211, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle."}, {"label": "list_item", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.61203002929688, "t": 144.06478881835938, "r": 428.48267, "b": 154.2803192138672, "coord_origin": "TOPLEFT"}, "confidence": 0.9574074745178223, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate the capture of model metadata for report generation."}, {"label": "list_item", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6266632080078, "t": 160.60958862304688, "r": 352.83337, "b": 170.9593963623047, "coord_origin": "TOPLEFT"}, "confidence": 0.9567543864250183, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Drive transparent and explainable AI at scale."}, {"label": "list_item", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.69007873535156, "t": 177.45838928222656, "r": 531.14728, "b": 187.81533813476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9560735821723938, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging."}, {"label": "section_header", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.56716918945312, "t": 200.49346923828125, "r": 231.8074951171875, "b": 211.7656707763672, "coord_origin": "TOPLEFT"}, "confidence": 0.9554390907287598, "cells": [{"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management"}, {"label": "text", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.1630859375, "t": 216.0500030517578, "r": 544.07233, "b": 237.92694091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9777550101280212, "cells": [{"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale:"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6591033935547, "t": 244.775146484375, "r": 497.78207, "b": 254.89271545410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9544404745101929, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate facts and workflow management to comply with business standards."}, {"label": "list_item", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6646270751953, "t": 261.35205078125, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9548507332801819, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for clear and concise customizable results."}, {"label": "list_item", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.5814971923828, "t": 278.5577087402344, "r": 440.54816000000005, "b": 288.8544616699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9628311991691589, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enhanced collaboration across multiple regions and geographies."}, {"label": "section_header", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.37454223632812, "t": 301.3377685546875, "r": 258.3398742675781, "b": 312.59286, "coord_origin": "TOPLEFT"}, "confidence": 0.9562974572181702, "cells": [{"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance"}, {"label": "text", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9670867919922, "t": 316.8338928222656, "r": 547.24664, "b": 363.3339538574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852515459060669, "cells": [{"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:"}, {"label": "list_item", "id": 14, "page_no": 16, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.71563720703125, "t": 369.3797607421875, "r": 433.33899, "b": 379.9487609863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9577170014381409, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Help adhere to external AI regulations for audit and compliance."}, {"label": "list_item", "id": 15, "page_no": 16, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.65516662597656, "t": 386.6414794921875, "r": 465.02979000000005, "b": 397.0399169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9534773826599121, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convert external AI regulations into policies for automatic enforcement."}, {"label": "list_item", "id": 16, "page_no": 16, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.6472930908203, "t": 403.3809509277344, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9609959721565247, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for compliance status across policies and regulations."}, {"label": "text", "id": 17, "page_no": 16, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.04916381835938, "t": 425.9317932128906, "r": 547.25159, "b": 472.63140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": [{"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}]}, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways:"}, {"label": "list_item", "id": 18, "page_no": 16, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.6191864013672, "t": 478.54052734375, "r": 526.84161, "b": 500.71951, "coord_origin": "TOPLEFT"}, "confidence": 0.9704018831253052, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z."}, {"label": "list_item", "id": 19, "page_no": 16, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.48377990722656, "t": 507.9300537109375, "r": 541.80554, "b": 566.3822631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9851728677749634, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86."}, {"label": "text", "id": 20, "page_no": 16, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.42056274414062, "t": 577.5960693359375, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}, "confidence": 0.9513794779777527, "cells": [{"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution."}, {"label": "footnote", "id": 21, "page_no": 16, "cluster": {"id": 21, "label": "footnote", "bbox": {"l": 136.24427795410156, "t": 725.0267333984375, "r": 418.4429931640625, "b": 735.0806274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9410406947135925, "cells": [{"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance"}], "body": [{"label": "section_header", "id": 1, "page_no": 16, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 136.3389434814453, "t": 70.3511962890625, "r": 249.09483337402344, "b": 81.77921295166016, "coord_origin": "TOPLEFT"}, "confidence": 0.9597545266151428, "cells": [{"id": 1, "text": "Lifecycle governance", "bbox": {"l": 136.8, "t": 71.43622000000005, "r": 248.5215, "b": 81.59276999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance"}, {"label": "text", "id": 2, "page_no": 16, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.980224609375, "t": 85.47271728515625, "r": 544.04358, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9820835590362549, "cells": [{"id": 2, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, ", "bbox": {"l": 136.8, "t": 86.50867000000005, "r": 539.15723, "b": 95.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "that is, from creation to deletion. IBM AI governance addresses the problems that challenge ", "bbox": {"l": 136.8, "t": 98.50847999999996, "r": 544.04358, "b": 107.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "records managements: ", "bbox": {"l": 136.8, "t": 110.50829999999996, "r": 241.75150000000002, "b": 119.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Lifecycle governance helps you manage your business information throughout its lifecycle, that is, from creation to deletion. IBM AI governance addresses the problems that challenge records managements:"}, {"label": "list_item", "id": 3, "page_no": 16, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.69290161132812, "t": 126.65188598632812, "r": 517.36163, "b": 137.11279296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9599407315254211, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 127.63751000000002, "r": 141.78, "b": 136.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle. ", "bbox": {"l": 151.20016, "t": 127.48810000000014, "r": 517.36163, "b": 136.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor, catalog, and govern AI models from anywhere throughout the AI lifecycle."}, {"label": "list_item", "id": 4, "page_no": 16, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.61203002929688, "t": 144.06478881835938, "r": 428.48267, "b": 154.2803192138672, "coord_origin": "TOPLEFT"}, "confidence": 0.9574074745178223, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 144.67705999999998, "r": 141.78, "b": 153.45183999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Automate the capture of model metadata for report generation.", "bbox": {"l": 151.20016, "t": 144.52765, "r": 428.48267, "b": 153.74066000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate the capture of model metadata for report generation."}, {"label": "list_item", "id": 5, "page_no": 16, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6266632080078, "t": 160.60958862304688, "r": 352.83337, "b": 170.9593963623047, "coord_origin": "TOPLEFT"}, "confidence": 0.9567543864250183, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 161.65686000000005, "r": 141.78, "b": 170.43164000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Drive transparent and explainable AI at scale.", "bbox": {"l": 151.20016, "t": 161.50744999999995, "r": 352.83337, "b": 170.72046, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Drive transparent and explainable AI at scale."}, {"label": "list_item", "id": 6, "page_no": 16, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.69007873535156, "t": 177.45838928222656, "r": 531.14728, "b": 187.81533813476562, "coord_origin": "TOPLEFT"}, "confidence": 0.9560735821723938, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.8, "t": 178.63666, "r": 141.78, "b": 187.41143999999997, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Increase accuracy of predictions by identifying how AI is used and where it is lagging. ", "bbox": {"l": 151.20016, "t": 178.48724000000004, "r": 531.14728, "b": 187.70025999999996, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Increase accuracy of predictions by identifying how AI is used and where it is lagging."}, {"label": "section_header", "id": 7, "page_no": 16, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.56716918945312, "t": 200.49346923828125, "r": 231.8074951171875, "b": 211.7656707763672, "coord_origin": "TOPLEFT"}, "confidence": 0.9554390907287598, "cells": [{"id": 13, "text": "Risk management", "bbox": {"l": 136.8, "t": 201.45636000000002, "r": 230.82613, "b": 211.61292000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management"}, {"label": "text", "id": 8, "page_no": 16, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.1630859375, "t": 216.0500030517578, "r": 544.07233, "b": 237.92694091796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9777550101280212, "cells": [{"id": 14, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on ", "bbox": {"l": 136.8, "t": 216.52868999999998, "r": 544.07233, "b": 225.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "risk and compliance initiatives at scale: ", "bbox": {"l": 136.8, "t": 228.5285, "r": 311.84103, "b": 237.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Risk management is used in IBM AI governance to identify, manage, monitor, and report on risk and compliance initiatives at scale:"}, {"label": "list_item", "id": 9, "page_no": 16, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.6591033935547, "t": 244.775146484375, "r": 497.78207, "b": 254.89271545410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9544404745101929, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 245.65770999999995, "r": 141.78, "b": 254.4325, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Automate facts and workflow management to comply with business standards.", "bbox": {"l": 151.20016, "t": 245.50829999999996, "r": 497.78207, "b": 254.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Automate facts and workflow management to comply with business standards."}, {"label": "list_item", "id": 10, "page_no": 16, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.6646270751953, "t": 261.35205078125, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9548507332801819, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.8, "t": 262.63751, "r": 141.78, "b": 271.41229, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Use dynamic dashboards for clear and concise customizable results.", "bbox": {"l": 151.20016, "t": 262.48810000000003, "r": 455.01303, "b": 271.70110999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for clear and concise customizable results."}, {"label": "list_item", "id": 11, "page_no": 16, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.5814971923828, "t": 278.5577087402344, "r": 440.54816000000005, "b": 288.8544616699219, "coord_origin": "TOPLEFT"}, "confidence": 0.9628311991691589, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.8, "t": 279.67711999999995, "r": 141.78, "b": 288.45187, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Enhanced collaboration across multiple regions and geographies.", "bbox": {"l": 151.20016, "t": 279.52770999999996, "r": 440.54816000000005, "b": 288.74069, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enhanced collaboration across multiple regions and geographies."}, {"label": "section_header", "id": 12, "page_no": 16, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 136.37454223632812, "t": 301.3377685546875, "r": 258.3398742675781, "b": 312.59286, "coord_origin": "TOPLEFT"}, "confidence": 0.9562974572181702, "cells": [{"id": 22, "text": "Regulatory compliance", "bbox": {"l": 136.8, "t": 302.43637, "r": 257.70956, "b": 312.59286, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance"}, {"label": "text", "id": 13, "page_no": 16, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9670867919922, "t": 316.8338928222656, "r": 547.24664, "b": 363.3339538574219, "coord_origin": "TOPLEFT"}, "confidence": 0.9852515459060669, "cells": [{"id": 23, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive ", "bbox": {"l": 136.8, "t": 317.50872999999996, "r": 531.79254, "b": 326.72171, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "information and ensure human safety. Any business that works with digital assets, consumer ", "bbox": {"l": 136.8, "t": 329.50854, "r": 547.24664, "b": 338.72153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "data, health regulations, employee safety, and private communications is subject to regulatory ", "bbox": {"l": 136.8, "t": 341.50836, "r": 547.24664, "b": 350.72134, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:", "bbox": {"l": 136.80002, "t": 353.5081799999999, "r": 510.17843999999997, "b": 362.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Regulatory compliance is a set of rules that organizations must follow to protect sensitive information and ensure human safety. Any business that works with digital assets, consumer data, health regulations, employee safety, and private communications is subject to regulatory compliance.$^{3}$ The IBM AI governance solution for IBM Z includes the following tasks:"}, {"label": "list_item", "id": 14, "page_no": 16, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 135.71563720703125, "t": 369.3797607421875, "r": 433.33899, "b": 379.9487609863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9577170014381409, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 370.63791, "r": 141.78004, "b": 379.41269000000005, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Help adhere to external AI regulations for audit and compliance.", "bbox": {"l": 151.20021, "t": 370.48853, "r": 433.33899, "b": 379.70151, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Help adhere to external AI regulations for audit and compliance."}, {"label": "list_item", "id": 15, "page_no": 16, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 135.65516662597656, "t": 386.6414794921875, "r": 465.02979000000005, "b": 397.0399169921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9534773826599121, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 387.6774899999999, "r": 141.78004, "b": 396.45227, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Convert external AI regulations into policies for automatic enforcement.", "bbox": {"l": 151.20021, "t": 387.52811, "r": 465.02979000000005, "b": 396.74109, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convert external AI regulations into policies for automatic enforcement."}, {"label": "list_item", "id": 16, "page_no": 16, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 135.6472930908203, "t": 403.3809509277344, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9609959721565247, "cells": [{"id": 31, "text": "GLYPH", "bbox": {"l": 136.80005, "t": 404.65729, "r": 141.78004, "b": 413.43207, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Use dynamic dashboards for compliance status across policies and regulations.", "bbox": {"l": 151.20021, "t": 404.50790000000006, "r": 503.32617, "b": 413.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Use dynamic dashboards for compliance status across policies and regulations."}, {"label": "text", "id": 17, "page_no": 16, "cluster": {"id": 17, "label": "text", "bbox": {"l": 136.04916381835938, "t": 425.9317932128906, "r": 547.25159, "b": 472.63140869140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9851271510124207, "cells": [{"id": 33, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on ", "bbox": {"l": 136.80003, "t": 426.52747, "r": 547.25159, "b": 435.74045, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat ", "bbox": {"l": 136.80003, "t": 438.52728, "r": 529.5835, "b": 447.74026, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the ", "bbox": {"l": 136.80003, "t": 450.5271, "r": 516.83972, "b": 459.74008, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "following two ways: ", "bbox": {"l": 136.80003, "t": 462.52692, "r": 225.04564000000002, "b": 471.7399, "coord_origin": "TOPLEFT"}}]}, "text": "Enterprises can develop AI models and deploy them by using IBM Watson Studio or WML on CP4D on Red Hat OpenShift on a virtual machine that is based on IBM z/VM or Red Hat Enterprise Linux KVM on IBM Z. AI governance on IBM LinuxONE is supported in the following two ways:"}, {"label": "list_item", "id": 18, "page_no": 16, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 135.6191864013672, "t": 478.54052734375, "r": 526.84161, "b": 500.71951, "coord_origin": "TOPLEFT"}, "confidence": 0.9704018831253052, "cells": [{"id": 37, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 479.6561, "r": 141.78003, "b": 488.43088, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.2002, "t": 479.50671, "r": 526.84161, "b": 488.7197, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "virtual machine on IBM Z.", "bbox": {"l": 151.2002, "t": 491.50653, "r": 264.54898, "b": 500.71951, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Monitor the AI models with Watson OpenScale on CP4D on Red Hat OpenShift on a virtual machine on IBM Z."}, {"label": "list_item", "id": 19, "page_no": 16, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 135.48377990722656, "t": 507.9300537109375, "r": 541.80554, "b": 566.3822631835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9851728677749634, "cells": [{"id": 40, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 508.6955, "r": 141.78003, "b": 517.47028, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Enterprises can develop AI models by creating and training models by using Watson ", "bbox": {"l": 151.2002, "t": 508.54611, "r": 526.73706, "b": 517.75909, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Studio and development tools such as Jupyter Notebook or JupyterLab, and then ", "bbox": {"l": 151.2002, "t": 520.54593, "r": 512.31305, "b": 529.75891, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 151.2002, "t": 532.5457200000001, "r": 541.80554, "b": 541.75873, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "IBM Z. Then, these enterprises can achieve end-end AI governance by running AI ", "bbox": {"l": 151.2002, "t": 544.54553, "r": 515.66156, "b": 553.7585300000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86.", "bbox": {"l": 151.2002, "t": 556.54533, "r": 533.65723, "b": 565.75833, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Enterprises can develop AI models by creating and training models by using Watson Studio and development tools such as Jupyter Notebook or JupyterLab, and then deploying the model onto WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z. Then, these enterprises can achieve end-end AI governance by running AI Factsheets, IBM Watson OpenScale, and IBM Watson OpenPagesfi on CP4D on x86."}, {"label": "text", "id": 20, "page_no": 16, "cluster": {"id": 20, "label": "text", "bbox": {"l": 136.42056274414062, "t": 577.5960693359375, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}, "confidence": 0.9513794779777527, "cells": [{"id": 46, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution. ", "bbox": {"l": 136.80003, "t": 578.50514, "r": 512.49115, "b": 587.71814, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 on page 16 shows the end-to-end flow for a remote AI governance solution."}, {"label": "footnote", "id": 21, "page_no": 16, "cluster": {"id": 21, "label": "footnote", "bbox": {"l": 136.24427795410156, "t": 725.0267333984375, "r": 418.4429931640625, "b": 735.0806274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.9410406947135925, "cells": [{"id": 47, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance", "bbox": {"l": 136.8, "t": 727.709961, "r": 418.26596, "b": 734.740341, "coord_origin": "TOPLEFT"}}]}, "text": "$^{3 }$https://www.proofpoint.com/us/threat-reference/regulatory-compliance"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 16, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.963623046875, "t": 754.3152465820312, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105063676834106, "cells": [{"id": 0, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.45965576171875, "t": 754.4435424804688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9134598970413208, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.34640502929688, "t": 754.726318359375, "r": 267.0744, "b": 764.1643676757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9585385322570801, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.34585571289062, "t": 293.41015625, "r": 295.9040222167969, "b": 302.8072509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9478130340576172, "cells": [{"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.1533203125, "t": 315.34637451171875, "r": 438.01648, "b": 325.61328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8973822593688965, "cells": [{"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 331.922119140625, "r": 541.70392, "b": 354.27032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9647595286369324, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.25994873046875, "t": 668.81396484375, "r": 279.38360595703125, "b": 678.0313110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9575855135917664, "cells": [{"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 63.88758850097656, "t": 368.6678771972656, "r": 547.6134033203125, "b": 666.1146240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861761927604675, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.32939147949219, "t": 77.701416015625, "r": 547.455810546875, "b": 290.7998352050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9852413535118103, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45965576171875, "t": 754.4435424804688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9134598970413208, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34640502929688, "t": 754.726318359375, "r": 267.0744, "b": 764.1643676757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9585385322570801, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "caption", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.34585571289062, "t": 293.41015625, "r": 295.9040222167969, "b": 302.8072509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9478130340576172, "cells": [{"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 Remote AI governance solution end-to-end flow"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1533203125, "t": 315.34637451171875, "r": 438.01648, "b": 325.61328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8973822593688965, "cells": [{"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}]}, "text": "To achieve end-to-end AI governance, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 331.922119140625, "r": 541.70392, "b": 354.27032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9647595286369324, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10."}, {"label": "caption", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.25994873046875, "t": 668.81396484375, "r": 279.38360595703125, "b": 678.0313110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9575855135917664, "cells": [{"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 10 Creating a model entry in IBM OpenPages"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.88758850097656, "t": 368.6678771972656, "r": 547.6134033203125, "b": 666.1146240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861761927604675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.32939147949219, "t": 77.701416015625, "r": 547.455810546875, "b": 290.7998352050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9852413535118103, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.34585571289062, "t": 293.41015625, "r": 295.9040222167969, "b": 302.8072509765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9478130340576172, "cells": [{"id": 2, "text": "Figure 9 Remote AI governance solution end-to-end flow", "bbox": {"l": 64.800301, "t": 294.07828, "r": 295.07071, "b": 302.40329, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 9 Remote AI governance solution end-to-end flow"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.1533203125, "t": 315.34637451171875, "r": 438.01648, "b": 325.61328125, "coord_origin": "TOPLEFT"}, "confidence": 0.8973822593688965, "cells": [{"id": 3, "text": "To achieve end-to-end AI governance, complete the following steps:", "bbox": {"l": 136.8, "t": 316.00872999999996, "r": 438.01648, "b": 325.22171, "coord_origin": "TOPLEFT"}}]}, "text": "To achieve end-to-end AI governance, complete the following steps:"}, {"label": "list_item", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.8, "t": 331.922119140625, "r": 541.70392, "b": 354.27032470703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9647595286369324, "cells": [{"id": 4, "text": "1.", "bbox": {"l": 136.8, "t": 333.04831, "r": 145.20338, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in ", "bbox": {"l": 148.0045, "t": 333.04831, "r": 541.70392, "b": 342.26129, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 10.", "bbox": {"l": 151.20015, "t": 345.04813, "r": 196.25023, "b": 354.26111, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a model entry in IBM OpenPages by using CP4D on a x86 platform, as shown in Figure 10."}, {"label": "caption", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.25994873046875, "t": 668.81396484375, "r": 279.38360595703125, "b": 678.0313110351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9575855135917664, "cells": [{"id": 7, "text": "Figure 10 Creating a model entry in IBM OpenPages", "bbox": {"l": 64.800003, "t": 669.3179, "r": 279.02966, "b": 677.6429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 10 Creating a model entry in IBM OpenPages"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 63.88758850097656, "t": 368.6678771972656, "r": 547.6134033203125, "b": 666.1146240234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9861761927604675, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.32939147949219, "t": 77.701416015625, "r": 547.455810546875, "b": 290.7998352050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9852413535118103, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.45965576171875, "t": 754.4435424804688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9134598970413208, "cells": [{"id": 0, "text": "16 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "16"}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.34640502929688, "t": 754.726318359375, "r": 267.0744, "b": 764.1643676757812, "coord_origin": "TOPLEFT"}, "confidence": 0.9585385322570801, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 18, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.8695068359375, "t": 754.4427490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9015737175941467, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "list_item", "bbox": {"l": 135.98834228515625, "t": 70.76612854003906, "r": 542.91144, "b": 105.02376556396484, "coord_origin": "TOPLEFT"}, "confidence": 0.9786083102226257, "cells": [{"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.27749633789062, "t": 416.1407165527344, "r": 290.4153137207031, "b": 425.51422119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.956462562084198, "cells": [{"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 136.21717834472656, "t": 438.00299072265625, "r": 547.26868, "b": 460.15716552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9648804664611816, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 64.3975601196289, "t": 726.088623046875, "r": 351.1659851074219, "b": 735.51611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9549134373664856, "cells": [{"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 63.96794891357422, "t": 119.27977752685547, "r": 547.4464111328125, "b": 412.66949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9853487610816956, "cells": []}, {"id": 6, "label": "picture", "bbox": {"l": 64.33274841308594, "t": 473.3788757324219, "r": 547.9761962890625, "b": 723.4976196289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9851948618888855, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8695068359375, "t": 754.4427490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9015737175941467, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}, {"label": "list_item", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "list_item", "bbox": {"l": 135.98834228515625, "t": 70.76612854003906, "r": 542.91144, "b": 105.02376556396484, "coord_origin": "TOPLEFT"}, "confidence": 0.9786083102226257, "cells": [{"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11."}, {"label": "caption", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.27749633789062, "t": 416.1407165527344, "r": 290.4153137207031, "b": 425.51422119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.956462562084198, "cells": [{"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 11 Training an AI model by using Watson Studio"}, {"label": "list_item", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.21717834472656, "t": 438.00299072265625, "r": 547.26868, "b": 460.15716552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9648804664611816, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}]}, "text": "3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12."}, {"label": "caption", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.3975601196289, "t": 726.088623046875, "r": 351.1659851074219, "b": 735.51611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9549134373664856, "cells": [{"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data"}, {"label": "picture", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.96794891357422, "t": 119.27977752685547, "r": 547.4464111328125, "b": 412.66949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9853487610816956, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 64.33274841308594, "t": 473.3788757324219, "r": 547.9761962890625, "b": 723.4976196289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9851948618888855, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 1, "page_no": 18, "cluster": {"id": 1, "label": "list_item", "bbox": {"l": 135.98834228515625, "t": 70.76612854003906, "r": 542.91144, "b": 105.02376556396484, "coord_origin": "TOPLEFT"}, "confidence": 0.9786083102226257, "cells": [{"id": 1, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.20468, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Train a model by using Watson Studio and by using development tools such as Jupyter ", "bbox": {"l": 148.00638, "t": 71.50903000000005, "r": 538.99438, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 542.91144, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "as shown in Figure 11.", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 251.74993999999998, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Train a model by using Watson Studio and by using development tools such as Jupyter Notebook or JupyterLab on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 11."}, {"label": "caption", "id": 2, "page_no": 18, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.27749633789062, "t": 416.1407165527344, "r": 290.4153137207031, "b": 425.51422119140625, "coord_origin": "TOPLEFT"}, "confidence": 0.956462562084198, "cells": [{"id": 5, "text": "Figure 11 Training an AI model by using Watson Studio", "bbox": {"l": 64.800003, "t": 416.59799, "r": 290.02679, "b": 424.923, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 11 Training an AI model by using Watson Studio"}, {"label": "list_item", "id": 3, "page_no": 18, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 136.21717834472656, "t": 438.00299072265625, "r": 547.26868, "b": 460.15716552734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9648804664611816, "cells": [{"id": 6, "text": "3.", "bbox": {"l": 136.8, "t": 438.58871000000005, "r": 145.19128, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on ", "bbox": {"l": 147.98837, "t": 438.58871000000005, "r": 547.26868, "b": 447.80170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "IBM Z, as shown in Figure 12.", "bbox": {"l": 151.20016, "t": 450.58853, "r": 283.89426, "b": 459.80151, "coord_origin": "TOPLEFT"}}]}, "text": "3. Deploy the model by using WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, as shown in Figure 12."}, {"label": "caption", "id": 4, "page_no": 18, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.3975601196289, "t": 726.088623046875, "r": 351.1659851074219, "b": 735.51611328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9549134373664856, "cells": [{"id": 9, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data", "bbox": {"l": 64.800003, "t": 726.618004, "r": 351.0603, "b": 734.943001, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 12 Deploying an AI model by using WML on Cloud Pak for Data"}, {"label": "picture", "id": 5, "page_no": 18, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.96794891357422, "t": 119.27977752685547, "r": 547.4464111328125, "b": 412.66949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9853487610816956, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 18, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 64.33274841308594, "t": 473.3788757324219, "r": 547.9761962890625, "b": 723.4976196289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9851948618888855, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 18, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8695068359375, "t": 754.4427490234375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9015737175941467, "cells": [{"id": 0, "text": "17", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "17"}]}}, {"page_no": 19, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.46235656738281, "t": 754.4052734375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125085473060608, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31233978271484, "t": 754.6796875, "r": 267.0744, "b": 764.2430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9569898843765259, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 135.78439331054688, "t": 70.60037231445312, "r": 547.24561, "b": 117.01048278808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9820504188537598, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.2765350341797, "t": 388.18072509765625, "r": 242.76724243164062, "b": 397.4988708496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9542616605758667, "cells": [{"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 150.45053100585938, "t": 409.876708984375, "r": 547.29028, "b": 432.26702880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414600729942322, "cells": [{"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.26177978515625, "t": 710.1182861328125, "r": 187.44825744628906, "b": 719.7200927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9529473781585693, "cells": [{"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.07406616210938, "t": 130.84774780273438, "r": 533.5489501953125, "b": 384.489013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865854978561401, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.0412368774414, "t": 445.4599609375, "r": 547.8551635742188, "b": 707.6512451171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9851176738739014, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46235656738281, "t": 754.4052734375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125085473060608, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31233978271484, "t": 754.6796875, "r": 267.0744, "b": 764.2430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9569898843765259, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "list_item", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78439331054688, "t": 70.60037231445312, "r": 547.24561, "b": 117.01048278808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9820504188537598, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform."}, {"label": "caption", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2765350341797, "t": 388.18072509765625, "r": 242.76724243164062, "b": 397.4988708496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9542616605758667, "cells": [{"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 13 External model"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.45053100585938, "t": 409.876708984375, "r": 547.29028, "b": 432.26702880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414600729942322, "cells": [{"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}]}, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages."}, {"label": "caption", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.26177978515625, "t": 710.1182861328125, "r": 187.44825744628906, "b": 719.7200927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9529473781585693, "cells": [{"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 14 Tracking the model"}, {"label": "picture", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.07406616210938, "t": 130.84774780273438, "r": 533.5489501953125, "b": 384.489013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865854978561401, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.0412368774414, "t": 445.4599609375, "r": 547.8551635742188, "b": 707.6512451171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9851176738739014, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 19, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 135.78439331054688, "t": 70.60037231445312, "r": 547.24561, "b": 117.01048278808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9820504188537598, "cells": [{"id": 2, "text": "4.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20747, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Track the external model lifecycle by browsing through the Catalogs/Platform assets ", "bbox": {"l": 148.00995, "t": 71.50867000000005, "r": 525.63037, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as ", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 547.24561, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a ", "bbox": {"l": 151.20016, "t": 95.50829999999996, "r": 542.44379, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform.", "bbox": {"l": 151.20016, "t": 107.50811999999996, "r": 517.94836, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "4. Track the external model lifecycle by browsing through the Catalogs/Platform assets catalog by using AI Factsheets and OpenPages while using CP4D on an x86 platform, as shown in Figure 13. The external model (deployed on CP4D on Red Hat OpenShift on a virtual machine on IBM Z) is saved as a platform asset catalog on the x86 platform."}, {"label": "caption", "id": 3, "page_no": 19, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.2765350341797, "t": 388.18072509765625, "r": 242.76724243164062, "b": 397.4988708496094, "coord_origin": "TOPLEFT"}, "confidence": 0.9542616605758667, "cells": [{"id": 7, "text": "Figure 13 External model", "bbox": {"l": 136.8, "t": 388.698, "r": 242.17379999999997, "b": 397.02301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 13 External model"}, {"label": "text", "id": 4, "page_no": 19, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.45053100585938, "t": 409.876708984375, "r": 547.29028, "b": 432.26702880859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9414600729942322, "cells": [{"id": 8, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, ", "bbox": {"l": 151.2, "t": 410.68872, "r": 547.29028, "b": 419.90170000000006, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "by using AI Factsheets and OpenPages.", "bbox": {"l": 151.2, "t": 422.68854, "r": 330.03784, "b": 431.90152, "coord_origin": "TOPLEFT"}}]}, "text": "You can track the model through each stage of the model lifecycle, as shown in Figure 14, by using AI Factsheets and OpenPages."}, {"label": "caption", "id": 5, "page_no": 19, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.26177978515625, "t": 710.1182861328125, "r": 187.44825744628906, "b": 719.7200927734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9529473781585693, "cells": [{"id": 10, "text": "Figure 14 Tracking the model", "bbox": {"l": 64.800003, "t": 711.197899, "r": 186.63029, "b": 719.522896, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 14 Tracking the model"}, {"label": "picture", "id": 6, "page_no": 19, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.07406616210938, "t": 130.84774780273438, "r": 533.5489501953125, "b": 384.489013671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9865854978561401, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 19, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.0412368774414, "t": 445.4599609375, "r": 547.8551635742188, "b": 707.6512451171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9851176738739014, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 19, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.46235656738281, "t": 754.4052734375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9125085473060608, "cells": [{"id": 0, "text": "18 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "18"}, {"label": "page_footer", "id": 1, "page_no": 19, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31233978271484, "t": 754.6796875, "r": 267.0744, "b": 764.2430419921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9569898843765259, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 20, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.8822631835938, "t": 754.3675537109375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9091770052909851, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 150.36676025390625, "t": 70.72309875488281, "r": 547.22223, "b": 92.90152740478516, "coord_origin": "TOPLEFT"}, "confidence": 0.8821508288383484, "cells": [{"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 64.23995208740234, "t": 414.707763671875, "r": 450.36871337890625, "b": 423.87420654296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9387805461883545, "cells": [{"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "picture", "bbox": {"l": 64.23773956298828, "t": 107.1172103881836, "r": 547.417236328125, "b": 411.15496826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9859113693237305, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8822631835938, "t": 754.3675537109375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9091770052909851, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "text", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "text", "bbox": {"l": 150.36676025390625, "t": 70.72309875488281, "r": 547.22223, "b": 92.90152740478516, "coord_origin": "TOPLEFT"}, "confidence": 0.8821508288383484, "cells": [{"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15."}, {"label": "caption", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.23995208740234, "t": 414.707763671875, "r": 450.36871337890625, "b": 423.87420654296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9387805461883545, "cells": [{"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform"}, {"label": "picture", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.23773956298828, "t": 107.1172103881836, "r": 547.417236328125, "b": 411.15496826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9859113693237305, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 20, "cluster": {"id": 1, "label": "text", "bbox": {"l": 150.36676025390625, "t": 70.72309875488281, "r": 547.22223, "b": 92.90152740478516, "coord_origin": "TOPLEFT"}, "confidence": 0.8821508288383484, "cells": [{"id": 1, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk ", "bbox": {"l": 151.19977, "t": 71.50903000000005, "r": 547.22223, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "management, as shown in Figure 15. ", "bbox": {"l": 151.19977, "t": 83.50885000000017, "r": 318.41922, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "You can see that the model facts are tracked and synchronized to IBM OpenPages for risk management, as shown in Figure 15."}, {"label": "caption", "id": 2, "page_no": 20, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 64.23995208740234, "t": 414.707763671875, "r": 450.36871337890625, "b": 423.87420654296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9387805461883545, "cells": [{"id": 3, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform", "bbox": {"l": 64.800003, "t": 415.33797999999996, "r": 449.53204, "b": 423.6629899999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 15 Model facts that are tracked and synchronized to IBM OpenPages on an x86 platform"}, {"label": "picture", "id": 3, "page_no": 20, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.23773956298828, "t": 107.1172103881836, "r": 547.417236328125, "b": 411.15496826171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9859113693237305, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 20, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.8822631835938, "t": 754.3675537109375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9091770052909851, "cells": [{"id": 0, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 21, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.867469787597656, "t": 754.3300170898438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187637567520142, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.32005310058594, "t": 754.70068359375, "r": 267.0744, "b": 764.1736450195312, "coord_origin": "TOPLEFT"}, "confidence": 0.957935094833374, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.09112548828125, "t": 70.54534149169922, "r": 525.69312, "b": 93.12995147705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9633587598800659, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.40975189208984, "t": 384.0537414550781, "r": 295.9855651855469, "b": 393.44476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950371503829956, "cells": [{"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.78622436523438, "t": 405.9812316894531, "r": 547.32935, "b": 452.30450439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535754323005676, "cells": [{"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 63.799659729003906, "t": 107.32193756103516, "r": 547.7122192382812, "b": 381.23724365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9833127856254578, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.867469787597656, "t": 754.3300170898438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187637567520142, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32005310058594, "t": 754.70068359375, "r": 267.0744, "b": 764.1736450195312, "coord_origin": "TOPLEFT"}, "confidence": 0.957935094833374, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "list_item", "id": 2, "page_no": 21, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.09112548828125, "t": 70.54534149169922, "r": 525.69312, "b": 93.12995147705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9633587598800659, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16."}, {"label": "caption", "id": 3, "page_no": 21, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.40975189208984, "t": 384.0537414550781, "r": 295.9855651855469, "b": 393.44476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950371503829956, "cells": [{"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 16 Creating an external model on an x86 platform"}, {"label": "text", "id": 4, "page_no": 21, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78622436523438, "t": 405.9812316894531, "r": 547.32935, "b": 452.30450439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535754323005676, "cells": [{"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}]}, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21."}, {"label": "picture", "id": 5, "page_no": 21, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.799659729003906, "t": 107.32193756103516, "r": 547.7122192382812, "b": 381.23724365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9833127856254578, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 21, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.09112548828125, "t": 70.54534149169922, "r": 525.69312, "b": 93.12995147705078, "coord_origin": "TOPLEFT"}, "confidence": 0.9633587598800659, "cells": [{"id": 2, "text": "5.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.20818, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Create an external model by using IBM OpenScale on the x86 platform, as shown in ", "bbox": {"l": 148.01088, "t": 71.50867000000005, "r": 525.69312, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 16.", "bbox": {"l": 151.20016, "t": 83.50847999999996, "r": 196.25024, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create an external model by using IBM OpenScale on the x86 platform, as shown in Figure 16."}, {"label": "caption", "id": 3, "page_no": 21, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.40975189208984, "t": 384.0537414550781, "r": 295.9855651855469, "b": 393.44476318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.950371503829956, "cells": [{"id": 5, "text": "Figure 16 Creating an external model on an x86 platform", "bbox": {"l": 64.800003, "t": 384.798, "r": 295.03442, "b": 393.12302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 16 Creating an external model on an x86 platform"}, {"label": "text", "id": 4, "page_no": 21, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.78622436523438, "t": 405.9812316894531, "r": 547.32935, "b": 452.30450439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9535754323005676, "cells": [{"id": 6, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, ", "bbox": {"l": 136.8, "t": 406.78873, "r": 547.29736, "b": 416.00171, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "drift, and explainability of a model. Fairness determines whether your model produces biased ", "bbox": {"l": 136.8, "t": 418.78853999999995, "r": 547.13806, "b": 428.00152999999995, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "outcomes. Quality determines how well your model predicts outcomes. Drift is the ", "bbox": {"l": 136.79999, "t": 430.78836000000007, "r": 499.57693, "b": 440.00134, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "degradation of predictive performance over time. A sample is shown in Figure 17 on page 21.", "bbox": {"l": 136.8, "t": 442.78818, "r": 547.32935, "b": 452.00116, "coord_origin": "TOPLEFT"}}]}, "text": "IBM OpenScale provides a comprehensive dashboard that tracks fairness, quality monitoring, drift, and explainability of a model. Fairness determines whether your model produces biased outcomes. Quality determines how well your model predicts outcomes. Drift is the degradation of predictive performance over time. A sample is shown in Figure 17 on page 21."}, {"label": "picture", "id": 5, "page_no": 21, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.799659729003906, "t": 107.32193756103516, "r": 547.7122192382812, "b": 381.23724365234375, "coord_origin": "TOPLEFT"}, "confidence": 0.9833127856254578, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 21, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.867469787597656, "t": 754.3300170898438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187637567520142, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 21, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.32005310058594, "t": 754.70068359375, "r": 267.0744, "b": 764.1736450195312, "coord_origin": "TOPLEFT"}, "confidence": 0.957935094833374, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 22, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.4277954101562, "t": 754.2350463867188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9060306549072266, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.26493835449219, "t": 353.3095397949219, "r": 386.60101318359375, "b": 362.7451477050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9381591081619263, "cells": [{"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.85134887695312, "t": 375.21990966796875, "r": 547.21674, "b": 433.3600769042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9801287055015564, "cells": [{"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.34110260009766, "t": 724.7535400390625, "r": 507.7935485839844, "b": 734.0853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9460791945457458, "cells": [{"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "picture", "bbox": {"l": 64.15648651123047, "t": 447.1334533691406, "r": 547.9522705078125, "b": 721.9699096679688, "coord_origin": "TOPLEFT"}, "confidence": 0.9854127764701843, "cells": []}, {"id": 5, "label": "picture", "bbox": {"l": 63.62750244140625, "t": 77.65582275390625, "r": 547.6529541015625, "b": 350.53533935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835888147354126, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4277954101562, "t": 754.2350463867188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9060306549072266, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}, {"label": "caption", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493835449219, "t": 353.3095397949219, "r": 386.60101318359375, "b": 362.7451477050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9381591081619263, "cells": [{"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model"}, {"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.85134887695312, "t": 375.21990966796875, "r": 547.21674, "b": 433.3600769042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9801287055015564, "cells": [{"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}]}, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale."}, {"label": "caption", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.34110260009766, "t": 724.7535400390625, "r": 507.7935485839844, "b": 734.0853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9460791945457458, "cells": [{"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale"}, {"label": "picture", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.15648651123047, "t": 447.1334533691406, "r": 547.9522705078125, "b": 721.9699096679688, "coord_origin": "TOPLEFT"}, "confidence": 0.9854127764701843, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.62750244140625, "t": 77.65582275390625, "r": 547.6529541015625, "b": 350.53533935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835888147354126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 22, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.26493835449219, "t": 353.3095397949219, "r": 386.60101318359375, "b": 362.7451477050781, "coord_origin": "TOPLEFT"}, "confidence": 0.9381591081619263, "cells": [{"id": 1, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model", "bbox": {"l": 64.800003, "t": 354.01801, "r": 385.45013, "b": 362.34302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 17 IBM OpenScale dashboard that is used to monitor the external model"}, {"label": "text", "id": 2, "page_no": 22, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.85134887695312, "t": 375.21990966796875, "r": 547.21674, "b": 433.3600769042969, "coord_origin": "TOPLEFT"}, "confidence": 0.9801287055015564, "cells": [{"id": 2, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red ", "bbox": {"l": 136.8, "t": 376.00872999999996, "r": 542.91388, "b": 385.22171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by ", "bbox": {"l": 136.8, "t": 388.00854, "r": 521.86963, "b": 397.22153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 ", "bbox": {"l": 136.8, "t": 400.00836, "r": 547.21674, "b": 409.22134, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and ", "bbox": {"l": 136.8, "t": 412.0081799999999, "r": 504.60781999999995, "b": 421.22116, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "OpenScale. ", "bbox": {"l": 136.8, "t": 424.00800000000004, "r": 191.81007, "b": 433.22098, "coord_origin": "TOPLEFT"}}]}, "text": "You developed and deployed the AI model by using Watson Studio, WML on CP4D on Red Hat OpenShift on a virtual machine on IBM Z, and end-to-end AI model governance by leveraging AI Factsheets, OpenScale, and OpenPages on CP4D on a x86 platform. Figure 18 shows end-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale."}, {"label": "caption", "id": 3, "page_no": 22, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.34110260009766, "t": 724.7535400390625, "r": 507.7935485839844, "b": 734.0853271484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9460791945457458, "cells": [{"id": 7, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale", "bbox": {"l": 64.800003, "t": 725.297897, "r": 507.3417400000001, "b": 733.622898, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 18 Final result: End-to-end AI governance when using IBM OpenPages, AI Factsheets, and OpenScale"}, {"label": "picture", "id": 4, "page_no": 22, "cluster": {"id": 4, "label": "picture", "bbox": {"l": 64.15648651123047, "t": 447.1334533691406, "r": 547.9522705078125, "b": 721.9699096679688, "coord_origin": "TOPLEFT"}, "confidence": 0.9854127764701843, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 5, "page_no": 22, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 63.62750244140625, "t": 77.65582275390625, "r": 547.6529541015625, "b": 350.53533935546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9835888147354126, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 22, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4277954101562, "t": 754.2350463867188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9060306549072266, "cells": [{"id": 0, "text": "21", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "21"}]}}, {"page_no": 23, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85818862915039, "t": 754.4114990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204315543174744, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.21298217773438, "t": 754.78466796875, "r": 267.0744, "b": 764.0928344726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9566571712493896, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 70.24270629882812, "r": 389.5157470703125, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9576336145401001, "cells": [{"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.07400512695312, "t": 102.76129150390625, "r": 547.22473, "b": 136.72068786621094, "coord_origin": "TOPLEFT"}, "confidence": 0.985734224319458, "cells": [{"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.54896545410156, "t": 156.48988342285156, "r": 186.7186, "b": 169.83836364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.964301347732544, "cells": [{"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.15374755859375, "t": 182.6127166748047, "r": 547.29553, "b": 228.91392517089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9875076413154602, "cells": [{"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.6235122680664, "t": 248.58290100097656, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9595711827278137, "cells": [{"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.9077606201172, "t": 274.71612548828125, "r": 547.26355, "b": 356.72061, "coord_origin": "TOPLEFT"}, "confidence": 0.9880195260047913, "cells": [{"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.04486083984375, "t": 368.8188781738281, "r": 547.14716, "b": 402.8493957519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9847903847694397, "cells": [{"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.09634399414062, "t": 414.7832336425781, "r": 547.20087, "b": 461.024658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9877332448959351, "cells": [{"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85818862915039, "t": 754.4114990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204315543174744, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21298217773438, "t": 754.78466796875, "r": 267.0744, "b": 764.0928344726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9566571712493896, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 70.24270629882812, "r": 389.5157470703125, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9576336145401001, "cells": [{"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 2: Credit default risk assessment"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.07400512695312, "t": 102.76129150390625, "r": 547.22473, "b": 136.72068786621094, "coord_origin": "TOPLEFT"}, "confidence": 0.985734224319458, "cells": [{"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations."}, {"label": "section_header", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.54896545410156, "t": 156.48988342285156, "r": 186.7186, "b": 169.83836364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.964301347732544, "cells": [{"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.15374755859375, "t": 182.6127166748047, "r": 547.29553, "b": 228.91392517089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9875076413154602, "cells": [{"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood of default, but that is not an efficient method for judgment as a business grows."}, {"label": "section_header", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.6235122680664, "t": 248.58290100097656, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9595711827278137, "cells": [{"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Predictions of credit default risk assessment"}, {"label": "text", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9077606201172, "t": 274.71612548828125, "r": 547.26355, "b": 356.72061, "coord_origin": "TOPLEFT"}, "confidence": 0.9880195260047913, "cells": [{"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}]}, "text": "In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan."}, {"label": "text", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.04486083984375, "t": 368.8188781738281, "r": 547.14716, "b": 402.8493957519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9847903847694397, "cells": [{"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk."}, {"label": "text", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09634399414062, "t": 414.7832336425781, "r": 547.20087, "b": 461.024658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9877332448959351, "cells": [{"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model."}], "body": [{"label": "section_header", "id": 2, "page_no": 23, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 70.24270629882812, "r": 389.5157470703125, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.9576336145401001, "cells": [{"id": 2, "text": "Use case 2: Credit default risk assessment", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 389.15826, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 2: Credit default risk assessment"}, {"label": "text", "id": 3, "page_no": 23, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.07400512695312, "t": 102.76129150390625, "r": 547.22473, "b": 136.72068786621094, "coord_origin": "TOPLEFT"}, "confidence": 0.985734224319458, "cells": [{"id": 3, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 547.22473, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "needs often look to financial institutions. Financial institutions can offer loans to individuals or ", "bbox": {"l": 136.80002, "t": 115.48852999999997, "r": 547.20685, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "businesses and charge interest based on the current market situations.", "bbox": {"l": 136.80002, "t": 127.48834000000011, "r": 450.76300000000003, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "In today\u2019s world, many individuals or businesses seeking loans to meet their growing business needs often look to financial institutions. Financial institutions can offer loans to individuals or businesses and charge interest based on the current market situations."}, {"label": "section_header", "id": 4, "page_no": 23, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.54896545410156, "t": 156.48988342285156, "r": 186.7186, "b": 169.83836364746094, "coord_origin": "TOPLEFT"}, "confidence": 0.964301347732544, "cells": [{"id": 6, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 157.37469, "r": 186.7186, "b": 169.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 5, "page_no": 23, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.15374755859375, "t": 182.6127166748047, "r": 547.29553, "b": 228.91392517089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9875076413154602, "cells": [{"id": 7, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, ", "bbox": {"l": 136.8, "t": 183.52868999999998, "r": 547.15698, "b": 192.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "and judging the likelihood of default is the difference between a successful and unsuccessful ", "bbox": {"l": 136.8, "t": 195.5285, "r": 547.27142, "b": 204.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood ", "bbox": {"l": 136.8, "t": 207.52832, "r": 547.29553, "b": 216.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "of default, but that is not an efficient method for judgment as a business grows. ", "bbox": {"l": 136.8, "t": 219.52814, "r": 487.93381, "b": 228.74114999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions must make an accurate decision about whether to sanction a loan or not, and judging the likelihood of default is the difference between a successful and unsuccessful loan portfolio. In a traditional scenario, an experienced banker can judge someone\u2019s likelihood of default, but that is not an efficient method for judgment as a business grows."}, {"label": "section_header", "id": 6, "page_no": 23, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.6235122680664, "t": 248.58290100097656, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}, "confidence": 0.9595711827278137, "cells": [{"id": 11, "text": "Predictions of credit default risk assessment", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 341.16034, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Predictions of credit default risk assessment"}, {"label": "text", "id": 7, "page_no": 23, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.9077606201172, "t": 274.71612548828125, "r": 547.26355, "b": 356.72061, "coord_origin": "TOPLEFT"}, "confidence": 0.9880195260047913, "cells": [{"id": 12, "text": "In the modern world, growing business institutions can no longer rely on only experienced ", "bbox": {"l": 136.8, "t": 275.50873, "r": 535.18909, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "bankers to decide whether to sanction a loan knowing that there is a probability that the ", "bbox": {"l": 136.8, "t": 287.50854, "r": 525.13245, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "borrower might default on their loans. A better choice is to rely on technological ", "bbox": {"l": 136.80002, "t": 299.50836, "r": 489.06039, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "advancements that can help with reasoning based on facts, such as leveraging credit risk ", "bbox": {"l": 136.80002, "t": 311.5081799999999, "r": 534.11041, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "modeling techniques to process the historical data of past borrowers to understand their ", "bbox": {"l": 136.80002, "t": 323.50800000000004, "r": 527.39343, "b": 332.72098, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "credit behavior and make a more informed decision about whether to lend money, how much ", "bbox": {"l": 136.80002, "t": 335.50781, "r": 547.26355, "b": 344.7207900000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "money, and decide on the tenure to close the loan. ", "bbox": {"l": 136.80002, "t": 347.50763, "r": 364.10812, "b": 356.72061, "coord_origin": "TOPLEFT"}}]}, "text": "In the modern world, growing business institutions can no longer rely on only experienced bankers to decide whether to sanction a loan knowing that there is a probability that the borrower might default on their loans. A better choice is to rely on technological advancements that can help with reasoning based on facts, such as leveraging credit risk modeling techniques to process the historical data of past borrowers to understand their credit behavior and make a more informed decision about whether to lend money, how much money, and decide on the tenure to close the loan."}, {"label": "text", "id": 8, "page_no": 23, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.04486083984375, "t": 368.8188781738281, "r": 547.14716, "b": 402.8493957519531, "coord_origin": "TOPLEFT"}, "confidence": 0.9847903847694397, "cells": [{"id": 19, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit ", "bbox": {"l": 136.80002, "t": 369.52719, "r": 539.61719, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, ", "bbox": {"l": 136.80002, "t": 381.52701, "r": 547.14716, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "and thus can help better manage the exposure to credit risk.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 403.00879, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Financial institutions can leverage AI solutions by using ML techniques to predict the credit risk. Applying AI to credit risk modeling techniques can benefit institutions in decision-making, and thus can help better manage the exposure to credit risk."}, {"label": "text", "id": 9, "page_no": 23, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.09634399414062, "t": 414.7832336425781, "r": 547.20087, "b": 461.024658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9877332448959351, "cells": [{"id": 22, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 539.76471, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 545.84222, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "for handling in-bound transactions, and CP4D is used for AI model lifecycle management that ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 547.20087, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "includes building, training, and deploying the model. ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 369.01248, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 on page 23 shows a sample architecture about how to design and develop an AI model for credit risk assessment on IBM Z. An IBM WebSpherefi Application Server is used for handling in-bound transactions, and CP4D is used for AI model lifecycle management that includes building, training, and deploying the model."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 23, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85818862915039, "t": 754.4114990234375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9204315543174744, "cells": [{"id": 0, "text": "22 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "22"}, {"label": "page_footer", "id": 1, "page_no": 23, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21298217773438, "t": 754.78466796875, "r": 267.0744, "b": 764.0928344726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9566571712493896, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 24, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.4268188476562, "t": 754.3800048828125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9180097579956055, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.25103759765625, "t": 343.4239501953125, "r": 395.7005615234375, "b": 352.6430358886719, "coord_origin": "TOPLEFT"}, "confidence": 0.945114016532898, "cells": [{"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.72901916503906, "t": 365.51513671875, "r": 547.34521, "b": 411.425048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9854235053062439, "cells": [{"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.47738647460938, "t": 423.4901123046875, "r": 545.58319, "b": 481.39813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9868801832199097, "cells": [{"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.9343719482422, "t": 493.64398193359375, "r": 528.65729, "b": 527.35919, "coord_origin": "TOPLEFT"}, "confidence": 0.9839997887611389, "cells": [{"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.85601806640625, "t": 539.41064453125, "r": 547.31055, "b": 609.6241455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9883375763893127, "cells": [{"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.7754364013672, "t": 621.3679809570312, "r": 547.23767, "b": 643.67041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.981151282787323, "cells": [{"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "picture", "bbox": {"l": 64.85054016113281, "t": 77.66917419433594, "r": 545.2755126953125, "b": 340.2884826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836614727973938, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4268188476562, "t": 754.3800048828125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9180097579956055, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}, {"label": "caption", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.25103759765625, "t": 343.4239501953125, "r": 395.7005615234375, "b": 352.6430358886719, "coord_origin": "TOPLEFT"}, "confidence": 0.945114016532898, "cells": [{"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z"}, {"label": "text", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.72901916503906, "t": 365.51513671875, "r": 547.34521, "b": 411.425048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9854235053062439, "cells": [{"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import."}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.47738647460938, "t": 423.4901123046875, "r": 545.58319, "b": 481.39813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9868801832199097, "cells": [{"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}]}, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9343719482422, "t": 493.64398193359375, "r": 528.65729, "b": 527.35919, "coord_origin": "TOPLEFT"}, "confidence": 0.9839997887611389, "cells": [{"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}]}, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85601806640625, "t": 539.41064453125, "r": 547.31055, "b": 609.6241455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9883375763893127, "cells": [{"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction."}, {"label": "text", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7754364013672, "t": 621.3679809570312, "r": 547.23767, "b": 643.67041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.981151282787323, "cells": [{"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}]}, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk."}, {"label": "picture", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.85054016113281, "t": 77.66917419433594, "r": 545.2755126953125, "b": 340.2884826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836614727973938, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 24, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.25103759765625, "t": 343.4239501953125, "r": 395.7005615234375, "b": 352.6430358886719, "coord_origin": "TOPLEFT"}, "confidence": 0.945114016532898, "cells": [{"id": 1, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z", "bbox": {"l": 64.800003, "t": 344.11798, "r": 394.03705, "b": 352.44299, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 19 Architecture for credit risk prediction by using an ML AI model on IBM Z"}, {"label": "text", "id": 2, "page_no": 24, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.72901916503906, "t": 365.51513671875, "r": 547.34521, "b": 411.425048828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9854235053062439, "cells": [{"id": 2, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to ", "bbox": {"l": 136.8, "t": 366.10873, "r": 538.54846, "b": 375.3217200000001, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "deploy and score the model. In this sample architecture, the WML Python run time leverages ", "bbox": {"l": 136.8, "t": 378.10855, "r": 547.34521, "b": 387.32153, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an ", "bbox": {"l": 136.8, "t": 390.10837, "r": 529.53766, "b": 399.32134999999994, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "integrated AI accelerator at the time of model import. ", "bbox": {"l": 136.8, "t": 402.10818000000006, "r": 372.28036, "b": 411.32117000000005, "coord_origin": "TOPLEFT"}}]}, "text": "A data scientist can leverage Watson Studio to develop and train an AI model and WML to deploy and score the model. In this sample architecture, the WML Python run time leverages the ML framework, IBM Snap Machine Learning (Snap ML), for scoring, can leverage an integrated AI accelerator at the time of model import."}, {"label": "text", "id": 3, "page_no": 24, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.47738647460938, "t": 423.4901123046875, "r": 545.58319, "b": 481.39813232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9868801832199097, "cells": [{"id": 6, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM ", "bbox": {"l": 136.8, "t": 424.12775, "r": 507.99618999999996, "b": 433.34073, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WebSphere Application Server, which can make a request to the AI inference endpoint. The ", "bbox": {"l": 136.8, "t": 436.12756, "r": 545.58319, "b": 445.34055, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "AI inference engine scores the transaction and sends the result back to the loan approval ", "bbox": {"l": 136.8, "t": 448.12738, "r": 533.52386, "b": 457.34036, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "team. Based on the results, the approval team can decide on whether to approve a loan or ", "bbox": {"l": 136.8, "t": 460.12719999999996, "r": 539.06445, "b": 469.34018, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "not, and also decide how much they can lend, timelines, and other factors. ", "bbox": {"l": 136.8, "t": 472.12701, "r": 467.96204000000006, "b": 481.34, "coord_origin": "TOPLEFT"}}]}, "text": "Then, the banking loan approval team can send a loan applicant request to the IBM WebSphere Application Server, which can make a request to the AI inference endpoint. The AI inference engine scores the transaction and sends the result back to the loan approval team. Based on the results, the approval team can decide on whether to approve a loan or not, and also decide how much they can lend, timelines, and other factors."}, {"label": "text", "id": 4, "page_no": 24, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.9343719482422, "t": 493.64398193359375, "r": 528.65729, "b": 527.35919, "coord_origin": "TOPLEFT"}, "confidence": 0.9839997887611389, "cells": [{"id": 11, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an ", "bbox": {"l": 136.8, "t": 494.14658, "r": 519.58179, "b": 503.35956, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "application server, but you also can use an IBM Open Libertyfi application server or any ", "bbox": {"l": 136.8, "t": 506.14639, "r": 528.65729, "b": 515.35938, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application server that can send RESTful API communications. ", "bbox": {"l": 136.80002, "t": 518.14621, "r": 417.46875, "b": 527.35919, "coord_origin": "TOPLEFT"}}]}, "text": "The transaction system that is shown in Figure 19 uses IBM WebSphere Liberty as an application server, but you also can use an IBM Open Libertyfi application server or any application server that can send RESTful API communications."}, {"label": "text", "id": 5, "page_no": 24, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.85601806640625, "t": 539.41064453125, "r": 547.31055, "b": 609.6241455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9883375763893127, "cells": [{"id": 14, "text": "Models are frequently developed and tested in many platforms and languages, such as ", "bbox": {"l": 136.80002, "t": 540.10602, "r": 524.06476, "b": 549.31902, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or ", "bbox": {"l": 136.80002, "t": 552.10582, "r": 547.19678, "b": 561.31882, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on ", "bbox": {"l": 136.80002, "t": 564.10562, "r": 540.16803, "b": 573.31862, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "any platform if you have enough computing power for complex models, but moving that model ", "bbox": {"l": 136.80002, "t": 576.10542, "r": 547.23364, "b": 585.3184200000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "into production requires careful testing to ensure that transactions are not delayed, especially ", "bbox": {"l": 136.80002, "t": 588.10522, "r": 547.31055, "b": 597.31822, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "if you plan to run the model within a transaction.", "bbox": {"l": 136.80002, "t": 600.1050299999999, "r": 348.49084, "b": 609.3180199999999, "coord_origin": "TOPLEFT"}}]}, "text": "Models are frequently developed and tested in many platforms and languages, such as Python, Scala, R, and Go. Models can leverage ML frameworks like scikit-learn, Snap ML, or XGBoost, or DL frameworks like TensorFlow or PyTorch. Training a model can be done on any platform if you have enough computing power for complex models, but moving that model into production requires careful testing to ensure that transactions are not delayed, especially if you plan to run the model within a transaction."}, {"label": "text", "id": 6, "page_no": 24, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.7754364013672, "t": 621.3679809570312, "r": 547.23767, "b": 643.67041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.981151282787323, "cells": [{"id": 20, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we ", "bbox": {"l": 136.80002, "t": 622.12459, "r": 547.23767, "b": 631.33759, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk. ", "bbox": {"l": 136.80002, "t": 634.12439, "r": 522.35748, "b": 643.33739, "coord_origin": "TOPLEFT"}}]}, "text": "We showed how IBM Z enable customers to use AI frameworks to detect credit risk. Now, we look at how you can leverage CP4D and TensorFlow on IBM Z to detect the credit risk."}, {"label": "picture", "id": 7, "page_no": 24, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.85054016113281, "t": 77.66917419433594, "r": 545.2755126953125, "b": 340.2884826660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9836614727973938, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 24, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4268188476562, "t": 754.3800048828125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9180097579956055, "cells": [{"id": 0, "text": "23", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "23"}]}}, {"page_no": 25, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.90467071533203, "t": 754.3189086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163190722465515, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28766632080078, "t": 754.7548828125, "r": 267.0744, "b": 764.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.95806485414505, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.43939208984375, "t": 70.69316101074219, "r": 489.57016, "b": 81.03749084472656, "coord_origin": "TOPLEFT"}, "confidence": 0.7741285562515259, "cells": [{"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.37335968017578, "t": 361.3172302246094, "r": 344.09613037109375, "b": 370.6873779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9477778077125549, "cells": [{"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.12535095214844, "t": 383.51470947265625, "r": 534.56866, "b": 429.55059814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9804685115814209, "cells": [{"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.19705200195312, "t": 441.5392150878906, "r": 547.21588, "b": 463.28055, "coord_origin": "TOPLEFT"}, "confidence": 0.9671667814254761, "cells": [{"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.6735076904297, "t": 469.95037841796875, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}, "confidence": 0.955508291721344, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.52078247070312, "t": 487.4938659667969, "r": 445.53699, "b": 497.67242431640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9564528465270996, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.63246154785156, "t": 504.0003356933594, "r": 547.32324, "b": 526.3165893554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9790537357330322, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.62271118164062, "t": 533.3601684570312, "r": 541.78046, "b": 555.25917, "coord_origin": "TOPLEFT"}, "confidence": 0.970277726650238, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.50205993652344, "t": 561.84619140625, "r": 531.80676, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9821013808250427, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "picture", "bbox": {"l": 65.03783416748047, "t": 94.93846130371094, "r": 547.6334838867188, "b": 359.3612365722656, "coord_origin": "TOPLEFT"}, "confidence": 0.984186589717865, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.90467071533203, "t": 754.3189086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163190722465515, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28766632080078, "t": 754.7548828125, "r": 267.0744, "b": 764.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.95806485414505, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43939208984375, "t": 70.69316101074219, "r": 489.57016, "b": 81.03749084472656, "coord_origin": "TOPLEFT"}, "confidence": 0.7741285562515259, "cells": [{"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z."}, {"label": "caption", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37335968017578, "t": 361.3172302246094, "r": 344.09613037109375, "b": 370.6873779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9477778077125549, "cells": [{"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z"}, {"label": "text", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.12535095214844, "t": 383.51470947265625, "r": 534.56866, "b": 429.55059814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9804685115814209, "cells": [{"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}]}, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint."}, {"label": "text", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.19705200195312, "t": 441.5392150878906, "r": 547.21588, "b": 463.28055, "coord_origin": "TOPLEFT"}, "confidence": 0.9671667814254761, "cells": [{"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some considerations for developing real-time AI models, such as credit risk assessment:"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6735076904297, "t": 469.95037841796875, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}, "confidence": 0.955508291721344, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A preference for in-platform run times of the model, such as faster execution results."}, {"label": "list_item", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52078247070312, "t": 487.4938659667969, "r": 445.53699, "b": 497.67242431640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9564528465270996, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Less overhead in the end-to-end flows might improve scoring time."}, {"label": "list_item", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.63246154785156, "t": 504.0003356933594, "r": 547.32324, "b": 526.3165893554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9790537357330322, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform."}, {"label": "list_item", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.62271118164062, "t": 533.3601684570312, "r": 541.78046, "b": 555.25917, "coord_origin": "TOPLEFT"}, "confidence": 0.970277726650238, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment."}, {"label": "list_item", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.50205993652344, "t": 561.84619140625, "r": 531.80676, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9821013808250427, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means."}, {"label": "picture", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 65.03783416748047, "t": 94.93846130371094, "r": 547.6334838867188, "b": 359.3612365722656, "coord_origin": "TOPLEFT"}, "confidence": 0.984186589717865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 25, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.43939208984375, "t": 70.69316101074219, "r": 489.57016, "b": 81.03749084472656, "coord_origin": "TOPLEFT"}, "confidence": 0.7741285562515259, "cells": [{"id": 2, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z. ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 489.57016, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 shows an architecture for predicting credit risk by using DL on IBM Z."}, {"label": "caption", "id": 3, "page_no": 25, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.37335968017578, "t": 361.3172302246094, "r": 344.09613037109375, "b": 370.6873779296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9477778077125549, "cells": [{"id": 3, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z", "bbox": {"l": 64.800003, "t": 362.05798, "r": 342.49408, "b": 370.38300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 20 Architecture for credit risk prediction by using DL on IBM Z"}, {"label": "text", "id": 4, "page_no": 25, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.12535095214844, "t": 383.51470947265625, "r": 534.56866, "b": 429.55059814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9804685115814209, "cells": [{"id": 4, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook ", "bbox": {"l": 136.8, "t": 384.04873999999995, "r": 534.56866, "b": 393.26172, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "instance and Watson Studio. Then, they can deploy the model by using WML on CP4D ", "bbox": {"l": 136.8, "t": 396.04855, "r": 524.06879, "b": 405.26154, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "running on IBM Z, which provides an endpoint. Other applications, including the ", "bbox": {"l": 136.8, "t": 408.04837, "r": 490.8303199999999, "b": 417.26135, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint.", "bbox": {"l": 136.8, "t": 420.0481899999999, "r": 516.49701, "b": 429.26117, "coord_origin": "TOPLEFT"}}]}, "text": "Data scientists can start creating and training a DL AI model by using a Jupyter Notebook instance and Watson Studio. Then, they can deploy the model by using WML on CP4D running on IBM Z, which provides an endpoint. Other applications, including the IBM WebSphere server, can produce credit risk results by using the model\u2019s endpoint."}, {"label": "text", "id": 5, "page_no": 25, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.19705200195312, "t": 441.5392150878906, "r": 547.21588, "b": 463.28055, "coord_origin": "TOPLEFT"}, "confidence": 0.9671667814254761, "cells": [{"id": 8, "text": "In summary, here are some considerations for developing real-time AI models, such as credit ", "bbox": {"l": 136.8, "t": 442.06775, "r": 547.21588, "b": 451.28073, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "risk assessment:", "bbox": {"l": 136.80002, "t": 454.06757, "r": 211.19226, "b": 463.28055, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, here are some considerations for developing real-time AI models, such as credit risk assessment:"}, {"label": "list_item", "id": 6, "page_no": 25, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.6735076904297, "t": 469.95037841796875, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}, "confidence": 0.955508291721344, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 471.19675, "r": 141.78001, "b": 479.97153, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "A preference for in-platform run times of the model, such as faster execution results.", "bbox": {"l": 151.20018, "t": 471.04736, "r": 522.90546, "b": 480.26035, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A preference for in-platform run times of the model, such as faster execution results."}, {"label": "list_item", "id": 7, "page_no": 25, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52078247070312, "t": 487.4938659667969, "r": 445.53699, "b": 497.67242431640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9564528465270996, "cells": [{"id": 12, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 488.17654, "r": 141.78001, "b": 496.95132, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Less overhead in the end-to-end flows might improve scoring time.", "bbox": {"l": 151.20018, "t": 488.02716, "r": 445.53699, "b": 497.24014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Less overhead in the end-to-end flows might improve scoring time."}, {"label": "list_item", "id": 8, "page_no": 25, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.63246154785156, "t": 504.0003356933594, "r": 547.32324, "b": 526.3165893554688, "coord_origin": "TOPLEFT"}, "confidence": 0.9790537357330322, "cells": [{"id": 14, "text": "GLYPH", "bbox": {"l": 136.80002, "t": 505.21613, "r": 141.78001, "b": 513.99091, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "If you are using models that are not deployable, CP4D offers a custom Python run time to ", "bbox": {"l": 151.20018, "t": 505.06674, "r": 547.32324, "b": 514.27972, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "build your own stack if they are not available on the platform.", "bbox": {"l": 151.2002, "t": 517.06656, "r": 419.67203, "b": 526.27954, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH If you are using models that are not deployable, CP4D offers a custom Python run time to build your own stack if they are not available on the platform."}, {"label": "list_item", "id": 9, "page_no": 25, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.62271118164062, "t": 533.3601684570312, "r": 541.78046, "b": 555.25917, "coord_origin": "TOPLEFT"}, "confidence": 0.970277726650238, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 534.19577, "r": 141.78003, "b": 542.97052, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "AI inferencing based on ML or DL models can increase the accuracy of better credit risk ", "bbox": {"l": 151.2002, "t": 534.04636, "r": 541.78046, "b": 543.25937, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "assessment.", "bbox": {"l": 151.2002, "t": 546.0461700000001, "r": 207.28795, "b": 555.25917, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH AI inferencing based on ML or DL models can increase the accuracy of better credit risk assessment."}, {"label": "list_item", "id": 10, "page_no": 25, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.50205993652344, "t": 561.84619140625, "r": 531.80676, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}, "confidence": 0.9821013808250427, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80003, "t": 563.17538, "r": 141.78003, "b": 571.9501300000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with ", "bbox": {"l": 151.2002, "t": 563.02599, "r": 531.80676, "b": 572.23898, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "regular Integrated Facility for Linux (IFLs) provides an execution speed for your ", "bbox": {"l": 151.2002, "t": 575.02579, "r": 503.30713000000003, "b": 584.23878, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "transactions that cannot be achieved by other means.", "bbox": {"l": 151.1992, "t": 587.02559, "r": 388.4444, "b": 596.2385899999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Using IBM z16 and on-chip AI acceleration with the Telum chip that is embedded with regular Integrated Facility for Linux (IFLs) provides an execution speed for your transactions that cannot be achieved by other means."}, {"label": "picture", "id": 11, "page_no": 25, "cluster": {"id": 11, "label": "picture", "bbox": {"l": 65.03783416748047, "t": 94.93846130371094, "r": 547.6334838867188, "b": 359.3612365722656, "coord_origin": "TOPLEFT"}, "confidence": 0.984186589717865, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 25, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.90467071533203, "t": 754.3189086914062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163190722465515, "cells": [{"id": 0, "text": "24 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "24"}, {"label": "page_footer", "id": 1, "page_no": 25, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28766632080078, "t": 754.7548828125, "r": 267.0744, "b": 764.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.95806485414505, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 26, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.565673828125, "t": 754.3200073242188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160840511322021, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 64.79078674316406, "t": 70.07665252685547, "r": 338.53796, "b": 86.30354309082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9623725414276123, "cells": [{"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.91648864746094, "t": 102.71073150634766, "r": 539.56549, "b": 161.0622100830078, "coord_origin": "TOPLEFT"}, "confidence": 0.9869711399078369, "cells": [{"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.3849868774414, "t": 180.6492462158203, "r": 179.53229, "b": 193.6511993408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9618170857429504, "cells": [{"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.17025756835938, "t": 206.79721069335938, "r": 538.43591, "b": 228.78622436523438, "coord_origin": "TOPLEFT"}, "confidence": 0.963640034198761, "cells": [{"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.63189697265625, "t": 248.53985595703125, "r": 266.07788, "b": 261.7796936035156, "coord_origin": "TOPLEFT"}, "confidence": 0.9650317430496216, "cells": [{"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.968505859375, "t": 274.7626037597656, "r": 545.69684, "b": 321.0018005371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9876250624656677, "cells": [{"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.97213745117188, "t": 332.8114318847656, "r": 544.66211, "b": 402.8791809082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9885076284408569, "cells": [{"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.8656463623047, "t": 414.916259765625, "r": 543.34729, "b": 472.69888, "coord_origin": "TOPLEFT"}, "confidence": 0.9878571033477783, "cells": [{"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.92105102539062, "t": 484.82086181640625, "r": 547.23358, "b": 530.9995727539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9847769737243652, "cells": [{"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.565673828125, "t": 754.3200073242188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160840511322021, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}, {"label": "section_header", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.79078674316406, "t": 70.07665252685547, "r": 338.53796, "b": 86.30354309082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9623725414276123, "cells": [{"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 3: Clearing and settlement"}, {"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91648864746094, "t": 102.71073150634766, "r": 539.56549, "b": 161.0622100830078, "coord_origin": "TOPLEFT"}, "confidence": 0.9869711399078369, "cells": [{"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day."}, {"label": "section_header", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3849868774414, "t": 180.6492462158203, "r": 179.53229, "b": 193.6511993408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9618170857429504, "cells": [{"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenge"}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.17025756835938, "t": 206.79721069335938, "r": 538.43591, "b": 228.78622436523438, "coord_origin": "TOPLEFT"}, "confidence": 0.963640034198761, "cells": [{"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs."}, {"label": "section_header", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.63189697265625, "t": 248.53985595703125, "r": 266.07788, "b": 261.7796936035156, "coord_origin": "TOPLEFT"}, "confidence": 0.9650317430496216, "cells": [{"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlement solution"}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.968505859375, "t": 274.7626037597656, "r": 545.69684, "b": 321.0018005371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9876250624656677, "cells": [{"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.97213745117188, "t": 332.8114318847656, "r": 544.66211, "b": 402.8791809082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9885076284408569, "cells": [{"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions."}, {"label": "text", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8656463623047, "t": 414.916259765625, "r": 543.34729, "b": 472.69888, "coord_origin": "TOPLEFT"}, "confidence": 0.9878571033477783, "cells": [{"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}]}, "text": "The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds."}, {"label": "text", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.92105102539062, "t": 484.82086181640625, "r": 547.23358, "b": 530.9995727539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9847769737243652, "cells": [{"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}]}, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint."}], "body": [{"label": "section_header", "id": 1, "page_no": 26, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.79078674316406, "t": 70.07665252685547, "r": 338.53796, "b": 86.30354309082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9623725414276123, "cells": [{"id": 1, "text": "Use case 3: Clearing and settlement", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 338.53796, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 3: Clearing and settlement"}, {"label": "text", "id": 2, "page_no": 26, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91648864746094, "t": 102.71073150634766, "r": 539.56549, "b": 161.0622100830078, "coord_origin": "TOPLEFT"}, "confidence": 0.9869711399078369, "cells": [{"id": 2, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire ", "bbox": {"l": 136.8, "t": 103.48870999999997, "r": 535.67212, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transfers by using secure interbank payments networks that can clear or settle numerous ", "bbox": {"l": 136.80099, "t": 115.48852999999997, "r": 532.35547, "b": 124.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "transactions. When an individual or business entity initiates a wire transfer, clearing begins ", "bbox": {"l": 136.80099, "t": 127.48834000000011, "r": 539.56549, "b": 136.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "the fund delivery process. Banks can begin the settlement phase either immediately after ", "bbox": {"l": 136.80099, "t": 139.48816, "r": 532.37543, "b": 148.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "clearing takes place or later, mostly at the end of the business day.", "bbox": {"l": 136.80099, "t": 151.48798, "r": 432.38098, "b": 160.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlements involve banks or financial institutions sending and receiving wire transfers by using secure interbank payments networks that can clear or settle numerous transactions. When an individual or business entity initiates a wire transfer, clearing begins the fund delivery process. Banks can begin the settlement phase either immediately after clearing takes place or later, mostly at the end of the business day."}, {"label": "section_header", "id": 3, "page_no": 26, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3849868774414, "t": 180.6492462158203, "r": 179.53229, "b": 193.6511993408203, "coord_origin": "TOPLEFT"}, "confidence": 0.9618170857429504, "cells": [{"id": 7, "text": "Industry challenge", "bbox": {"l": 64.800003, "t": 181.37469, "r": 179.53229, "b": 193.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenge"}, {"label": "text", "id": 4, "page_no": 26, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.17025756835938, "t": 206.79721069335938, "r": 538.43591, "b": 228.78622436523438, "coord_origin": "TOPLEFT"}, "confidence": 0.963640034198761, "cells": [{"id": 8, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. ", "bbox": {"l": 136.8, "t": 207.52868999999998, "r": 534.60443, "b": 216.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Moreover, these transactions can lead to regulatory violations and extra compliance costs. ", "bbox": {"l": 136.8, "t": 219.5285, "r": 538.43591, "b": 228.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Banks and financial institutions must deal with high-risk transactions that can lead to loss. Moreover, these transactions can lead to regulatory violations and extra compliance costs."}, {"label": "section_header", "id": 5, "page_no": 26, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.63189697265625, "t": 248.53985595703125, "r": 266.07788, "b": 261.7796936035156, "coord_origin": "TOPLEFT"}, "confidence": 0.9650317430496216, "cells": [{"id": 10, "text": "Clearing and settlement solution", "bbox": {"l": 64.800003, "t": 249.35468000000003, "r": 266.07788, "b": 261.34271, "coord_origin": "TOPLEFT"}}]}, "text": "Clearing and settlement solution"}, {"label": "text", "id": 6, "page_no": 26, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.968505859375, "t": 274.7626037597656, "r": 545.69684, "b": 321.0018005371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9876250624656677, "cells": [{"id": 11, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose ", "bbox": {"l": 136.8, "t": 275.50873, "r": 515.18536, "b": 284.72171, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "solutions for a more efficient settlement process. The expedited remediation of questionable ", "bbox": {"l": 136.8, "t": 287.50854, "r": 545.69684, "b": 296.72153, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "transactions can prevent costly consequences, regulatory violations, and negative business ", "bbox": {"l": 136.8, "t": 299.50836, "r": 543.44592, "b": 308.72134, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "impacts.", "bbox": {"l": 136.8, "t": 311.5081799999999, "r": 174.01752, "b": 320.72116, "coord_origin": "TOPLEFT"}}]}, "text": "Use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts."}, {"label": "text", "id": 7, "page_no": 26, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.97213745117188, "t": 332.8114318847656, "r": 544.66211, "b": 402.8791809082031, "coord_origin": "TOPLEFT"}, "confidence": 0.9885076284408569, "cells": [{"id": 15, "text": "In financial institutions, finding which financial transactions are legitimate and which ", "bbox": {"l": 136.8, "t": 333.52774, "r": 507.3628499999999, "b": 342.74072, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "transactions are fraudulent is of paramount importance. In this section, we go through a use ", "bbox": {"l": 136.80002, "t": 345.52756, "r": 544.66211, "b": 354.74053999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "case where we use AI to predict which trades or transactions have high risk exposures, and ", "bbox": {"l": 136.80002, "t": 357.5273700000001, "r": 544.02649, "b": 366.74036000000007, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "propose solutions for a more efficient settlement process. The expedited remediation of ", "bbox": {"l": 136.80003, "t": 369.52719, "r": 525.13257, "b": 378.74017, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "questionable transactions can prevent costly consequences, regulatory violations, and ", "bbox": {"l": 136.80003, "t": 381.52701, "r": 520.08868, "b": 390.7399899999999, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "negative business impacts to financial institutions.", "bbox": {"l": 136.80002, "t": 393.52682000000004, "r": 357.32925, "b": 402.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In financial institutions, finding which financial transactions are legitimate and which transactions are fraudulent is of paramount importance. In this section, we go through a use case where we use AI to predict which trades or transactions have high risk exposures, and propose solutions for a more efficient settlement process. The expedited remediation of questionable transactions can prevent costly consequences, regulatory violations, and negative business impacts to financial institutions."}, {"label": "text", "id": 8, "page_no": 26, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.8656463623047, "t": 414.916259765625, "r": 543.34729, "b": 472.69888, "coord_origin": "TOPLEFT"}, "confidence": 0.9878571033477783, "cells": [{"id": 21, "text": "The goal is to predict in real time whether the transaction being processed might be a ", "bbox": {"l": 136.80002, "t": 415.48663, "r": 516.24792, "b": 424.69962, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "fraudulent transaction or not. To achieve this goal, we build an ML model that can do this ", "bbox": {"l": 136.80002, "t": 427.48645, "r": 531.83636, "b": 436.69943, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "prediction for the financial institution. Because there would be many transactions being ", "bbox": {"l": 136.80002, "t": 439.48627, "r": 522.39142, "b": 448.69924999999995, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "processed at any point by the financial institution, it is important to perform this prediction of ", "bbox": {"l": 136.80002, "t": 451.4860800000001, "r": 543.34729, "b": 460.69907000000006, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "fraudulent transactions in near-real time in a few milliseconds.", "bbox": {"l": 136.80002, "t": 463.4859, "r": 410.05762, "b": 472.69888, "coord_origin": "TOPLEFT"}}]}, "text": "The goal is to predict in real time whether the transaction being processed might be a fraudulent transaction or not. To achieve this goal, we build an ML model that can do this prediction for the financial institution. Because there would be many transactions being processed at any point by the financial institution, it is important to perform this prediction of fraudulent transactions in near-real time in a few milliseconds."}, {"label": "text", "id": 9, "page_no": 26, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.92105102539062, "t": 484.82086181640625, "r": 547.23358, "b": 530.9995727539062, "coord_origin": "TOPLEFT"}, "confidence": 0.9847769737243652, "cells": [{"id": 26, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the ", "bbox": {"l": 136.79903, "t": 485.50546, "r": 547.16302, "b": 494.71844, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "historical data and predicts the fraudulent transactions. CP4D on IBM Z and ", "bbox": {"l": 136.79903, "t": 497.50528, "r": 474.12341, "b": 506.71826, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, ", "bbox": {"l": 136.79903, "t": 509.5051, "r": 547.23358, "b": 518.71808, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "and coming up with a serving endpoint.", "bbox": {"l": 136.79903, "t": 521.50491, "r": 310.2305, "b": 530.7179, "coord_origin": "TOPLEFT"}}]}, "text": "One possible solution is to build and train a TensorFlow based DL model that learns from the historical data and predicts the fraudulent transactions. CP4D on IBM Z and IBM LinuxONE is a suitable product where this task can be achieved and the model deployed, and coming up with a serving endpoint."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 26, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.565673828125, "t": 754.3200073242188, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160840511322021, "cells": [{"id": 0, "text": "25", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "25"}]}}, {"page_no": 27, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.89773941040039, "t": 754.3994140625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9172815680503845, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.21942138671875, "t": 754.7265625, "r": 267.0744, "b": 764.1185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9594259858131409, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.25498962402344, "t": 70.68953704833984, "r": 537.35229, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8348162174224854, "cells": [{"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17871856689453, "t": 314.66278076171875, "r": 459.9880999999999, "b": 324.0010986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9384534955024719, "cells": [{"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.43458557128906, "t": 336.796630859375, "r": 353.37115, "b": 346.91217041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.8770962953567505, "cells": [{"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 136.8, "t": 354.0919494628906, "r": 524.74097, "b": 376.04498291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9748183488845825, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.05679321289062, "t": 382.5753173828125, "r": 542.98376, "b": 404.78073, "coord_origin": "TOPLEFT"}, "confidence": 0.9745410680770874, "cells": [{"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 136.27484130859375, "t": 411.98052978515625, "r": 545.74249, "b": 446.5281066894531, "coord_origin": "TOPLEFT"}, "confidence": 0.9805867671966553, "cells": [{"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.03822326660156, "t": 452.6906433105469, "r": 468.55477999999994, "b": 463.2380676269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9558380842208862, "cells": [{"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 136.39476013183594, "t": 470.06390380859375, "r": 417.28256, "b": 480.09649658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9519129395484924, "cells": [{"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 150.49728393554688, "t": 486.6347961425781, "r": 460.12939, "b": 496.88531494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9560188055038452, "cells": [{"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 150.5271759033203, "t": 503.9242248535156, "r": 251.68962, "b": 514.2030639648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9418551921844482, "cells": [{"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 150.59584045410156, "t": 520.1580810546875, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}, "confidence": 0.9270838499069214, "cells": [{"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 136.3202667236328, "t": 537.8785400390625, "r": 418.50659, "b": 548.1995849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9545198678970337, "cells": [{"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 136.2103271484375, "t": 554.7404174804688, "r": 545.68579, "b": 577.0736083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9779444336891174, "cells": [{"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 136.31875610351562, "t": 583.98193359375, "r": 510.0397, "b": 606.4796752929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9764688014984131, "cells": [{"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 136.13897705078125, "t": 612.574951171875, "r": 270.12857, "b": 623.031005859375, "coord_origin": "TOPLEFT"}, "confidence": 0.946601152420044, "cells": [{"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 150.43360900878906, "t": 630.0905151367188, "r": 374.55621, "b": 640.5849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9528450965881348, "cells": [{"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 150.56649780273438, "t": 646.7203369140625, "r": 492.32922, "b": 656.7977294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529765248298645, "cells": [{"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 136.80202, "t": 664.13916015625, "r": 471.90997, "b": 674.3135986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9405826330184937, "cells": [{"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "list_item", "bbox": {"l": 136.80202, "t": 680.8577880859375, "r": 546.27057, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9651632308959961, "cells": [{"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 136.71322631835938, "t": 709.8871459960938, "r": 531.22009, "b": 732.1051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9538568258285522, "cells": [{"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "picture", "bbox": {"l": 64.01190948486328, "t": 107.36324310302734, "r": 542.310546875, "b": 311.54437255859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9792013168334961, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.89773941040039, "t": 754.3994140625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9172815680503845, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21942138671875, "t": 754.7265625, "r": 267.0744, "b": 764.1185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9594259858131409, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.25498962402344, "t": 70.68953704833984, "r": 537.35229, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8348162174224854, "cells": [{"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE."}, {"label": "caption", "id": 3, "page_no": 27, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17871856689453, "t": 314.66278076171875, "r": 459.9880999999999, "b": 324.0010986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9384534955024719, "cells": [{"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 27, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.43458557128906, "t": 336.796630859375, "r": 353.37115, "b": 346.91217041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.8770962953567505, "cells": [{"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the steps of the high-level process flow:"}, {"label": "list_item", "id": 5, "page_no": 27, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.8, "t": 354.0919494628906, "r": 524.74097, "b": 376.04498291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9748183488845825, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building."}, {"label": "list_item", "id": 6, "page_no": 27, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.05679321289062, "t": 382.5753173828125, "r": 542.98376, "b": 404.78073, "coord_origin": "TOPLEFT"}, "confidence": 0.9745410680770874, "cells": [{"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}]}, "text": "2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D."}, {"label": "list_item", "id": 7, "page_no": 27, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.27484130859375, "t": 411.98052978515625, "r": 545.74249, "b": 446.5281066894531, "coord_origin": "TOPLEFT"}, "confidence": 0.9805867671966553, "cells": [{"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}]}, "text": "3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository."}, {"label": "list_item", "id": 8, "page_no": 27, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.03822326660156, "t": 452.6906433105469, "r": 468.55477999999994, "b": 463.2380676269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9558380842208862, "cells": [{"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}]}, "text": "4. Deploy the saved model into a deployment space for batch deployment."}, {"label": "list_item", "id": 9, "page_no": 27, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.39476013183594, "t": 470.06390380859375, "r": 417.28256, "b": 480.09649658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9519129395484924, "cells": [{"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create a batch deployment by using any of these interfaces:"}, {"label": "list_item", "id": 10, "page_no": 27, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 150.49728393554688, "t": 486.6347961425781, "r": 460.12939, "b": 496.88531494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9560188055038452, "cells": [{"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}]}, "text": "a. Watson Studio user interface from an Analytics deployment space."}, {"label": "list_item", "id": 11, "page_no": 27, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.5271759033203, "t": 503.9242248535156, "r": 251.68962, "b": 514.2030639648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9418551921844482, "cells": [{"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}]}, "text": "b. WML Python client."}, {"label": "list_item", "id": 12, "page_no": 27, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.59584045410156, "t": 520.1580810546875, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}, "confidence": 0.9270838499069214, "cells": [{"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}]}, "text": "c. WML REST APIs."}, {"label": "list_item", "id": 13, "page_no": 27, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 136.3202667236328, "t": 537.8785400390625, "r": 418.50659, "b": 548.1995849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9545198678970337, "cells": [{"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}]}, "text": "6. A hardware configuration can be chosen for the deployment."}, {"label": "list_item", "id": 14, "page_no": 27, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.2103271484375, "t": 554.7404174804688, "r": 545.68579, "b": 577.0736083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9779444336891174, "cells": [{"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}]}, "text": "7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination."}, {"label": "list_item", "id": 15, "page_no": 27, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 136.31875610351562, "t": 583.98193359375, "r": 510.0397, "b": 606.4796752929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9764688014984131, "cells": [{"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. One way to run batch deployment to predict or score is to create and run a batch deployment job."}, {"label": "list_item", "id": 16, "page_no": 27, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.13897705078125, "t": 612.574951171875, "r": 270.12857, "b": 623.031005859375, "coord_origin": "TOPLEFT"}, "confidence": 0.946601152420044, "cells": [{"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}]}, "text": "9. Provide an input data type:"}, {"label": "list_item", "id": 17, "page_no": 27, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 150.43360900878906, "t": 630.0905151367188, "r": 374.55621, "b": 640.5849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9528450965881348, "cells": [{"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}]}, "text": "a. Inline data for entering a JSON format payload."}, {"label": "list_item", "id": 18, "page_no": 27, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 150.56649780273438, "t": 646.7203369140625, "r": 492.32922, "b": 656.7977294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529765248298645, "cells": [{"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}]}, "text": "b. Select Data asset , click Select data source , and then specify your asset."}, {"label": "list_item", "id": 19, "page_no": 27, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 136.80202, "t": 664.13916015625, "r": 471.90997, "b": 674.3135986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9405826330184937, "cells": [{"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}]}, "text": "10.The output data type can be a new output file or a connected data asset."}, {"label": "list_item", "id": 20, "page_no": 27, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 136.80202, "t": 680.8577880859375, "r": 546.27057, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9651632308959961, "cells": [{"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}]}, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run."}, {"label": "list_item", "id": 21, "page_no": 27, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 136.71322631835938, "t": 709.8871459960938, "r": 531.22009, "b": 732.1051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9538568258285522, "cells": [{"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}]}, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL."}, {"label": "picture", "id": 22, "page_no": 27, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 64.01190948486328, "t": 107.36324310302734, "r": 542.310546875, "b": 311.54437255859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9792013168334961, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 27, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.25498962402344, "t": 70.68953704833984, "r": 537.35229, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}, "confidence": 0.8348162174224854, "cells": [{"id": 2, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 537.35229, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transactions that uses CP4D on IBM Z and IBM LinuxONE. ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 400.63745, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 provides a high-level diagram of a clearing and settlement use case for financial transactions that uses CP4D on IBM Z and IBM LinuxONE."}, {"label": "caption", "id": 3, "page_no": 27, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17871856689453, "t": 314.66278076171875, "r": 459.9880999999999, "b": 324.0010986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9384534955024719, "cells": [{"id": 4, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data ", "bbox": {"l": 64.800003, "t": 315.55798, "r": 459.9880999999999, "b": 323.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 21 Clearing and settlement use case for financial transactions by using Cloud Pak for Data"}, {"label": "text", "id": 4, "page_no": 27, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.43458557128906, "t": 336.796630859375, "r": 353.37115, "b": 346.91217041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.8770962953567505, "cells": [{"id": 5, "text": "Here are the steps of the high-level process flow:", "bbox": {"l": 136.8, "t": 337.54873999999995, "r": 353.37115, "b": 346.76172, "coord_origin": "TOPLEFT"}}]}, "text": "Here are the steps of the high-level process flow:"}, {"label": "list_item", "id": 5, "page_no": 27, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 136.8, "t": 354.0919494628906, "r": 524.74097, "b": 376.04498291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9748183488845825, "cells": [{"id": 6, "text": "1.", "bbox": {"l": 136.8, "t": 354.52853, "r": 145.26041, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Create a connection to a database (for example, an IBM Db2fi database) where the ", "bbox": {"l": 148.08052, "t": 354.52853, "r": 524.74097, "b": 363.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "historical data will be used for ML model building.", "bbox": {"l": 151.20016, "t": 366.52835, "r": 369.07016, "b": 375.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "1. Create a connection to a database (for example, an IBM Db2fi database) where the historical data will be used for ML model building."}, {"label": "list_item", "id": 6, "page_no": 27, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.05679321289062, "t": 382.5753173828125, "r": 542.98376, "b": 404.78073, "coord_origin": "TOPLEFT"}, "confidence": 0.9745410680770874, "cells": [{"id": 9, "text": "2.", "bbox": {"l": 136.80099, "t": 383.56793, "r": 145.20665, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Read the data from the database and prepare the data for AI by using the Data Refinery ", "bbox": {"l": 148.00854, "t": 383.56793, "r": 542.98376, "b": 392.78091, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "tool in CP4D.", "bbox": {"l": 151.20116, "t": 395.56775, "r": 210.1524, "b": 404.78073, "coord_origin": "TOPLEFT"}}]}, "text": "2. Read the data from the database and prepare the data for AI by using the Data Refinery tool in CP4D."}, {"label": "list_item", "id": 7, "page_no": 27, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 136.27484130859375, "t": 411.98052978515625, "r": 545.74249, "b": 446.5281066894531, "coord_origin": "TOPLEFT"}, "confidence": 0.9805867671966553, "cells": [{"id": 12, "text": "3.", "bbox": {"l": 136.80099, "t": 412.54755, "r": 145.20639, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component ", "bbox": {"l": 148.00818, "t": 412.54755, "r": 545.74249, "b": 421.76053, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "in CP4D helps us build and train the AI model. The trained model can be saved into a ", "bbox": {"l": 151.20116, "t": 424.54736, "r": 531.24298, "b": 433.76035, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WML repository.", "bbox": {"l": 151.20116, "t": 436.54717999999997, "r": 223.98885, "b": 445.76016, "coord_origin": "TOPLEFT"}}]}, "text": "3. A Jupyter Notebook or JupyterLab IDE that is provided by the Watson Studio component in CP4D helps us build and train the AI model. The trained model can be saved into a WML repository."}, {"label": "list_item", "id": 8, "page_no": 27, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.03822326660156, "t": 452.6906433105469, "r": 468.55477999999994, "b": 463.2380676269531, "coord_origin": "TOPLEFT"}, "confidence": 0.9558380842208862, "cells": [{"id": 16, "text": "4.", "bbox": {"l": 136.80099, "t": 453.52698000000004, "r": 145.2236, "b": 462.73996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Deploy the saved model into a deployment space for batch deployment.", "bbox": {"l": 148.03114, "t": 453.52698000000004, "r": 468.55477999999994, "b": 462.73996, "coord_origin": "TOPLEFT"}}]}, "text": "4. Deploy the saved model into a deployment space for batch deployment."}, {"label": "list_item", "id": 9, "page_no": 27, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 136.39476013183594, "t": 470.06390380859375, "r": 417.28256, "b": 480.09649658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9519129395484924, "cells": [{"id": 18, "text": "5.", "bbox": {"l": 136.80099, "t": 470.56656, "r": 145.23456, "b": 479.77954, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Create a batch deployment by using any of these interfaces:", "bbox": {"l": 148.04575, "t": 470.56656, "r": 417.28256, "b": 479.77954, "coord_origin": "TOPLEFT"}}]}, "text": "5. Create a batch deployment by using any of these interfaces:"}, {"label": "list_item", "id": 10, "page_no": 27, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 150.49728393554688, "t": 486.6347961425781, "r": 460.12939, "b": 496.88531494140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9560188055038452, "cells": [{"id": 20, "text": "a.", "bbox": {"l": 151.20116, "t": 487.54636, "r": 159.6295, "b": 496.75934, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Watson Studio user interface from an Analytics deployment space.", "bbox": {"l": 162.43896, "t": 487.54636, "r": 460.12939, "b": 496.75934, "coord_origin": "TOPLEFT"}}]}, "text": "a. Watson Studio user interface from an Analytics deployment space."}, {"label": "list_item", "id": 11, "page_no": 27, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 150.5271759033203, "t": 503.9242248535156, "r": 251.68962, "b": 514.2030639648438, "coord_origin": "TOPLEFT"}, "confidence": 0.9418551921844482, "cells": [{"id": 22, "text": "b.", "bbox": {"l": 151.20116, "t": 504.52615, "r": 159.81799, "b": 513.73914, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "WML Python client.", "bbox": {"l": 162.69028, "t": 504.52615, "r": 251.68962, "b": 513.73914, "coord_origin": "TOPLEFT"}}]}, "text": "b. WML Python client."}, {"label": "list_item", "id": 12, "page_no": 27, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 150.59584045410156, "t": 520.1580810546875, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}, "confidence": 0.9270838499069214, "cells": [{"id": 24, "text": "c.", "bbox": {"l": 151.20116, "t": 521.56573, "r": 159.30391, "b": 530.77872, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WML REST APIs.", "bbox": {"l": 162.19923, "t": 521.56573, "r": 244.95566, "b": 530.77872, "coord_origin": "TOPLEFT"}}]}, "text": "c. WML REST APIs."}, {"label": "list_item", "id": 13, "page_no": 27, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 136.3202667236328, "t": 537.8785400390625, "r": 418.50659, "b": 548.1995849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9545198678970337, "cells": [{"id": 26, "text": "6.", "bbox": {"l": 136.80099, "t": 538.5455499999999, "r": 145.23759, "b": 547.75854, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "A hardware configuration can be chosen for the deployment.", "bbox": {"l": 148.04979, "t": 538.5455499999999, "r": 418.50659, "b": 547.75854, "coord_origin": "TOPLEFT"}}]}, "text": "6. A hardware configuration can be chosen for the deployment."}, {"label": "list_item", "id": 14, "page_no": 27, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 136.2103271484375, "t": 554.7404174804688, "r": 545.68579, "b": 577.0736083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9779444336891174, "cells": [{"id": 28, "text": "7.", "bbox": {"l": 136.80099, "t": 555.52536, "r": 145.2048, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "A batch deployment processes input data from a file, data connection, or connected data ", "bbox": {"l": 148.00607, "t": 555.52536, "r": 545.68579, "b": 564.7383600000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "in a storage bucket, and writes the output to a selected destination.", "bbox": {"l": 151.20117, "t": 567.52516, "r": 447.42055999999997, "b": 576.73816, "coord_origin": "TOPLEFT"}}]}, "text": "7. A batch deployment processes input data from a file, data connection, or connected data in a storage bucket, and writes the output to a selected destination."}, {"label": "list_item", "id": 15, "page_no": 27, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 136.31875610351562, "t": 583.98193359375, "r": 510.0397, "b": 606.4796752929688, "coord_origin": "TOPLEFT"}, "confidence": 0.9764688014984131, "cells": [{"id": 31, "text": "8.", "bbox": {"l": 136.80101, "t": 584.56473, "r": 145.2097, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "One way to run batch deployment to predict or score is to create and run a batch ", "bbox": {"l": 148.01257, "t": 584.56473, "r": 510.0397, "b": 593.77773, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "deployment job.", "bbox": {"l": 151.20117, "t": 596.56453, "r": 221.75086999999996, "b": 605.7775300000001, "coord_origin": "TOPLEFT"}}]}, "text": "8. One way to run batch deployment to predict or score is to create and run a batch deployment job."}, {"label": "list_item", "id": 16, "page_no": 27, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 136.13897705078125, "t": 612.574951171875, "r": 270.12857, "b": 623.031005859375, "coord_origin": "TOPLEFT"}, "confidence": 0.946601152420044, "cells": [{"id": 34, "text": "9.", "bbox": {"l": 136.80101, "t": 613.54434, "r": 145.34923, "b": 622.75734, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Provide an input data type:", "bbox": {"l": 148.19862, "t": 613.54434, "r": 270.12857, "b": 622.75734, "coord_origin": "TOPLEFT"}}]}, "text": "9. Provide an input data type:"}, {"label": "list_item", "id": 17, "page_no": 27, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 150.43360900878906, "t": 630.0905151367188, "r": 374.55621, "b": 640.5849609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9528450965881348, "cells": [{"id": 36, "text": "a.", "bbox": {"l": 151.20117, "t": 630.52415, "r": 159.66412, "b": 639.73715, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Inline data for entering a JSON format payload.", "bbox": {"l": 162.48511, "t": 630.52415, "r": 374.55621, "b": 639.73715, "coord_origin": "TOPLEFT"}}]}, "text": "a. Inline data for entering a JSON format payload."}, {"label": "list_item", "id": 18, "page_no": 27, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 150.56649780273438, "t": 646.7203369140625, "r": 492.32922, "b": 656.7977294921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529765248298645, "cells": [{"id": 38, "text": "b.", "bbox": {"l": 151.20117, "t": 647.56372, "r": 160.18944, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Select ", "bbox": {"l": 163.18553, "t": 647.56372, "r": 196.13173, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Data asset", "bbox": {"l": 196.14069, "t": 647.56372, "r": 246.17972, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": ", click ", "bbox": {"l": 246.12096, "t": 647.56372, "r": 273.91135, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Select data source", "bbox": {"l": 273.9014, "t": 647.56372, "r": 362.20071, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": ", and then specify your asset.", "bbox": {"l": 362.22171, "t": 647.56372, "r": 492.32922, "b": 656.7767200000001, "coord_origin": "TOPLEFT"}}]}, "text": "b. Select Data asset , click Select data source , and then specify your asset."}, {"label": "list_item", "id": 19, "page_no": 27, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 136.80202, "t": 664.13916015625, "r": 471.90997, "b": 674.3135986328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9405826330184937, "cells": [{"id": 44, "text": "10.The output data type can be a new output file or a connected data asset.", "bbox": {"l": 136.80202, "t": 664.54353, "r": 471.90997, "b": 673.75653, "coord_origin": "TOPLEFT"}}]}, "text": "10.The output data type can be a new output file or a connected data asset."}, {"label": "list_item", "id": 20, "page_no": 27, "cluster": {"id": 20, "label": "list_item", "bbox": {"l": 136.80202, "t": 680.8577880859375, "r": 546.27057, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9651632308959961, "cells": [{"id": 45, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can ", "bbox": {"l": 136.80202, "t": 681.52334, "r": 546.27057, "b": 690.73634, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "be run.", "bbox": {"l": 151.20218, "t": 693.523148, "r": 182.2774, "b": 702.7361530000001, "coord_origin": "TOPLEFT"}}]}, "text": "11.A Kubernetes admin can change the maximum number of concurrent batch jobs that can be run."}, {"label": "list_item", "id": 21, "page_no": 27, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 136.71322631835938, "t": 709.8871459960938, "r": 531.22009, "b": 732.1051025390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9538568258285522, "cells": [{"id": 47, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment ", "bbox": {"l": 136.80202, "t": 710.562714, "r": 531.22009, "b": 719.775719, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "endpoint URL.", "bbox": {"l": 151.20218, "t": 722.562523, "r": 215.05075000000002, "b": 731.775528, "coord_origin": "TOPLEFT"}}]}, "text": "12.Get the deployment endpoint URL. For more information, see Getting the deployment endpoint URL."}, {"label": "picture", "id": 22, "page_no": 27, "cluster": {"id": 22, "label": "picture", "bbox": {"l": 64.01190948486328, "t": 107.36324310302734, "r": 542.310546875, "b": 311.54437255859375, "coord_origin": "TOPLEFT"}, "confidence": 0.9792013168334961, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 27, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.89773941040039, "t": 754.3994140625, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9172815680503845, "cells": [{"id": 0, "text": "26 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "26"}, {"label": "page_footer", "id": 1, "page_no": 27, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21942138671875, "t": 754.7265625, "r": 267.0744, "b": 764.1185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9594259858131409, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 28, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.5003051757812, "t": 754.198486328125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9135285019874573, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "section_header", "bbox": {"l": 64.4560546875, "t": 70.49922180175781, "r": 124.18352508544922, "b": 83.58580017089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9539816975593567, "cells": [{"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.6417999267578, "t": 96.69087219238281, "r": 532.96588, "b": 131.15280151367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9826104044914246, "cells": [{"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.6079559326172, "t": 137.87742614746094, "r": 374.51035, "b": 148.40980529785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9520530700683594, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.4309844970703, "t": 154.66566467285156, "r": 508.50623, "b": 165.0898895263672, "coord_origin": "TOPLEFT"}, "confidence": 0.9581583142280579, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.6011199951172, "t": 171.30601501464844, "r": 533.53381, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9762634634971619, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "section_header", "bbox": {"l": 64.69216918945312, "t": 220.6259307861328, "r": 482.53705, "b": 237.16929626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9682862162590027, "cells": [{"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.27346801757812, "t": 253.316650390625, "r": 545.72473, "b": 275.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9791228771209717, "cells": [{"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.0217742919922, "t": 287.9417419433594, "r": 547.27057, "b": 333.9791259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871094226837158, "cells": [{"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.3080596923828, "t": 345.2879943847656, "r": 525.16229, "b": 367.7480773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9762709140777588, "cells": [{"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 64.39527893066406, "t": 621.308349609375, "r": 244.8438262939453, "b": 630.6195678710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9493957161903381, "cells": [{"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.10833740234375, "t": 643.45068359375, "r": 547.25574, "b": 725.360573, "coord_origin": "TOPLEFT"}, "confidence": 0.9856446981430054, "cells": [{"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "picture", "bbox": {"l": 63.826560974121094, "t": 381.7112731933594, "r": 539.9069213867188, "b": 618.51806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9848758578300476, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5003051757812, "t": 754.198486328125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9135285019874573, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "section_header", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.4560546875, "t": 70.49922180175781, "r": 124.18352508544922, "b": 83.58580017089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9539816975593567, "cells": [{"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6417999267578, "t": 96.69087219238281, "r": 532.96588, "b": 131.15280151367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9826104044914246, "cells": [{"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages:"}, {"label": "list_item", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6079559326172, "t": 137.87742614746094, "r": 374.51035, "b": 148.40980529785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9520530700683594, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No Impact to SLAs and the batch process window."}, {"label": "list_item", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.4309844970703, "t": 154.66566467285156, "r": 508.50623, "b": 165.0898895263672, "coord_origin": "TOPLEFT"}, "confidence": 0.9581583142280579, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs."}, {"label": "list_item", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6011199951172, "t": 171.30601501464844, "r": 533.53381, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9762634634971619, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring."}, {"label": "section_header", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.69216918945312, "t": 220.6259307861328, "r": 482.53705, "b": 237.16929626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9682862162590027, "cells": [{"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 4: Remaining Useful Life of an aircraft engine"}, {"label": "text", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.27346801757812, "t": 253.316650390625, "r": 545.72473, "b": 275.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9791228771209717, "cells": [{"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems."}, {"label": "text", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0217742919922, "t": 287.9417419433594, "r": 547.27057, "b": 333.9791259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871094226837158, "cells": [{"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}]}, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime."}, {"label": "text", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.3080596923828, "t": 345.2879943847656, "r": 525.16229, "b": 367.7480773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9762709140777588, "cells": [{"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z."}, {"label": "caption", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.39527893066406, "t": 621.308349609375, "r": 244.8438262939453, "b": 630.6195678710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9493957161903381, "cells": [{"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 Inferencing architecture on IBM Z"}, {"label": "text", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.10833740234375, "t": 643.45068359375, "r": 547.25574, "b": 725.360573, "coord_origin": "TOPLEFT"}, "confidence": 0.9856446981430054, "cells": [{"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}]}, "text": "Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model\u2019s life."}, {"label": "picture", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 63.826560974121094, "t": 381.7112731933594, "r": 539.9069213867188, "b": 618.51806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9848758578300476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 1, "page_no": 28, "cluster": {"id": 1, "label": "section_header", "bbox": {"l": 64.4560546875, "t": 70.49922180175781, "r": 124.18352508544922, "b": 83.58580017089844, "coord_origin": "TOPLEFT"}, "confidence": 0.9539816975593567, "cells": [{"id": 1, "text": "Summary", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 123.98573, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 2, "page_no": 28, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.6417999267578, "t": 96.69087219238281, "r": 532.96588, "b": 131.15280151367188, "coord_origin": "TOPLEFT"}, "confidence": 0.9826104044914246, "cells": [{"id": 2, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the ", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 532.96588, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "transaction that is being processed might be a fraudulent transaction or not. By using the ", "bbox": {"l": 136.8, "t": 109.48852999999997, "r": 531.263, "b": 118.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "method, you have the following advantages:", "bbox": {"l": 136.8, "t": 121.48834000000011, "r": 331.94427, "b": 130.70135000000005, "coord_origin": "TOPLEFT"}}]}, "text": "With this use case, we attempted to demonstrate how to predict, in real time, whether the transaction that is being processed might be a fraudulent transaction or not. By using the method, you have the following advantages:"}, {"label": "list_item", "id": 3, "page_no": 28, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.6079559326172, "t": 137.87742614746094, "r": 374.51035, "b": 148.40980529785156, "coord_origin": "TOPLEFT"}, "confidence": 0.9520530700683594, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 138.67731000000003, "r": 141.78, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "No Impact to SLAs and the batch process window.", "bbox": {"l": 151.20016, "t": 138.52788999999996, "r": 374.51035, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH No Impact to SLAs and the batch process window."}, {"label": "list_item", "id": 4, "page_no": 28, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.4309844970703, "t": 154.66566467285156, "r": 508.50623, "b": 165.0898895263672, "coord_origin": "TOPLEFT"}, "confidence": 0.9581583142280579, "cells": [{"id": 7, "text": "GLYPH", "bbox": {"l": 136.8, "t": 155.6571, "r": 141.78, "b": 164.43187999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Proactively stop losses, and lower operational, regulatory, and compliance costs.", "bbox": {"l": 151.20016, "t": 155.50769000000003, "r": 508.50623, "b": 164.72069999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Proactively stop losses, and lower operational, regulatory, and compliance costs."}, {"label": "list_item", "id": 5, "page_no": 28, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.6011199951172, "t": 171.30601501464844, "r": 533.53381, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9762634634971619, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 172.63689999999997, "r": 141.78, "b": 181.41168000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "The solution is using a DL framework like TensorFlow for high-performing, low latency ", "bbox": {"l": 151.20016, "t": 172.48748999999998, "r": 533.53381, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "scoring.", "bbox": {"l": 151.20016, "t": 184.4873, "r": 186.20558, "b": 193.70032000000003, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The solution is using a DL framework like TensorFlow for high-performing, low latency scoring."}, {"label": "section_header", "id": 6, "page_no": 28, "cluster": {"id": 6, "label": "section_header", "bbox": {"l": 64.69216918945312, "t": 220.6259307861328, "r": 482.53705, "b": 237.16929626464844, "coord_origin": "TOPLEFT"}, "confidence": 0.9682862162590027, "cells": [{"id": 12, "text": "Use case 4: Remaining Useful Life of an aircraft engine", "bbox": {"l": 64.800003, "t": 222.18073000000004, "r": 482.53705, "b": 236.94372999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 4: Remaining Useful Life of an aircraft engine"}, {"label": "text", "id": 7, "page_no": 28, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.27346801757812, "t": 253.316650390625, "r": 545.72473, "b": 275.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9791228771209717, "cells": [{"id": 13, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using ", "bbox": {"l": 136.8, "t": 254.50867000000005, "r": 545.72473, "b": 263.72168, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBMfi zSystems. ", "bbox": {"l": 136.8, "t": 266.50847999999996, "r": 213.51291, "b": 275.7215, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we describe how an airline can deploy an AI model for inferencing by using IBMfi zSystems."}, {"label": "text", "id": 8, "page_no": 28, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.0217742919922, "t": 287.9417419433594, "r": 547.27057, "b": 333.9791259765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871094226837158, "cells": [{"id": 15, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to ", "bbox": {"l": 136.8, "t": 288.52808, "r": 547.26855, "b": 297.74106, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "operate without any failure. In this case, it is the equivalent of the number of flights remaining ", "bbox": {"l": 136.79999, "t": 300.52789, "r": 547.27057, "b": 309.74088, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "for the engine after the last flight. By estimating RUL, the operator can decide on the next ", "bbox": {"l": 136.79999, "t": 312.52771, "r": 533.55945, "b": 321.74069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "maintenance schedule and avoid unplanned downtime.", "bbox": {"l": 136.79999, "t": 324.52753000000007, "r": 380.77405, "b": 333.74051, "coord_origin": "TOPLEFT"}}]}, "text": "Remaining Useful Life (RUL) is the remaining time or cycles that an aircraft engine is likely to operate without any failure. In this case, it is the equivalent of the number of flights remaining for the engine after the last flight. By estimating RUL, the operator can decide on the next maintenance schedule and avoid unplanned downtime."}, {"label": "text", "id": 9, "page_no": 28, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.3080596923828, "t": 345.2879943847656, "r": 525.16229, "b": 367.7480773925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9762709140777588, "cells": [{"id": 19, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft ", "bbox": {"l": 136.79999, "t": 346.48734, "r": 525.16229, "b": 355.70032, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "engine when using IBM Z. ", "bbox": {"l": 136.79999, "t": 358.48714999999993, "r": 255.13271, "b": 367.70013, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 provides an overview of the inferencing architecture for the RUL of an aircraft engine when using IBM Z."}, {"label": "caption", "id": 10, "page_no": 28, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 64.39527893066406, "t": 621.308349609375, "r": 244.8438262939453, "b": 630.6195678710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9493957161903381, "cells": [{"id": 21, "text": "Figure 22 Inferencing architecture on IBM Z", "bbox": {"l": 64.800003, "t": 622.2179, "r": 243.1971, "b": 630.54291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 22 Inferencing architecture on IBM Z"}, {"label": "text", "id": 11, "page_no": 28, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.10833740234375, "t": 643.45068359375, "r": 547.25574, "b": 725.360573, "coord_origin": "TOPLEFT"}, "confidence": 0.9856446981430054, "cells": [{"id": 22, "text": "Because we are looking into data-driven model development, the data set of our target is the ", "bbox": {"l": 136.8, "t": 644.14873, "r": 547.25574, "b": 653.36172, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "run-to-failure data of the engine. We are looking into a supervised learning problem, and we ", "bbox": {"l": 136.8, "t": 656.1485299999999, "r": 544.6261, "b": 665.36153, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "use regression techniques to learn from the data. DL techniques such as Long Short-Term ", "bbox": {"l": 136.8, "t": 668.14833, "r": 539.12225, "b": 677.36134, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into ", "bbox": {"l": 136.8, "t": 680.14814, "r": 547.20392, "b": 689.36115, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI ", "bbox": {"l": 136.8, "t": 692.1479489999999, "r": 547.14288, "b": 701.360954, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "governance monitors the data and model drift to maintain the model quality throughout the ", "bbox": {"l": 136.8, "t": 704.147758, "r": 537.91998, "b": 713.360764, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "model\u2019s life. ", "bbox": {"l": 136.8, "t": 716.147568, "r": 192.27719, "b": 725.360573, "coord_origin": "TOPLEFT"}}]}, "text": "Because we are looking into data-driven model development, the data set of our target is the run-to-failure data of the engine. We are looking into a supervised learning problem, and we use regression techniques to learn from the data. DL techniques such as Long Short-Term Memory (LSTM) or Gated Recurrent Units (GRU) are our choice because we are looking into a time series data set. TensorFlow or PyTorch frameworks are leveraged to create models. AI governance monitors the data and model drift to maintain the model quality throughout the model\u2019s life."}, {"label": "picture", "id": 12, "page_no": 28, "cluster": {"id": 12, "label": "picture", "bbox": {"l": 63.826560974121094, "t": 381.7112731933594, "r": 539.9069213867188, "b": 618.51806640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9848758578300476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 28, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5003051757812, "t": 754.198486328125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9135285019874573, "cells": [{"id": 0, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 29, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85002517700195, "t": 754.3954467773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155879020690918, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.15624237060547, "t": 754.7210083007812, "r": 267.0744, "b": 764.1427612304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9536111354827881, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.91494750976562, "t": 70.69358825683594, "r": 547.28241, "b": 176.9809112548828, "coord_origin": "TOPLEFT"}, "confidence": 0.9882624745368958, "cells": [{"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.84686279296875, "t": 188.6097869873047, "r": 545.17706, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9868529438972473, "cells": [{"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.91741943359375, "t": 246.65235900878906, "r": 547.21289, "b": 281.0306701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9854286313056946, "cells": [{"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.88528442382812, "t": 292.6196594238281, "r": 547.30829, "b": 339.16351318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9867450594902039, "cells": [{"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.9976348876953, "t": 350.63482666015625, "r": 547.28247, "b": 420.8690185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9884775280952454, "cells": [{"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7574462890625, "t": 432.6813049316406, "r": 547.32422, "b": 478.8412170410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9873866438865662, "cells": [{"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.12620544433594, "t": 490.4873046875, "r": 547.27454, "b": 537.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881239533424377, "cells": [{"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.40904235839844, "t": 548.6136474609375, "r": 521.20435, "b": 570.9915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9769964814186096, "cells": [{"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85002517700195, "t": 754.3954467773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155879020690918, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.15624237060547, "t": 754.7210083007812, "r": 267.0744, "b": 764.1427612304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9536111354827881, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91494750976562, "t": 70.69358825683594, "r": 547.28241, "b": 176.9809112548828, "coord_origin": "TOPLEFT"}, "confidence": 0.9882624745368958, "cells": [{"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see \u201cUse case 3: Clearing and settlement\u201d on page 25."}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84686279296875, "t": 188.6097869873047, "r": 545.17706, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9868529438972473, "cells": [{"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.91741943359375, "t": 246.65235900878906, "r": 547.21289, "b": 281.0306701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9854286313056946, "cells": [{"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}]}, "text": "We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works."}, {"label": "text", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88528442382812, "t": 292.6196594238281, "r": 547.30829, "b": 339.16351318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9867450594902039, "cells": [{"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}]}, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator."}, {"label": "text", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9976348876953, "t": 350.63482666015625, "r": 547.28247, "b": 420.8690185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9884775280952454, "cells": [{"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}]}, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction."}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7574462890625, "t": 432.6813049316406, "r": 547.32422, "b": 478.8412170410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9873866438865662, "cells": [{"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}]}, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.12620544433594, "t": 490.4873046875, "r": 547.27454, "b": 537.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881239533424377, "cells": [{"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}]}, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.40904235839844, "t": 548.6136474609375, "r": 521.20435, "b": 570.9915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9769964814186096, "cells": [{"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application."}], "body": [{"label": "text", "id": 2, "page_no": 29, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.91494750976562, "t": 70.69358825683594, "r": 547.28241, "b": 176.9809112548828, "coord_origin": "TOPLEFT"}, "confidence": 0.9882624745368958, "cells": [{"id": 2, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 542.39313, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless ", "bbox": {"l": 136.80002, "t": 83.50847999999996, "r": 547.27655, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "process. Data engineers leverage Db2 to host the data set, which includes the training, ", "bbox": {"l": 136.80003, "t": 95.50829999999996, "r": 523.61969, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency ", "bbox": {"l": 136.80003, "t": 107.50811999999996, "r": 547.28241, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "while retrieving the data and serve data security needs because Db2 is hosted on the ", "bbox": {"l": 136.80003, "t": 119.50792999999999, "r": 516.43262, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and ", "bbox": {"l": 136.80003, "t": 131.50775, "r": 544.06757, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "data imputations. You can use the programming languages Golang or C++ for real-time ", "bbox": {"l": 136.80003, "t": 143.50757, "r": 525.77576, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "predictions, depending on customer needs. For more information about this topic, see \u201cUse ", "bbox": {"l": 136.80003, "t": 155.50739, "r": 541.80939, "b": 164.72040000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "case 3: Clearing and settlement\u201d on page 25.", "bbox": {"l": 136.80003, "t": 167.5072, "r": 336.3446, "b": 176.72020999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Open-source data from NASA was used to build the AI model, which then was deployed on CP4D. CP4D enables the data-scientist\u2019s journey from modeling to deployment in a seamless process. Data engineers leverage Db2 to host the data set, which includes the training, testing, and validation of a data set. Since data is hosted on Db2, you can expect low latency while retrieving the data and serve data security needs because Db2 is hosted on the IBM Z platform. Data is fetched by the data refinery to do the necessary pre-processing and data imputations. You can use the programming languages Golang or C++ for real-time predictions, depending on customer needs. For more information about this topic, see \u201cUse case 3: Clearing and settlement\u201d on page 25."}, {"label": "text", "id": 3, "page_no": 29, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.84686279296875, "t": 188.6097869873047, "r": 545.17706, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}, "confidence": 0.9868529438972473, "cells": [{"id": 11, "text": "Model building is done on Watson Studio, leveraging the high-performance computing ", "bbox": {"l": 136.80003, "t": 189.52679, "r": 519.02582, "b": 198.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) ", "bbox": {"l": 136.80003, "t": 201.52661, "r": 545.17706, "b": 210.73961999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "and bring the model directly into CP4D, which provides data scientists with the flexibility of ", "bbox": {"l": 136.80003, "t": 213.52643, "r": 537.34039, "b": 222.73943999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "implementation choices. ", "bbox": {"l": 136.80005, "t": 225.52625, "r": 246.82417, "b": 234.73925999999994, "coord_origin": "TOPLEFT"}}]}, "text": "Model building is done on Watson Studio, leveraging the high-performance computing hardware on IBM Z. You can train the model anywhere (on your own hardware or the cloud) and bring the model directly into CP4D, which provides data scientists with the flexibility of implementation choices."}, {"label": "text", "id": 4, "page_no": 29, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.91741943359375, "t": 246.65235900878906, "r": 547.21289, "b": 281.0306701660156, "coord_origin": "TOPLEFT"}, "confidence": 0.9854286313056946, "cells": [{"id": 15, "text": "We used LSTM to build the AI model and used the training data. The model was continuously ", "bbox": {"l": 136.80005, "t": 247.48602000000005, "r": 547.21289, "b": 256.69903999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "evaluated to model convergence. The final model is tested with the test data, which is never ", "bbox": {"l": 136.80005, "t": 259.48584000000005, "r": 545.17395, "b": 268.69885, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "exposed at the time of training to make sure that the model works. ", "bbox": {"l": 136.80005, "t": 271.48566000000005, "r": 431.79333, "b": 280.69867, "coord_origin": "TOPLEFT"}}]}, "text": "We used LSTM to build the AI model and used the training data. The model was continuously evaluated to model convergence. The final model is tested with the test data, which is never exposed at the time of training to make sure that the model works."}, {"label": "text", "id": 5, "page_no": 29, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.88528442382812, "t": 292.6196594238281, "r": 547.30829, "b": 339.16351318359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9867450594902039, "cells": [{"id": 18, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model ", "bbox": {"l": 136.80005, "t": 293.50525, "r": 543.47888, "b": 302.71823, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can be converted to the Open Neural Network Exchange (ONNX) format before deployment. ", "bbox": {"l": 136.80005, "t": 305.50507, "r": 547.30829, "b": 314.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Based on project requirements, IBM Z supports high-throughput, low latency inference ", "bbox": {"l": 136.80005, "t": 317.50488000000007, "r": 520.6048, "b": 326.71786, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "requirements by leveraging an AI accelerator.", "bbox": {"l": 136.80005, "t": 329.5047, "r": 338.49896, "b": 338.71768, "coord_origin": "TOPLEFT"}}]}, "text": "This model is deployed on WML on CP4D and runs on IBM Z. If required, the trained model can be converted to the Open Neural Network Exchange (ONNX) format before deployment. Based on project requirements, IBM Z supports high-throughput, low latency inference requirements by leveraging an AI accelerator."}, {"label": "text", "id": 6, "page_no": 29, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.9976348876953, "t": 350.63482666015625, "r": 547.28247, "b": 420.8690185546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9884775280952454, "cells": [{"id": 22, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the ", "bbox": {"l": 136.80005, "t": 351.52426, "r": 533.88434, "b": 360.73724, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "model predictions from end to end. This explainability may be global or local. Global ", "bbox": {"l": 136.80005, "t": 363.52408, "r": 509.4176, "b": 372.73706, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "explainability enables decision-makers to evaluate the trained model in general from the ", "bbox": {"l": 136.80005, "t": 375.52389999999997, "r": 527.95715, "b": 384.73688, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "subject matter expert (SME) point of view. Local explainability enables the operator to validate ", "bbox": {"l": 136.80005, "t": 387.52371, "r": 547.28247, "b": 396.73669, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "the reasons behind the present inference and relate it to the past data points, which are an ", "bbox": {"l": 136.80005, "t": 399.52353, "r": 539.53656, "b": 408.73651, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "indicative cause of the prediction. ", "bbox": {"l": 136.80005, "t": 411.52334999999994, "r": 287.38629, "b": 420.73633, "coord_origin": "TOPLEFT"}}]}, "text": "For decision-making about an aircraft engine\u2019s life, it is important to be able to explain the model predictions from end to end. This explainability may be global or local. Global explainability enables decision-makers to evaluate the trained model in general from the subject matter expert (SME) point of view. Local explainability enables the operator to validate the reasons behind the present inference and relate it to the past data points, which are an indicative cause of the prediction."}, {"label": "text", "id": 7, "page_no": 29, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7574462890625, "t": 432.6813049316406, "r": 547.32422, "b": 478.8412170410156, "coord_origin": "TOPLEFT"}, "confidence": 0.9873866438865662, "cells": [{"id": 28, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and ", "bbox": {"l": 136.80005, "t": 433.48315, "r": 547.27649, "b": 442.69614, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the ", "bbox": {"l": 136.80005, "t": 445.48297, "r": 547.26263, "b": 454.69595, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "stakeholders about important events through a dashboard and allow course correction at any ", "bbox": {"l": 136.80005, "t": 457.48279, "r": 547.32422, "b": 466.69577, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "point. ", "bbox": {"l": 136.80005, "t": 469.4826, "r": 163.98486, "b": 478.69559, "coord_origin": "TOPLEFT"}}]}, "text": "The AI governance components such as IBM OpenScale on CP4D support explainability and manages the drifts in data and concept. OpenPages and AI FactSheet together can alert the stakeholders about important events through a dashboard and allow course correction at any point."}, {"label": "text", "id": 8, "page_no": 29, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.12620544433594, "t": 490.4873046875, "r": 547.27454, "b": 537.0437622070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9881239533424377, "cells": [{"id": 32, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an ", "bbox": {"l": 136.80005, "t": 491.50217, "r": 547.27454, "b": 500.71515, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "incoming request before initiating the inference pipeline. Efficiencies might be needed in ", "bbox": {"l": 136.80005, "t": 503.50198, "r": 527.93903, "b": 512.71497, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "real-time applications, and inference response time can be reduced by adopting low-level ", "bbox": {"l": 136.80005, "t": 515.5018, "r": 533.50079, "b": 524.71478, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "programming while components are communicating.", "bbox": {"l": 136.80005, "t": 527.50162, "r": 368.46075, "b": 536.71461, "coord_origin": "TOPLEFT"}}]}, "text": "Client-side applications can invoke a REST apiserver that handles some preprocessing of an incoming request before initiating the inference pipeline. Efficiencies might be needed in real-time applications, and inference response time can be reduced by adopting low-level programming while components are communicating."}, {"label": "text", "id": 9, "page_no": 29, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.40904235839844, "t": 548.6136474609375, "r": 521.20435, "b": 570.9915771484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9769964814186096, "cells": [{"id": 36, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based ", "bbox": {"l": 136.80005, "t": 549.52118, "r": 521.20435, "b": 558.73418, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "predictive maintenance application. ", "bbox": {"l": 136.80005, "t": 561.52098, "r": 295.74277, "b": 570.73398, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 on page 29 provides a more in-depth view of the architecture of an AI-based predictive maintenance application."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 29, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85002517700195, "t": 754.3954467773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9155879020690918, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 29, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.15624237060547, "t": 754.7210083007812, "r": 267.0744, "b": 764.1427612304688, "coord_origin": "TOPLEFT"}, "confidence": 0.9536111354827881, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 30, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.4804077148438, "t": 754.2535400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163533449172974, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "caption", "bbox": {"l": 64.29751586914062, "t": 442.3620300292969, "r": 216.1868438720703, "b": 451.6481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9474461078643799, "cells": [{"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.26695251464844, "t": 464.0877685546875, "r": 501.7642200000001, "b": 485.9813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9469272494316101, "cells": [{"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.49343872070312, "t": 492.5340576171875, "r": 547.32031, "b": 526.9137573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9813073873519897, "cells": [{"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.57691955566406, "t": 534.0592041015625, "r": 491.3402699999999, "b": 544.2946166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9524359107017517, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.67471313476562, "t": 550.6901245117188, "r": 534.49988, "b": 572.9078979492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9742523431777954, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.61285400390625, "t": 579.9425659179688, "r": 547.2157, "b": 601.75977, "coord_origin": "TOPLEFT"}, "confidence": 0.9732432961463928, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.52349853515625, "t": 608.5234985351562, "r": 504.02917, "b": 631.1382446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.976965069770813, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 63.6925048828125, "t": 77.32726287841797, "r": 547.7992553710938, "b": 439.2281799316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9841210246086121, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4804077148438, "t": 754.2535400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163533449172974, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}, {"label": "caption", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.29751586914062, "t": 442.3620300292969, "r": 216.1868438720703, "b": 451.6481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9474461078643799, "cells": [{"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 In-depth architectural view"}, {"label": "text", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.26695251464844, "t": 464.0877685546875, "r": 501.7642200000001, "b": 485.9813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9469272494316101, "cells": [{"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, consider the following points while developing an AI-based predictive maintenance application:"}, {"label": "list_item", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.49343872070312, "t": 492.5340576171875, "r": 547.32031, "b": 526.9137573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9813073873519897, "cells": [{"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages."}, {"label": "list_item", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.57691955566406, "t": 534.0592041015625, "r": 491.3402699999999, "b": 544.2946166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9524359107017517, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The trustworthiness of the predicted output is important for critical use cases."}, {"label": "list_item", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.67471313476562, "t": 550.6901245117188, "r": 534.49988, "b": 572.9078979492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9742523431777954, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications."}, {"label": "list_item", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.61285400390625, "t": 579.9425659179688, "r": 547.2157, "b": 601.75977, "coord_origin": "TOPLEFT"}, "confidence": 0.9732432961463928, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available."}, {"label": "list_item", "id": 7, "page_no": 30, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52349853515625, "t": 608.5234985351562, "r": 504.02917, "b": 631.1382446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.976965069770813, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle."}, {"label": "picture", "id": 8, "page_no": 30, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.6925048828125, "t": 77.32726287841797, "r": 547.7992553710938, "b": 439.2281799316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9841210246086121, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 1, "page_no": 30, "cluster": {"id": 1, "label": "caption", "bbox": {"l": 64.29751586914062, "t": 442.3620300292969, "r": 216.1868438720703, "b": 451.6481628417969, "coord_origin": "TOPLEFT"}, "confidence": 0.9474461078643799, "cells": [{"id": 1, "text": "Figure 23 In-depth architectural view", "bbox": {"l": 64.800003, "t": 442.5779999999999, "r": 215.16300999999999, "b": 450.90302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 23 In-depth architectural view"}, {"label": "text", "id": 2, "page_no": 30, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.26695251464844, "t": 464.0877685546875, "r": 501.7642200000001, "b": 485.9813537597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9469272494316101, "cells": [{"id": 2, "text": "In summary, consider the following points while developing an AI-based predictive ", "bbox": {"l": 136.8, "t": 464.56873, "r": 501.7642200000001, "b": 473.78171, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "maintenance application:", "bbox": {"l": 136.8, "t": 476.56854, "r": 247.38886999999997, "b": 485.78152, "coord_origin": "TOPLEFT"}}]}, "text": "In summary, consider the following points while developing an AI-based predictive maintenance application:"}, {"label": "list_item", "id": 3, "page_no": 30, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.49343872070312, "t": 492.5340576171875, "r": 547.32031, "b": 526.9137573242188, "coord_origin": "TOPLEFT"}, "confidence": 0.9813073873519897, "cells": [{"id": 4, "text": "GLYPH", "bbox": {"l": 136.8, "t": 493.69772, "r": 141.78, "b": 502.4725, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "CP4D offers a Python run time to build a custom solution stack, but also supports different ", "bbox": {"l": 151.20016, "t": 493.54834, "r": 547.32031, "b": 502.76132, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, ", "bbox": {"l": 151.20016, "t": 505.54816, "r": 537.88837, "b": 514.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and OpenPages.", "bbox": {"l": 151.20016, "t": 517.5479700000001, "r": 226.26571999999996, "b": 526.7609600000001, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH CP4D offers a Python run time to build a custom solution stack, but also supports different components like Watson Studio, WML, Db2, Data Refinery, OpenScale, AI Factsheets, and OpenPages."}, {"label": "list_item", "id": 4, "page_no": 30, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.57691955566406, "t": 534.0592041015625, "r": 491.3402699999999, "b": 544.2946166992188, "coord_origin": "TOPLEFT"}, "confidence": 0.9524359107017517, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 534.67719, "r": 141.78, "b": 543.45193, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "The trustworthiness of the predicted output is important for critical use cases.", "bbox": {"l": 151.20016, "t": 534.5277699999999, "r": 491.3402699999999, "b": 543.74078, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The trustworthiness of the predicted output is important for critical use cases."}, {"label": "list_item", "id": 5, "page_no": 30, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.67471313476562, "t": 550.6901245117188, "r": 534.49988, "b": 572.9078979492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9742523431777954, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 551.71675, "r": 141.78, "b": 560.4915, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Z provides high data security and low latency requirements at scale for the critical ", "bbox": {"l": 151.20016, "t": 551.56735, "r": 534.49988, "b": 560.78035, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "applications.", "bbox": {"l": 151.20016, "t": 563.56715, "r": 206.73216, "b": 572.78015, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Z provides high data security and low latency requirements at scale for the critical applications."}, {"label": "list_item", "id": 6, "page_no": 30, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.61285400390625, "t": 579.9425659179688, "r": 547.2157, "b": 601.75977, "coord_origin": "TOPLEFT"}, "confidence": 0.9732432961463928, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 580.69637, "r": 141.78, "b": 589.47112, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "A data scientist can choose to train the model and deploy it on CP4D seamlessly with the ", "bbox": {"l": 151.20016, "t": 580.54697, "r": 547.2157, "b": 589.75996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "latest tech stack that is available.", "bbox": {"l": 151.20016, "t": 592.54677, "r": 297.4169, "b": 601.75977, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A data scientist can choose to train the model and deploy it on CP4D seamlessly with the latest tech stack that is available."}, {"label": "list_item", "id": 7, "page_no": 30, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.52349853515625, "t": 608.5234985351562, "r": 504.02917, "b": 631.1382446289062, "coord_origin": "TOPLEFT"}, "confidence": 0.976965069770813, "cells": [{"id": 16, "text": "GLYPH", "bbox": {"l": 136.8, "t": 609.67598, "r": 141.78, "b": 618.45073, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "The AIOps and MLOps supported by CP4D to track AI model and data lifecycle ", "bbox": {"l": 151.20016, "t": 609.52658, "r": 504.02917, "b": 618.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "throughout the application lifecycle.", "bbox": {"l": 151.20016, "t": 621.52638, "r": 307.32214, "b": 630.73938, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The AIOps and MLOps supported by CP4D to track AI model and data lifecycle throughout the application lifecycle."}, {"label": "picture", "id": 8, "page_no": 30, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 63.6925048828125, "t": 77.32726287841797, "r": 547.7992553710938, "b": 439.2281799316406, "coord_origin": "TOPLEFT"}, "confidence": 0.9841210246086121, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 30, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.4804077148438, "t": 754.2535400390625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9163533449172974, "cells": [{"id": 0, "text": "29", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "29"}]}}, {"page_no": 31, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.11967468261719, "t": 754.4208984375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230456948280334, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.19580841064453, "t": 754.7359008789062, "r": 267.0744, "b": 764.1449584960938, "coord_origin": "TOPLEFT"}, "confidence": 0.956289529800415, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.292236328125, "t": 70.0931625366211, "r": 542.2594, "b": 105.00391387939453, "coord_origin": "TOPLEFT"}, "confidence": 0.9470060467720032, "cells": [{"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04208374023438, "t": 121.13082122802734, "r": 546.69891, "b": 179.73699951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872261881828308, "cells": [{"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.93234252929688, "t": 191.948974609375, "r": 547.31219, "b": 238.30877685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872615337371826, "cells": [{"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.01303100585938, "t": 249.5870361328125, "r": 533.34436, "b": 283.6994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848974347114563, "cells": [{"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.85812377929688, "t": 295.5922546386719, "r": 535.13025, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9812631607055664, "cells": [{"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 64.58500671386719, "t": 385.20379638671875, "r": 186.7186, "b": 398.5070495605469, "coord_origin": "TOPLEFT"}, "confidence": 0.9640207886695862, "cells": [{"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.78916931152344, "t": 411.3067932128906, "r": 547.25763, "b": 457.70117, "coord_origin": "TOPLEFT"}, "confidence": 0.9876371622085571, "cells": [{"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.95849609375, "t": 469.4918212890625, "r": 547.27753, "b": 527.93310546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9885361194610596, "cells": [{"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.81661987304688, "t": 540.0313110351562, "r": 547.23859, "b": 573.9750366210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9842253923416138, "cells": [{"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.16104125976562, "t": 586.1128540039062, "r": 541.76654, "b": 608.531982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9799899458885193, "cells": [{"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "section_header", "bbox": {"l": 64.49705505371094, "t": 627.67138671875, "r": 278.44431, "b": 641.0259399414062, "coord_origin": "TOPLEFT"}, "confidence": 0.961360514163971, "cells": [{"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 135.9631805419922, "t": 654.0413208007812, "r": 547.22571, "b": 724.17529296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9874605536460876, "cells": [{"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11967468261719, "t": 754.4208984375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230456948280334, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.19580841064453, "t": 754.7359008789062, "r": 267.0744, "b": 764.1449584960938, "coord_origin": "TOPLEFT"}, "confidence": 0.956289529800415, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.292236328125, "t": 70.0931625366211, "r": 542.2594, "b": 105.00391387939453, "coord_origin": "TOPLEFT"}, "confidence": 0.9470060467720032, "cells": [{"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions for health prediction"}, {"label": "text", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04208374023438, "t": 121.13082122802734, "r": 546.69891, "b": 179.73699951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872261881828308, "cells": [{"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world."}, {"label": "text", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93234252929688, "t": 191.948974609375, "r": 547.31219, "b": 238.30877685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872615337371826, "cells": [{"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis."}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.01303100585938, "t": 249.5870361328125, "r": 533.34436, "b": 283.6994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848974347114563, "cells": [{"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}]}, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.85812377929688, "t": 295.5922546386719, "r": 535.13025, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9812631607055664, "cells": [{"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby\u2019s life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders."}, {"label": "section_header", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.58500671386719, "t": 385.20379638671875, "r": 186.7186, "b": 398.5070495605469, "coord_origin": "TOPLEFT"}, "confidence": 0.9640207886695862, "cells": [{"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78916931152344, "t": 411.3067932128906, "r": 547.25763, "b": 457.70117, "coord_origin": "TOPLEFT"}, "confidence": 0.9876371622085571, "cells": [{"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}]}, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected."}, {"label": "text", "id": 9, "page_no": 31, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.95849609375, "t": 469.4918212890625, "r": 547.27753, "b": 527.93310546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9885361194610596, "cells": [{"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}]}, "text": "There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and detect problems effectively."}, {"label": "text", "id": 10, "page_no": 31, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.81661987304688, "t": 540.0313110351562, "r": 547.23859, "b": 573.9750366210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9842253923416138, "cells": [{"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}]}, "text": "AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified."}, {"label": "text", "id": 11, "page_no": 31, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.16104125976562, "t": 586.1128540039062, "r": 541.76654, "b": 608.531982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9799899458885193, "cells": [{"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}]}, "text": "Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry."}, {"label": "section_header", "id": 12, "page_no": 31, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.49705505371094, "t": 627.67138671875, "r": 278.44431, "b": 641.0259399414062, "coord_origin": "TOPLEFT"}, "confidence": 0.961360514163971, "cells": [{"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analytics in real time"}, {"label": "text", "id": 13, "page_no": 31, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9631805419922, "t": 654.0413208007812, "r": 547.22571, "b": 724.17529296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9874605536460876, "cells": [{"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}]}, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems."}], "body": [{"label": "section_header", "id": 2, "page_no": 31, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.292236328125, "t": 70.0931625366211, "r": 542.2594, "b": 105.00391387939453, "coord_origin": "TOPLEFT"}, "confidence": 0.9470060467720032, "cells": [{"id": 2, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions ", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 542.2594, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "for health prediction", "bbox": {"l": 64.800003, "t": 90.18120999999985, "r": 219.41090000000003, "b": 104.94421, "coord_origin": "TOPLEFT"}}]}, "text": "Use case 5: AI-powered video analytics on an infant\u2019s motions for health prediction"}, {"label": "text", "id": 3, "page_no": 31, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04208374023438, "t": 121.13082122802734, "r": 546.69891, "b": 179.73699951171875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872261881828308, "cells": [{"id": 4, "text": "Each year, approximately 5 million newborns worldwide are suffering from a ", "bbox": {"l": 136.8, "t": 122.50867000000005, "r": 474.4818399999999, "b": 131.72168, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many ", "bbox": {"l": 136.79999, "t": 134.50847999999996, "r": 532.30072, "b": 143.7215, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "infants are disabled and abandoned, especially in countries with limited numbers of ", "bbox": {"l": 136.8, "t": 146.50829999999996, "r": 506.92267000000004, "b": 155.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "pediatricians with extensive experience in neuro-developmental disorders. This situation is a ", "bbox": {"l": 136.8, "t": 158.50811999999996, "r": 546.69891, "b": 167.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "conundrum that plagues many families around the world.", "bbox": {"l": 136.8, "t": 170.50793, "r": 387.98224, "b": 179.72095000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Each year, approximately 5 million newborns worldwide are suffering from a neuro-developmental disorder. Due to the lack of early diagnoses and intervention, many infants are disabled and abandoned, especially in countries with limited numbers of pediatricians with extensive experience in neuro-developmental disorders. This situation is a conundrum that plagues many families around the world."}, {"label": "text", "id": 4, "page_no": 31, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.93234252929688, "t": 191.948974609375, "r": 547.31219, "b": 238.30877685546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9872615337371826, "cells": [{"id": 9, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy ", "bbox": {"l": 136.8, "t": 192.52752999999996, "r": 547.31219, "b": 201.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "childhood development. In infants, monitoring their poses provides information about their ", "bbox": {"l": 136.8, "t": 204.52733999999998, "r": 535.15521, "b": 213.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "health that can lead to a better prediction of early developmental risk assessment and ", "bbox": {"l": 136.8, "t": 216.52715999999998, "r": 517.90442, "b": 225.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "diagnosis. ", "bbox": {"l": 136.79999, "t": 228.52697999999998, "r": 184.63986, "b": 237.73999000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analysis plays critical importance to understanding and comprehending healthy childhood development. In infants, monitoring their poses provides information about their health that can lead to a better prediction of early developmental risk assessment and diagnosis."}, {"label": "text", "id": 5, "page_no": 31, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.01303100585938, "t": 249.5870361328125, "r": 533.34436, "b": 283.6994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848974347114563, "cells": [{"id": 13, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, ", "bbox": {"l": 136.79999, "t": 250.48676, "r": 521.8656, "b": 259.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "stressed, or hungry), but this case is usually different for infants who cannot express their ", "bbox": {"l": 136.79997, "t": 262.48657000000003, "r": 533.34436, "b": 271.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "feelings. Based on the baby movements, AI can predict their expression or health.", "bbox": {"l": 136.79997, "t": 274.48639000000003, "r": 499.15466, "b": 283.6994, "coord_origin": "TOPLEFT"}}]}, "text": "Adults use different techniques and methods to express their feelings (like sick, happy, stressed, or hungry), but this case is usually different for infants who cannot express their feelings. Based on the baby movements, AI can predict their expression or health."}, {"label": "text", "id": 6, "page_no": 31, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.85812377929688, "t": 295.5922546386719, "r": 535.13025, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9812631607055664, "cells": [{"id": 16, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and ", "bbox": {"l": 136.79997, "t": 296.50598, "r": 535.13025, "b": 305.7189599999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "hospitals by addressing pose-based real-time body movements of the infants (such as ", "bbox": {"l": 136.79997, "t": 308.5058, "r": 520.1662, "b": 317.71878000000004, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). ", "bbox": {"l": 136.79997, "t": 320.50562, "r": 529.04352, "b": 329.7186, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "During the initial months of a baby\u2019s life, spontaneous movements might indicate later ", "bbox": {"l": 136.79997, "t": 332.50543, "r": 517.4234, "b": 341.71841, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum ", "bbox": {"l": 136.79997, "t": 344.50525, "r": 522.46307, "b": 353.71823, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "disorders.", "bbox": {"l": 136.79997, "t": 356.50507, "r": 180.66779, "b": 365.71804999999995, "coord_origin": "TOPLEFT"}}]}, "text": "In this use case, we examine how AI-powered video analytics can assist new parents and hospitals by addressing pose-based real-time body movements of the infants (such as arching back, head banging, kicking legs, rubbing eyes, stretching, and sucking fingers). During the initial months of a baby\u2019s life, spontaneous movements might indicate later developmental disorders, such as cerebral palsy, Rett syndrome, and autism spectrum disorders."}, {"label": "section_header", "id": 7, "page_no": 31, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 64.58500671386719, "t": 385.20379638671875, "r": 186.7186, "b": 398.5070495605469, "coord_origin": "TOPLEFT"}, "confidence": 0.9640207886695862, "cells": [{"id": 22, "text": "Industry challenges", "bbox": {"l": 64.800003, "t": 386.33475, "r": 186.7186, "b": 398.32272, "coord_origin": "TOPLEFT"}}]}, "text": "Industry challenges"}, {"label": "text", "id": 8, "page_no": 31, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.78916931152344, "t": 411.3067932128906, "r": 547.25763, "b": 457.70117, "coord_origin": "TOPLEFT"}, "confidence": 0.9876371622085571, "cells": [{"id": 23, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in ", "bbox": {"l": 136.8, "t": 412.48874, "r": 547.20087, "b": 421.70172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "many hospitals or homes so that any problem can be witnessed and potentially even stopped ", "bbox": {"l": 136.80002, "t": 424.48856, "r": 547.2226, "b": 433.70154, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "before they take place. These systems require much manual work to monitor the real-stream ", "bbox": {"l": 136.80002, "t": 436.48837000000003, "r": 547.25763, "b": 445.70135, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "videos and intervene when a problem is detected. ", "bbox": {"l": 136.80002, "t": 448.48819, "r": 359.689, "b": 457.70117, "coord_origin": "TOPLEFT"}}]}, "text": "There are video surveillance systems that are installed for monitoring an infant\u2019s movement in many hospitals or homes so that any problem can be witnessed and potentially even stopped before they take place. These systems require much manual work to monitor the real-stream videos and intervene when a problem is detected."}, {"label": "text", "id": 9, "page_no": 31, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.95849609375, "t": 469.4918212890625, "r": 547.27753, "b": 527.93310546875, "coord_origin": "TOPLEFT"}, "confidence": 0.9885361194610596, "cells": [{"id": 27, "text": "There is a certain amount of trust that you must place on the person who monitors a ", "bbox": {"l": 136.80002, "t": 470.50775, "r": 510.17957, "b": 479.72073, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "surveillance system to ensure that the job is being done effectively and efficiently, and that the ", "bbox": {"l": 136.80002, "t": 482.50757, "r": 547.27753, "b": 491.72055, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "surveillance system is being vigilantly watched. Because of the dependency on these manual ", "bbox": {"l": 136.80002, "t": 494.50739, "r": 547.22272, "b": 503.72037, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and ", "bbox": {"l": 136.79999, "t": 506.5072, "r": 531.67511, "b": 515.72018, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "detect problems effectively. ", "bbox": {"l": 136.80096, "t": 518.50702, "r": 260.62772, "b": 527.72, "coord_origin": "TOPLEFT"}}]}, "text": "There is a certain amount of trust that you must place on the person who monitors a surveillance system to ensure that the job is being done effectively and efficiently, and that the surveillance system is being vigilantly watched. Because of the dependency on these manual efforts, you need something \u201csmart\u201d that monitors constantly the surveillance system and detect problems effectively."}, {"label": "text", "id": 10, "page_no": 31, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.81661987304688, "t": 540.0313110351562, "r": 547.23859, "b": 573.9750366210938, "coord_origin": "TOPLEFT"}, "confidence": 0.9842253923416138, "cells": [{"id": 32, "text": "AI is shaping the controls of surveillance that can map and track occurrences with ", "bbox": {"l": 136.80096, "t": 540.52658, "r": 500.10587, "b": 549.7395799999999, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "self-learning abilities, AI can improve on human operations and analyze video footage in real ", "bbox": {"l": 136.80095, "t": 552.52638, "r": 547.23859, "b": 561.73938, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "time to alert the hospitals or parents if any anomalies are identified.", "bbox": {"l": 136.79994, "t": 564.5261800000001, "r": 433.53322999999995, "b": 573.73918, "coord_origin": "TOPLEFT"}}]}, "text": "AI is shaping the controls of surveillance that can map and track occurrences with self-learning abilities, AI can improve on human operations and analyze video footage in real time to alert the hospitals or parents if any anomalies are identified."}, {"label": "text", "id": 11, "page_no": 31, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.16104125976562, "t": 586.1128540039062, "r": 541.76654, "b": 608.531982421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9799899458885193, "cells": [{"id": 35, "text": "Video processing a stream of data from surveillance systems and then performing advance ", "bbox": {"l": 136.79994, "t": 586.54575, "r": 541.76654, "b": 595.75874, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "analytics and detecting anomalies quickly is a significant challenge in the industry.", "bbox": {"l": 136.79993, "t": 598.5455499999999, "r": 499.08203, "b": 607.75854, "coord_origin": "TOPLEFT"}}]}, "text": "Video processing a stream of data from surveillance systems and then performing advance analytics and detecting anomalies quickly is a significant challenge in the industry."}, {"label": "section_header", "id": 12, "page_no": 31, "cluster": {"id": 12, "label": "section_header", "bbox": {"l": 64.49705505371094, "t": 627.67138671875, "r": 278.44431, "b": 641.0259399414062, "coord_origin": "TOPLEFT"}, "confidence": 0.961360514163971, "cells": [{"id": 37, "text": "Infant motion analytics in real time", "bbox": {"l": 64.800003, "t": 628.37462, "r": 278.44431, "b": 640.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Infant motion analytics in real time"}, {"label": "text", "id": 13, "page_no": 31, "cluster": {"id": 13, "label": "text", "bbox": {"l": 135.9631805419922, "t": 654.0413208007812, "r": 547.22571, "b": 724.17529296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9874605536460876, "cells": [{"id": 38, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the ", "bbox": {"l": 136.8, "t": 654.52872, "r": 481.38613999999995, "b": 663.74171, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "decision-making capabilities of the human mind. DL-based computer vision AI techniques are ", "bbox": {"l": 136.8, "t": 666.5285200000001, "r": 547.22571, "b": 675.74152, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "being widely adopted by various industries to solve real-time problems. These techniques ", "bbox": {"l": 136.80002, "t": 678.52833, "r": 534.54663, "b": 687.7413300000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "improve the detection and prediction accuracy without increasing the hardware cost ", "bbox": {"l": 136.8, "t": 690.52814, "r": 508.5957599999999, "b": 699.741142, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides ", "bbox": {"l": 136.8, "t": 702.5279459999999, "r": 547.14087, "b": 711.740952, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "benefits by detecting unusual incidents and solving many video forensic problems. ", "bbox": {"l": 136.8, "t": 714.527756, "r": 502.9895, "b": 723.740761, "coord_origin": "TOPLEFT"}}]}, "text": "AI is the current \u201cmarket trend evolution\u201d in video analytics and advancing the decision-making capabilities of the human mind. DL-based computer vision AI techniques are being widely adopted by various industries to solve real-time problems. These techniques improve the detection and prediction accuracy without increasing the hardware cost exponentially. For users, AI greatly reduces the workload of the monitoring staff and provides benefits by detecting unusual incidents and solving many video forensic problems."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 31, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.11967468261719, "t": 754.4208984375, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9230456948280334, "cells": [{"id": 0, "text": "30 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "30"}, {"label": "page_footer", "id": 1, "page_no": 31, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.19580841064453, "t": 754.7359008789062, "r": 267.0744, "b": 764.1449584960938, "coord_origin": "TOPLEFT"}, "confidence": 0.956289529800415, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 32, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.5228881835938, "t": 754.3223266601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9154198169708252, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 135.8349609375, "t": 70.61254119873047, "r": 540.15765, "b": 104.76904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9836795926094055, "cells": [{"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.0093536376953, "t": 116.78787994384766, "r": 542.94446, "b": 162.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9831726551055908, "cells": [{"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "picture", "bbox": {"l": 64.15681457519531, "t": 168.52747, "r": 542.2742309570312, "b": 410.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9696220755577087, "cells": [{"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "caption", "bbox": {"l": 64.36393737792969, "t": 413.5631408691406, "r": 281.63330078125, "b": 422.616455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496315121650696, "cells": [{"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9974822998047, "t": 435.3909912109375, "r": 547.31128, "b": 517.7117309570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9883346557617188, "cells": [{"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.75706481933594, "t": 529.5070190429688, "r": 539.91718, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9881454706192017, "cells": [{"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.83775329589844, "t": 611.3679809570312, "r": 437.9595299999999, "b": 621.6543579101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9376599788665771, "cells": [{"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.53660583496094, "t": 627.9594116210938, "r": 546.68695, "b": 650.2847900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9733057618141174, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.43955993652344, "t": 657.3218994140625, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}, "confidence": 0.9471306204795837, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 135.51890563964844, "t": 673.9837036132812, "r": 543.45294, "b": 696.257805, "coord_origin": "TOPLEFT"}, "confidence": 0.9743932485580444, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.43861389160156, "t": 703.3480834960938, "r": 516.33087, "b": 713.6216430664062, "coord_origin": "TOPLEFT"}, "confidence": 0.9642981290817261, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5228881835938, "t": 754.3223266601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9154198169708252, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}, {"label": "text", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "text", "bbox": {"l": 135.8349609375, "t": 70.61254119873047, "r": 540.15765, "b": 104.76904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9836795926094055, "cells": [{"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time."}, {"label": "text", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0093536376953, "t": 116.78787994384766, "r": 542.94446, "b": 162.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9831726551055908, "cells": [{"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data."}, {"label": "picture", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.15681457519531, "t": 168.52747, "r": 542.2742309570312, "b": 410.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9696220755577087, "cells": [{"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.36393737792969, "t": 413.5631408691406, "r": 281.63330078125, "b": 422.616455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496315121650696, "cells": [{"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 Architecture for AI-powered video analytics"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9974822998047, "t": 435.3909912109375, "r": 547.31128, "b": 517.7117309570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9883346557617188, "cells": [{"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}]}, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant\u2019s body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture."}, {"label": "text", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.75706481933594, "t": 529.5070190429688, "r": 539.91718, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9881454706192017, "cells": [{"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}]}, "text": "When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant\u2019s health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means."}, {"label": "text", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83775329589844, "t": 611.3679809570312, "r": 437.9595299999999, "b": 621.6543579101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9376599788665771, "cells": [{"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}]}, "text": "We can leverage the following AI technology stack for this use case:"}, {"label": "list_item", "id": 8, "page_no": 32, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.53660583496094, "t": 627.9594116210938, "r": 546.68695, "b": 650.2847900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9733057618141174, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images."}, {"label": "list_item", "id": 9, "page_no": 32, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.43955993652344, "t": 657.3218994140625, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}, "confidence": 0.9471306204795837, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow."}, {"label": "list_item", "id": 10, "page_no": 32, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.51890563964844, "t": 673.9837036132812, "r": 543.45294, "b": 696.257805, "coord_origin": "TOPLEFT"}, "confidence": 0.9743932485580444, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation."}, {"label": "list_item", "id": 11, "page_no": 32, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.43861389160156, "t": 703.3480834960938, "r": 516.33087, "b": 713.6216430664062, "coord_origin": "TOPLEFT"}, "confidence": 0.9642981290817261, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OpenCV: A real-time computer vision library that helps perform image processing."}], "body": [{"label": "text", "id": 1, "page_no": 32, "cluster": {"id": 1, "label": "text", "bbox": {"l": 135.8349609375, "t": 70.61254119873047, "r": 540.15765, "b": 104.76904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9836795926094055, "cells": [{"id": 1, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 532.08209, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for ", "bbox": {"l": 136.79961, "t": 83.50885000000017, "r": 540.15765, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "detecting face and body movements and performing angle analytics in real time.", "bbox": {"l": 136.79961, "t": 95.50867000000005, "r": 490.71939, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "CP4D was used to build and deploy the AI-powered video analytics on infant\u2019s motion for health prediction use case on IBM Z. IBM Z with AI accelerator enables faster inference for detecting face and body movements and performing angle analytics in real time."}, {"label": "text", "id": 2, "page_no": 32, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.0093536376953, "t": 116.78787994384766, "r": 542.94446, "b": 162.74072, "coord_origin": "TOPLEFT"}, "confidence": 0.9831726551055908, "cells": [{"id": 4, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for ", "bbox": {"l": 136.79961, "t": 117.52826000000005, "r": 542.94446, "b": 126.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "real-time body pose detection on IBM Z. A deep convolutional neural network architecture ", "bbox": {"l": 136.79961, "t": 129.52808000000005, "r": 535.71661, "b": 138.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "was trained on the task of infant pose estimation on the custom data set by leveraging IBM ", "bbox": {"l": 136.79961, "t": 141.52788999999996, "r": 540.21545, "b": 150.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Cloud Pak for Data. ", "bbox": {"l": 136.79961, "t": 153.52770999999996, "r": 226.73041, "b": 162.74072, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 shows an architectural diagram about how to design and develop an AI model for real-time body pose detection on IBM Z. A deep convolutional neural network architecture was trained on the task of infant pose estimation on the custom data set by leveraging IBM Cloud Pak for Data."}, {"label": "picture", "id": 3, "page_no": 32, "cluster": {"id": 3, "label": "picture", "bbox": {"l": 64.15681457519531, "t": 168.52747, "r": 542.2742309570312, "b": 410.16253662109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9696220755577087, "cells": [{"id": 8, "text": "S", "bbox": {"l": 64.799759, "t": 168.52747, "r": 71.443077, "b": 177.74048000000005, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "caption", "id": 4, "page_no": 32, "cluster": {"id": 4, "label": "caption", "bbox": {"l": 64.36393737792969, "t": 413.5631408691406, "r": 281.63330078125, "b": 422.616455078125, "coord_origin": "TOPLEFT"}, "confidence": 0.9496315121650696, "cells": [{"id": 9, "text": "Figure 24 Architecture for AI-powered video analytics", "bbox": {"l": 64.800003, "t": 414.0779999999999, "r": 281.03314, "b": 422.40302, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 24 Architecture for AI-powered video analytics"}, {"label": "text", "id": 5, "page_no": 32, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9974822998047, "t": 435.3909912109375, "r": 547.31128, "b": 517.7117309570312, "coord_origin": "TOPLEFT"}, "confidence": 0.9883346557617188, "cells": [{"id": 10, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose ", "bbox": {"l": 136.8, "t": 436.06873, "r": 526.35754, "b": 445.28171, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "detection model. This video streaming data was stored in IBM Cloudfi Object Storage for ", "bbox": {"l": 136.8, "t": 448.06854, "r": 532.50073, "b": 457.28152, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "image processing. Video data must be transformed into frames so that the infant\u2019s body ", "bbox": {"l": 136.8, "t": 460.06836, "r": 526.34558, "b": 469.28134, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "poses can be detected. These post-estimation components of the pipeline predict the location ", "bbox": {"l": 136.8, "t": 472.06818, "r": 547.29852, "b": 481.28116, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus ", "bbox": {"l": 136.8, "t": 484.06799, "r": 538.93793, "b": 493.28098, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "two virtual alignment key points. This approach also embraces a compute-intensive heat map ", "bbox": {"l": 136.8, "t": 496.06781, "r": 547.31128, "b": 505.28079, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "prediction of infant body posture. ", "bbox": {"l": 136.8, "t": 508.06763, "r": 284.59744, "b": 517.28061, "coord_origin": "TOPLEFT"}}]}, "text": "Live camera feeds or recorded videos of an infant\u2019s movement are the inputs for a pose detection model. This video streaming data was stored in IBM Cloudfi Object Storage for image processing. Video data must be transformed into frames so that the infant\u2019s body poses can be detected. These post-estimation components of the pipeline predict the location of all 17-person key points with 3 degrees of freedom each (x, y location and visibility) plus two virtual alignment key points. This approach also embraces a compute-intensive heat map prediction of infant body posture."}, {"label": "text", "id": 6, "page_no": 32, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.75706481933594, "t": 529.5070190429688, "r": 539.91718, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9881454706192017, "cells": [{"id": 17, "text": "When changes in body posture or movement happen, analytics can be performed, and a ", "bbox": {"l": 136.8, "t": 530.0274400000001, "r": 530.72687, "b": 539.2404300000001, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "threshold can be set for the angle of the body and posture movements. An analysis can be ", "bbox": {"l": 136.8, "t": 542.02724, "r": 539.72699, "b": 551.24023, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "performed on movement that is based on that threshold to help to predict an infant\u2019s health ", "bbox": {"l": 136.8, "t": 554.0270399999999, "r": 539.91718, "b": 563.24004, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which ", "bbox": {"l": 136.8, "t": 566.02684, "r": 535.18512, "b": 575.23984, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "provides an execution speed in real time on an edge device, which cannot be achieved by ", "bbox": {"l": 136.8, "t": 578.0266399999999, "r": 536.80255, "b": 587.23964, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "other means.", "bbox": {"l": 136.79901, "t": 590.0264400000001, "r": 195.10583, "b": 599.2394400000001, "coord_origin": "TOPLEFT"}}]}, "text": "When changes in body posture or movement happen, analytics can be performed, and a threshold can be set for the angle of the body and posture movements. An analysis can be performed on movement that is based on that threshold to help to predict an infant\u2019s health index in the output video stream by leveraging the IBM z16 on-chip AI acceleration, which provides an execution speed in real time on an edge device, which cannot be achieved by other means."}, {"label": "text", "id": 7, "page_no": 32, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.83775329589844, "t": 611.3679809570312, "r": 437.9595299999999, "b": 621.6543579101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9376599788665771, "cells": [{"id": 23, "text": "We can leverage the following AI technology stack for this use case:", "bbox": {"l": 136.79901, "t": 612.04601, "r": 437.9595299999999, "b": 621.259, "coord_origin": "TOPLEFT"}}]}, "text": "We can leverage the following AI technology stack for this use case:"}, {"label": "list_item", "id": 8, "page_no": 32, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.53660583496094, "t": 627.9594116210938, "r": 546.68695, "b": 650.2847900390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9733057618141174, "cells": [{"id": 24, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 629.17522, "r": 141.77901, "b": 637.94997, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Convolutional neural network: Build an artificial neural network model on video streaming ", "bbox": {"l": 151.19917, "t": 629.0258200000001, "r": 546.68695, "b": 638.23882, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "and images.", "bbox": {"l": 151.19917, "t": 641.02562, "r": 205.66942, "b": 650.23862, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Convolutional neural network: Build an artificial neural network model on video streaming and images."}, {"label": "list_item", "id": 9, "page_no": 32, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.43955993652344, "t": 657.3218994140625, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}, "confidence": 0.9471306204795837, "cells": [{"id": 27, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 658.2145800000001, "r": 141.77901, "b": 666.98934, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "TensorFlow: A DL back-end framework that is based on TensorFlow.", "bbox": {"l": 151.19917, "t": 658.06519, "r": 455.6933, "b": 667.27818, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH TensorFlow: A DL back-end framework that is based on TensorFlow."}, {"label": "list_item", "id": 10, "page_no": 32, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 135.51890563964844, "t": 673.9837036132812, "r": 543.45294, "b": 696.257805, "coord_origin": "TOPLEFT"}, "confidence": 0.9743932485580444, "cells": [{"id": 29, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 675.1944, "r": 141.77901, "b": 683.96915, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Mediapipe: A library that helps with video streaming processing and prediction of human ", "bbox": {"l": 151.19917, "t": 675.04499, "r": 543.45294, "b": 684.258, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "pose estimation.", "bbox": {"l": 151.19917, "t": 687.0448, "r": 223.97094999999996, "b": 696.257805, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Mediapipe: A library that helps with video streaming processing and prediction of human pose estimation."}, {"label": "list_item", "id": 11, "page_no": 32, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.43861389160156, "t": 703.3480834960938, "r": 516.33087, "b": 713.6216430664062, "coord_origin": "TOPLEFT"}, "confidence": 0.9642981290817261, "cells": [{"id": 32, "text": "GLYPH", "bbox": {"l": 136.79901, "t": 704.174011, "r": 141.77901, "b": 712.948769, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "OpenCV: A real-time computer vision library that helps perform image processing. ", "bbox": {"l": 151.19917, "t": 704.024605, "r": 516.33087, "b": 713.23761, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH OpenCV: A real-time computer vision library that helps perform image processing."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 32, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5228881835938, "t": 754.3223266601562, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9154198169708252, "cells": [{"id": 0, "text": "31", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "31"}]}}, {"page_no": 33, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.16203308105469, "t": 754.4970092773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9191343188285828, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.21607208251953, "t": 754.80419921875, "r": 267.0744, "b": 764.0835571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557995200157166, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.99948120117188, "t": 70.72982025146484, "r": 542.36017, "b": 104.7628173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9821197390556335, "cells": [{"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.3565673828125, "t": 132.1417236328125, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9596555233001709, "cells": [{"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6084747314453, "t": 164.60169982910156, "r": 547.23254, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9761157631874084, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.61322021484375, "t": 193.5091094970703, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.925189197063446, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.7628173828125, "t": 210.79263305664062, "r": 518.55884, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.977351188659668, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.3540802001953, "t": 240.1075897216797, "r": 527.84058, "b": 261.9636535644531, "coord_origin": "TOPLEFT"}, "confidence": 0.9783041477203369, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.2523193359375, "t": 268.774658203125, "r": 539.96179, "b": 290.71991, "coord_origin": "TOPLEFT"}, "confidence": 0.976689338684082, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 151.19593811035156, "t": 297.4288330078125, "r": 547.26764, "b": 343.69916, "coord_origin": "TOPLEFT"}, "confidence": 0.9813570976257324, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 165.18856811523438, "t": 350.73284912109375, "r": 547.19281, "b": 372.73856, "coord_origin": "TOPLEFT"}, "confidence": 0.9013206958770752, "cells": [{"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.41288757324219, "t": 400.2530212402344, "r": 137.74366760253906, "b": 416.2667236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9588590264320374, "cells": [{"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.86285400390625, "t": 432.6907043457031, "r": 547.16486, "b": 538.8106079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9881507158279419, "cells": [{"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "section_header", "bbox": {"l": 64.06120300292969, "t": 558.3284301757812, "r": 114.58550262451172, "b": 571.36263, "coord_origin": "TOPLEFT"}, "confidence": 0.9354433417320251, "cells": [{"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 135.81004333496094, "t": 584.623046875, "r": 538.57349, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9726653099060059, "cells": [{"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 135.75830078125, "t": 618.4910888671875, "r": 547.24359, "b": 676.8506469726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9839816689491272, "cells": [{"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16203308105469, "t": 754.4970092773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9191343188285828, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21607208251953, "t": 754.80419921875, "r": 267.0744, "b": 764.0835571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557995200157166, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.99948120117188, "t": 70.72982025146484, "r": 542.36017, "b": 104.7628173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9821197390556335, "cells": [{"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions."}, {"label": "section_header", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3565673828125, "t": 132.1417236328125, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9596555233001709, "cells": [{"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Additional resources"}, {"label": "list_item", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6084747314453, "t": 164.60169982910156, "r": 547.23254, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9761157631874084, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z."}, {"label": "list_item", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.61322021484375, "t": 193.5091094970703, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.925189197063446, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Cloud Pak for Data Tutorials."}, {"label": "list_item", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7628173828125, "t": 210.79263305664062, "r": 518.55884, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.977351188659668, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE:"}, {"label": "list_item", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.3540802001953, "t": 240.1075897216797, "r": 527.84058, "b": 261.9636535644531, "coord_origin": "TOPLEFT"}, "confidence": 0.9783041477203369, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case."}, {"label": "list_item", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.2523193359375, "t": 268.774658203125, "r": 539.96179, "b": 290.71991, "coord_origin": "TOPLEFT"}, "confidence": 0.976689338684082, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}]}, "text": "-Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case."}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.19593811035156, "t": 297.4288330078125, "r": 547.26764, "b": 343.69916, "coord_origin": "TOPLEFT"}, "confidence": 0.9813570976257324, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case."}, {"label": "text", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "text", "bbox": {"l": 165.18856811523438, "t": 350.73284912109375, "r": 547.19281, "b": 372.73856, "coord_origin": "TOPLEFT"}, "confidence": 0.9013206958770752, "cells": [{"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}]}, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.41288757324219, "t": 400.2530212402344, "r": 137.74366760253906, "b": 416.2667236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9588590264320374, "cells": [{"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.86285400390625, "t": 432.6907043457031, "r": 547.16486, "b": 538.8106079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9881507158279419, "cells": [{"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "section_header", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.06120300292969, "t": 558.3284301757812, "r": 114.58550262451172, "b": 571.36263, "coord_origin": "TOPLEFT"}, "confidence": 0.9354433417320251, "cells": [{"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.81004333496094, "t": 584.623046875, "r": 538.57349, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9726653099060059, "cells": [{"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "This publication was produced by a team of specialists from around the world working with the IBM Redbooks team:"}, {"label": "text", "id": 15, "page_no": 33, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.75830078125, "t": 618.4910888671875, "r": 547.24359, "b": 676.8506469726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9839816689491272, "cells": [{"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management."}], "body": [{"label": "text", "id": 2, "page_no": 33, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.99948120117188, "t": 70.72982025146484, "r": 542.36017, "b": 104.7628173828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9821197390556335, "cells": [{"id": 2, "text": "WML was used for deployment of the pose detection model and generated notifications to ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 536.31464, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "users with web and mobile applications, and it integrates with Fitbit for push notifications so ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 542.36017, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "that hospitals and parents can take preventive actions. ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 380.7294, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "WML was used for deployment of the pose detection model and generated notifications to users with web and mobile applications, and it integrates with Fitbit for push notifications so that hospitals and parents can take preventive actions."}, {"label": "section_header", "id": 3, "page_no": 33, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.3565673828125, "t": 132.1417236328125, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.9596555233001709, "cells": [{"id": 5, "text": "Additional resources", "bbox": {"l": 64.800003, "t": 133.20068000000003, "r": 223.86055, "b": 147.96367999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Additional resources"}, {"label": "list_item", "id": 4, "page_no": 33, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6084747314453, "t": 164.60169982910156, "r": 547.23254, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9761157631874084, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 165.67809999999997, "r": 141.78, "b": 174.45288000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some ", "bbox": {"l": 151.20016, "t": 165.52868999999998, "r": 547.23254, "b": 174.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "of the more important features of CP4D on IBM Z. ", "bbox": {"l": 151.20016, "t": 177.5285, "r": 374.5701, "b": 186.74152000000004, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The Cloud Pak for Data 4.5 on IBM Z Overview Demo video provides an overview of some of the more important features of CP4D on IBM Z."}, {"label": "list_item", "id": 5, "page_no": 33, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.61322021484375, "t": 193.5091094970703, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.925189197063446, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.8, "t": 194.65770999999995, "r": 141.78, "b": 203.4325, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "IBM Cloud Pak for Data Tutorials.", "bbox": {"l": 151.20016, "t": 194.50829999999996, "r": 300.06931, "b": 203.72131000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH IBM Cloud Pak for Data Tutorials."}, {"label": "list_item", "id": 6, "page_no": 33, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.7628173828125, "t": 210.79263305664062, "r": 518.55884, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.977351188659668, "cells": [{"id": 11, "text": "GLYPH", "bbox": {"l": 136.79999, "t": 211.63751000000002, "r": 141.77998, "b": 220.41228999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Here are some additional use cases that use the data science frameworks that are ", "bbox": {"l": 151.20015, "t": 211.48810000000003, "r": 518.55884, "b": 220.70110999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "available as part of CP4D on IBM Z and IBM LinuxONE:", "bbox": {"l": 151.20015, "t": 223.48792000000003, "r": 399.04178, "b": 232.70092999999997, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Here are some additional use cases that use the data science frameworks that are available as part of CP4D on IBM Z and IBM LinuxONE:"}, {"label": "list_item", "id": 7, "page_no": 33, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.3540802001953, "t": 240.1075897216797, "r": 527.84058, "b": 261.9636535644531, "coord_origin": "TOPLEFT"}, "confidence": 0.9783041477203369, "cells": [{"id": 14, "text": "-", "bbox": {"l": 152.03978, "t": 240.52747, "r": 157.60841, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM ", "bbox": {"l": 165.59932, "t": 240.52747, "r": 527.84058, "b": 249.74048000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "LinuxONE is a payment card fraud detection use case.", "bbox": {"l": 165.6003, "t": 252.52728000000002, "r": 407.28174, "b": 261.74030000000005, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Detection by using TensorFlow on CP4D on IBM Z and IBM LinuxONE is a payment card fraud detection use case."}, {"label": "list_item", "id": 8, "page_no": 33, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.2523193359375, "t": 268.774658203125, "r": 539.96179, "b": 290.71991, "coord_origin": "TOPLEFT"}, "confidence": 0.976689338684082, "cells": [{"id": 17, "text": "-", "bbox": {"l": 152.04077, "t": 269.50708, "r": 157.57953, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z ", "bbox": {"l": 165.60031, "t": 269.50708, "r": 539.96179, "b": 278.72009, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "and IBM LinuxONE is a Fashion-MNIST clothing classification use case.", "bbox": {"l": 165.60031, "t": 281.50693, "r": 484.39898999999997, "b": 290.71991, "coord_origin": "TOPLEFT"}}]}, "text": "-Fashion-MNIST clothing classification with PyTorch on Cloud Pak for Data on IBM Z and IBM LinuxONE is a Fashion-MNIST clothing classification use case."}, {"label": "list_item", "id": 9, "page_no": 33, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 151.19593811035156, "t": 297.4288330078125, "r": 547.26764, "b": 343.69916, "coord_origin": "TOPLEFT"}, "confidence": 0.9813570976257324, "cells": [{"id": 20, "text": "-", "bbox": {"l": 152.03976, "t": 298.48672, "r": 157.57753, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red ", "bbox": {"l": 165.5993, "t": 298.48672, "r": 547.26764, "b": 307.69971, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the ", "bbox": {"l": 165.5993, "t": 310.48654, "r": 543.95587, "b": 319.69952, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "z16", "bbox": {"l": 165.5993, "t": 322.48635999999993, "r": 181.70822, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "integrated AI accelerator describes a use case that uses Snap Machine Learning ", "bbox": {"l": 184.48631, "t": 322.48635999999993, "r": 544.4187, "b": 331.69934, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case.", "bbox": {"l": 165.5993, "t": 334.48618000000005, "r": 510.15149, "b": 343.69916, "coord_origin": "TOPLEFT"}}]}, "text": "-Payment Card Fraud Prevention by using Snap ML on IBM Cloud Pak for Data on Red Hat OpenShift on a virtual machine on IBM Z and IBM LinuxONE, which leverage the z16 integrated AI accelerator describes a use case that uses Snap Machine Learning in Cloud Pak for Data on IBM Z and IBM LinuxONE. It is a Snap ML use case."}, {"label": "text", "id": 10, "page_no": 33, "cluster": {"id": 10, "label": "text", "bbox": {"l": 165.18856811523438, "t": 350.73284912109375, "r": 547.19281, "b": 372.73856, "coord_origin": "TOPLEFT"}, "confidence": 0.9013206958770752, "cells": [{"id": 26, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on ", "bbox": {"l": 165.5993, "t": 351.52576, "r": 547.19281, "b": 360.73874, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "IBM Cloud Pak for Data on IBM Z and IBM LinuxONE.", "bbox": {"l": 165.59933, "t": 363.52557, "r": 405.00787, "b": 372.73856, "coord_origin": "TOPLEFT"}}]}, "text": "A companion video can be found at Credit Card Fraud Detection by using Snap ML on IBM Cloud Pak for Data on IBM Z and IBM LinuxONE."}, {"label": "section_header", "id": 11, "page_no": 33, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.41288757324219, "t": 400.2530212402344, "r": 137.74366760253906, "b": 416.2667236328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9588590264320374, "cells": [{"id": 28, "text": "Summary", "bbox": {"l": 64.800003, "t": 401.2207, "r": 137.60794, "b": 415.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Summary"}, {"label": "text", "id": 12, "page_no": 33, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.86285400390625, "t": 432.6907043457031, "r": 547.16486, "b": 538.8106079101562, "coord_origin": "TOPLEFT"}, "confidence": 0.9881507158279419, "cells": [{"id": 29, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on ", "bbox": {"l": 136.8, "t": 433.48874, "r": 541.99463, "b": 442.70172, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and ", "bbox": {"l": 136.8, "t": 445.48856, "r": 537.89514, "b": 454.70154, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "instantiate highly efficient analytics deployment on IBM LinuxONE. This publication ", "bbox": {"l": 136.8, "t": 457.48837000000003, "r": 505.11172000000005, "b": 466.70135, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "demonstrated these tasks by guiding the reader through five common use cases where CP4D ", "bbox": {"l": 136.8, "t": 469.48819, "r": 547.16486, "b": 478.70117, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, ", "bbox": {"l": 136.80002, "t": 481.54776, "r": 542.92505, "b": 490.76074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "and showing how the associated features can help an enterprise to build AI and ML models ", "bbox": {"l": 136.80002, "t": 493.54758, "r": 542.98291, "b": 502.76056, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "with core transactional data, which results in a highly efficient analytics deployment that ", "bbox": {"l": 136.80002, "t": 505.54739, "r": 525.14935, "b": 514.7603799999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "minimizes latency, cost inefficiencies, and potential security exposures that are connected ", "bbox": {"l": 136.8, "t": 517.54721, "r": 536.83246, "b": 526.76019, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "with data transportation.", "bbox": {"l": 136.8, "t": 529.547, "r": 243.47458999999998, "b": 538.76001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redbooksfi publication presented an overview of how IBM Cloud Pak for Data on IBM Z can modernize your data infrastructure; develop and deploy ML and AI models; and instantiate highly efficient analytics deployment on IBM LinuxONE. This publication demonstrated these tasks by guiding the reader through five common use cases where CP4D on IBM Z and IBM LinuxONE uses the different features that are supported on the platform, and showing how the associated features can help an enterprise to build AI and ML models with core transactional data, which results in a highly efficient analytics deployment that minimizes latency, cost inefficiencies, and potential security exposures that are connected with data transportation."}, {"label": "section_header", "id": 13, "page_no": 33, "cluster": {"id": 13, "label": "section_header", "bbox": {"l": 64.06120300292969, "t": 558.3284301757812, "r": 114.58550262451172, "b": 571.36263, "coord_origin": "TOPLEFT"}, "confidence": 0.9354433417320251, "cells": [{"id": 38, "text": "Authors", "bbox": {"l": 64.800003, "t": 559.37462, "r": 114.55733, "b": 571.36263, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 14, "page_no": 33, "cluster": {"id": 14, "label": "text", "bbox": {"l": 135.81004333496094, "t": 584.623046875, "r": 538.57349, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9726653099060059, "cells": [{"id": 39, "text": "This publication was produced by a team of specialists from around the world working with ", "bbox": {"l": 136.8, "t": 585.52863, "r": 538.57349, "b": 594.74162, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "the IBM Redbooks team:", "bbox": {"l": 136.8, "t": 597.52843, "r": 246.82411, "b": 606.7414200000001, "coord_origin": "TOPLEFT"}}]}, "text": "This publication was produced by a team of specialists from around the world working with the IBM Redbooks team:"}, {"label": "text", "id": 15, "page_no": 33, "cluster": {"id": 15, "label": "text", "bbox": {"l": 135.75830078125, "t": 618.4910888671875, "r": 547.24359, "b": 676.8506469726562, "coord_origin": "TOPLEFT"}, "confidence": 0.9839816689491272, "cells": [{"id": 41, "text": "Jasmeet Bhatia is ", "bbox": {"l": 136.8, "t": 619.54799, "r": 223.98090000000002, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "an AI on IBM Z Product Manager who supports CP4D on ", "bbox": {"l": 223.97989, "t": 619.54799, "r": 478.39406999999994, "b": 628.76099, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. ", "bbox": {"l": 136.8, "t": 631.54779, "r": 547.24359, "b": 640.76079, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data ", "bbox": {"l": 136.8, "t": 643.54759, "r": 521.87842, "b": 652.76059, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Science. She is working on her Master of Science degree in Data Science. Her area of ", "bbox": {"l": 136.8, "t": 655.54739, "r": 521.88837, "b": 664.76039, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "expertise includes AI, data science, and product management.", "bbox": {"l": 136.8, "t": 667.5472, "r": 413.00677, "b": 676.7601999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Jasmeet Bhatia is an AI on IBM Z Product Manager who supports CP4D on IBM Z. She has 2.5 years of combined experience as a data scientist and a product manager. Jasmeet lives in San Francisco, California and holds a Bachelor of Arts degree in Data Science. She is working on her Master of Science degree in Data Science. Her area of expertise includes AI, data science, and product management."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 33, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.16203308105469, "t": 754.4970092773438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9191343188285828, "cells": [{"id": 0, "text": "32 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "32"}, {"label": "page_footer", "id": 1, "page_no": 33, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.21607208251953, "t": 754.80419921875, "r": 267.0744, "b": 764.0835571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557995200157166, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 34, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 535.5333251953125, "t": 754.4071655273438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9167296290397644, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 136.0478515625, "t": 70.53443145751953, "r": 546.04022, "b": 140.83328247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9852789640426636, "cells": [{"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.68675231933594, "t": 152.5322265625, "r": 546.88873, "b": 222.97750854492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9867506623268127, "cells": [{"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.7921600341797, "t": 234.6200714111328, "r": 547.2561, "b": 353.1026306152344, "coord_origin": "TOPLEFT"}, "confidence": 0.982275128364563, "cells": [{"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.95065307617188, "t": 364.7558288574219, "r": 432.83963000000006, "b": 374.9332580566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9391803741455078, "cells": [{"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.16671752929688, "t": 386.804443359375, "r": 314.3034973144531, "b": 408.9226379394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6201915740966797, "cells": [{"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.28025817871094, "t": 420.2625427246094, "r": 364.17230224609375, "b": 442.6965, "coord_origin": "TOPLEFT"}, "confidence": 0.6776076555252075, "cells": [{"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.87332153320312, "t": 454.5150146484375, "r": 537.76233, "b": 476.71588, "coord_origin": "TOPLEFT"}, "confidence": 0.9579671621322632, "cells": [{"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "section_header", "bbox": {"l": 64.67491912841797, "t": 496.37939453125, "r": 349.12164, "b": 509.6957702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9542936682701111, "cells": [{"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 135.876953125, "t": 522.6715698242188, "r": 547.34802, "b": 604.76054, "coord_origin": "TOPLEFT"}, "confidence": 0.9869086146354675, "cells": [{"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.39222717285156, "t": 616.6399536132812, "r": 547.34314, "b": 626.9110107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9211773872375488, "cells": [{"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 136.80099, "t": 634.2457275390625, "r": 301.6788, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.8940768241882324, "cells": [{"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5333251953125, "t": 754.4071655273438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9167296290397644, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}, {"label": "text", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "text", "bbox": {"l": 136.0478515625, "t": 70.53443145751953, "r": 546.04022, "b": 140.83328247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9852789640426636, "cells": [{"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.68675231933594, "t": 152.5322265625, "r": 546.88873, "b": 222.97750854492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9867506623268127, "cells": [{"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7921600341797, "t": 234.6200714111328, "r": 547.2561, "b": 353.1026306152344, "coord_origin": "TOPLEFT"}, "confidence": 0.982275128364563, "cells": [{"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization."}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95065307617188, "t": 364.7558288574219, "r": 432.83963000000006, "b": 374.9332580566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9391803741455078, "cells": [{"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.16671752929688, "t": 386.804443359375, "r": 314.3034973144531, "b": 408.9226379394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6201915740966797, "cells": [{"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}]}, "text": "Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center"}, {"label": "text", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28025817871094, "t": 420.2625427246094, "r": 364.17230224609375, "b": 442.6965, "coord_origin": "TOPLEFT"}, "confidence": 0.6776076555252075, "cells": [{"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}]}, "text": "Shin Kelly Yang, AI on IBM Z Product Management IBM US"}, {"label": "text", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87332153320312, "t": 454.5150146484375, "r": 537.76233, "b": 476.71588, "coord_origin": "TOPLEFT"}, "confidence": 0.9579671621322632, "cells": [{"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}]}, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM"}, {"label": "section_header", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.67491912841797, "t": 496.37939453125, "r": 349.12164, "b": 509.6957702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9542936682701111, "cells": [{"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.876953125, "t": 522.6715698242188, "r": 547.34802, "b": 604.76054, "coord_origin": "TOPLEFT"}, "confidence": 0.9869086146354675, "cells": [{"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.39222717285156, "t": 616.6399536132812, "r": 547.34314, "b": 626.9110107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9211773872375488, "cells": [{"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.80099, "t": 634.2457275390625, "r": 301.6788, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.8940768241882324, "cells": [{"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}], "body": [{"label": "text", "id": 1, "page_no": 34, "cluster": {"id": 1, "label": "text", "bbox": {"l": 136.0478515625, "t": 70.53443145751953, "r": 546.04022, "b": 140.83328247070312, "coord_origin": "TOPLEFT"}, "confidence": 0.9852789640426636, "cells": [{"id": 1, "text": "Ravi Gummadi ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 209.51355, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in ", "bbox": {"l": 209.5793, "t": 71.50903000000005, "r": 534.02026, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "India. He has 18+ years of experience in the design and development of enterprise software ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 546.04022, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 531.25623, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "computer science and engineering from the Indian Institute of Technology Madras (IIT ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 519.07434, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Madras). His areas of expertise include compilers, virtualization, big data analytics, ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 505.08148, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "containers, data, and AI, with a special focus on open-source ecosystems. ", "bbox": {"l": 136.79855, "t": 131.50811999999996, "r": 467.94659, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Ravi Gummadi is a Technical Leader for CP4D on Linux on IBM Z and IBM LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software for various platforms, including IBM Z and IBM LinuxONE. He holds a master\u2019s degree in computer science and engineering from the Indian Institute of Technology Madras (IIT Madras). His areas of expertise include compilers, virtualization, big data analytics, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 2, "page_no": 34, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.68675231933594, "t": 152.5322265625, "r": 546.88873, "b": 222.97750854492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9867506623268127, "cells": [{"id": 8, "text": "Chandra Shekhar Reddy Potula ", "bbox": {"l": 136.79855, "t": 153.52770999999996, "r": 288.96045, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "is a Lead AI on zSystems team Architect for Linux on IBM ", "bbox": {"l": 288.95847, "t": 153.52770999999996, "r": 546.88873, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Z and LinuxONE in India. He has 18+ years of experience in the design and development of ", "bbox": {"l": 136.79855, "t": 165.52752999999996, "r": 545.47125, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He ", "bbox": {"l": 136.79857, "t": 177.52733999999998, "r": 538.87372, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "holds a degree in computer science of engineering from Jawaharlal Nehru Technological ", "bbox": {"l": 136.79857, "t": 189.52715999999998, "r": 531.29541, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "University (JNTU). His areas of expertise include networking, virtualization, containers, data, ", "bbox": {"l": 136.79857, "t": 201.52697999999998, "r": 546.87366, "b": 210.73999000000003, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "and AI, with a special focus on open-source ecosystems.", "bbox": {"l": 136.79857, "t": 213.52679, "r": 388.51468, "b": 222.73981000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Chandra Shekhar Reddy Potula is a Lead AI on zSystems team Architect for Linux on IBM Z and LinuxONE in India. He has 18+ years of experience in the design and development of enterprise software and firmware for various platforms, including IBM Z and LinuxONE. He holds a degree in computer science of engineering from Jawaharlal Nehru Technological University (JNTU). His areas of expertise include networking, virtualization, containers, data, and AI, with a special focus on open-source ecosystems."}, {"label": "text", "id": 3, "page_no": 34, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.7921600341797, "t": 234.6200714111328, "r": 547.2561, "b": 353.1026306152344, "coord_origin": "TOPLEFT"}, "confidence": 0.982275128364563, "cells": [{"id": 15, "text": "Srirama Sharma ", "bbox": {"l": 136.79857, "t": 235.48657000000003, "r": 216.27138, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, ", "bbox": {"l": 216.23852999999997, "t": 235.48657000000003, "r": 499.78781, "b": 244.69957999999997, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on ", "bbox": {"l": 136.79855, "t": 247.48639000000003, "r": 547.2561, "b": 256.69939999999997, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and ", "bbox": {"l": 136.79855, "t": 259.48621, "r": 534.36774, "b": 268.69921999999997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. ", "bbox": {"l": 136.79854, "t": 271.48602000000005, "r": 547.16455, "b": 280.69904, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. ", "bbox": {"l": 136.79854, "t": 283.48587, "r": 528.54132, "b": 292.69885, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya ", "bbox": {"l": 136.79854, "t": 295.4856899999999, "r": 529.62482, "b": 304.69867, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise ", "bbox": {"l": 136.79854, "t": 307.4855, "r": 530.67371, "b": 316.69849, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "include UNIX and Linux systems programming, virtualization, performance benchmarking of ", "bbox": {"l": 136.79854, "t": 319.48532, "r": 544.58588, "b": 328.69829999999996, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Financial Services Sector (FSS) industry solutions, open-source ecosystems, server ", "bbox": {"l": 136.79854, "t": 331.48514, "r": 511.23675999999995, "b": 340.69812, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "infrastructure, and cloud-native adoption and modernization.", "bbox": {"l": 136.79855, "t": 343.48495, "r": 402.9985, "b": 352.69794, "coord_origin": "TOPLEFT"}}]}, "text": "Srirama Sharma is a Lead Technical Architect for IBM Cloud Pak, IBM Instanafi, IBM Turbonomicfi, and Red Hat Advanced Cluster Management for Kubernetes (RHACM) on IBM Z and LinuxONE. He has 18+ years of experience in UNIX and Linux application and device driver development. He designs ISV solutions on IBM Systems and IBM Blockchainfi. He also works on cloud-native adoption of enterprise solutions on IBM Z and LinuxONE. Srirama holds a Bachelor of Engineering degree in computer science from Visvesvaraya Technological University (VTU). He lives in Bangalore, Karnataka. His areas of expertise include UNIX and Linux systems programming, virtualization, performance benchmarking of Financial Services Sector (FSS) industry solutions, open-source ecosystems, server infrastructure, and cloud-native adoption and modernization."}, {"label": "text", "id": 4, "page_no": 34, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.95065307617188, "t": 364.7558288574219, "r": 432.83963000000006, "b": 374.9332580566406, "coord_origin": "TOPLEFT"}, "confidence": 0.9391803741455078, "cells": [{"id": 26, "text": "Thanks to the following people for their contributions to this project:", "bbox": {"l": 136.79855, "t": 365.50452, "r": 432.83963000000006, "b": 374.7174999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Thanks to the following people for their contributions to this project:"}, {"label": "text", "id": 5, "page_no": 34, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.16671752929688, "t": 386.804443359375, "r": 314.3034973144531, "b": 408.9226379394531, "coord_origin": "TOPLEFT"}, "confidence": 0.6201915740966797, "cells": [{"id": 27, "text": "Lydia Parziale, Project Manager", "bbox": {"l": 136.79855, "t": 387.52408, "r": 278.39786, "b": 396.73706, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Redbooks, Poughkeepsie Center", "bbox": {"l": 136.79855, "t": 399.52389999999997, "r": 313.98096, "b": 408.73688, "coord_origin": "TOPLEFT"}}]}, "text": "Lydia Parziale, Project Manager IBM Redbooks, Poughkeepsie Center"}, {"label": "text", "id": 6, "page_no": 34, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.28025817871094, "t": 420.2625427246094, "r": 364.17230224609375, "b": 442.6965, "coord_origin": "TOPLEFT"}, "confidence": 0.6776076555252075, "cells": [{"id": 29, "text": "Shin Kelly Yang, AI on IBM Z Product Management", "bbox": {"l": 136.79855, "t": 421.4837, "r": 364.06973, "b": 430.69669, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "IBM US", "bbox": {"l": 136.79855, "t": 433.48352, "r": 171.76115, "b": 442.6965, "coord_origin": "TOPLEFT"}}]}, "text": "Shin Kelly Yang, AI on IBM Z Product Management IBM US"}, {"label": "text", "id": 7, "page_no": 34, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.87332153320312, "t": 454.5150146484375, "r": 537.76233, "b": 476.71588, "coord_origin": "TOPLEFT"}, "confidence": 0.9579671621322632, "cells": [{"id": 31, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, ", "bbox": {"l": 136.79855, "t": 455.50308, "r": 537.76233, "b": 464.71606, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "IBM", "bbox": {"l": 136.79855, "t": 467.5029, "r": 155.05524, "b": 476.71588, "coord_origin": "TOPLEFT"}}]}, "text": "Tom Ramey, Anna Shugol, Andrew Sica, Jonathan Sloan, Elpida Tzortzatos, Meeta Vouk, IBM"}, {"label": "section_header", "id": 8, "page_no": 34, "cluster": {"id": 8, "label": "section_header", "bbox": {"l": 64.67491912841797, "t": 496.37939453125, "r": 349.12164, "b": 509.6957702636719, "coord_origin": "TOPLEFT"}, "confidence": 0.9542936682701111, "cells": [{"id": 33, "text": "Now you can become a published author, too!", "bbox": {"l": 64.800003, "t": 497.39474, "r": 349.12164, "b": 509.38272, "coord_origin": "TOPLEFT"}}]}, "text": "Now you can become a published author, too!"}, {"label": "text", "id": 9, "page_no": 34, "cluster": {"id": 9, "label": "text", "bbox": {"l": 135.876953125, "t": 522.6715698242188, "r": 547.34802, "b": 604.76054, "coord_origin": "TOPLEFT"}, "confidence": 0.9869086146354675, "cells": [{"id": 34, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published ", "bbox": {"l": 136.8, "t": 523.54874, "r": 527.30768, "b": 532.76172, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "author-all at the same time! Join an IBM Redbooks residency project and help write a book ", "bbox": {"l": 136.80099, "t": 535.54852, "r": 546.79138, "b": 544.76154, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "in your area of expertise, while honing your experience using leading-edge technologies. Your ", "bbox": {"l": 136.80099, "t": 547.54834, "r": 547.34802, "b": 556.76134, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "efforts will help to increase product acceptance and customer satisfaction, as you expand ", "bbox": {"l": 136.80099, "t": 559.54814, "r": 533.99384, "b": 568.7611400000001, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "your network of technical contacts and relationships. Residencies run from two to six weeks ", "bbox": {"l": 136.80099, "t": 571.54794, "r": 544.09027, "b": 580.76094, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "in length, and you can participate either in person or as a remote resident working from your ", "bbox": {"l": 136.80099, "t": 583.54774, "r": 545.73767, "b": 592.7607399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "home base. ", "bbox": {"l": 136.80099, "t": 595.54755, "r": 191.81908, "b": 604.76054, "coord_origin": "TOPLEFT"}}]}, "text": "Here\u2019s an opportunity to spotlight your skills, grow your career, and become a published author-all at the same time! Join an IBM Redbooks residency project and help write a book in your area of expertise, while honing your experience using leading-edge technologies. Your efforts will help to increase product acceptance and customer satisfaction, as you expand your network of technical contacts and relationships. Residencies run from two to six weeks in length, and you can participate either in person or as a remote resident working from your home base."}, {"label": "text", "id": 10, "page_no": 34, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.39222717285156, "t": 616.6399536132812, "r": 547.34314, "b": 626.9110107421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9211773872375488, "cells": [{"id": 41, "text": "Find out more about the residency program, browse the residency index, and apply online at:", "bbox": {"l": 136.80099, "t": 617.50735, "r": 547.34314, "b": 626.72035, "coord_origin": "TOPLEFT"}}]}, "text": "Find out more about the residency program, browse the residency index, and apply online at:"}, {"label": "text", "id": 11, "page_no": 34, "cluster": {"id": 11, "label": "text", "bbox": {"l": 136.80099, "t": 634.2457275390625, "r": 301.6788, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}, "confidence": 0.8940768241882324, "cells": [{"id": 42, "text": "ibm.com", "bbox": {"l": 136.80099, "t": 634.69632, "r": 171.7805, "b": 643.5208700000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "/redbooks/residencies.html", "bbox": {"l": 171.78052, "t": 634.69632, "r": 301.6788, "b": 643.47107, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks/residencies.html"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 34, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 535.5333251953125, "t": 754.4071655273438, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9167296290397644, "cells": [{"id": 0, "text": "33", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "33"}]}}, {"page_no": 35, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.23326110839844, "t": 754.4552612304688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9102703928947449, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.27912139892578, "t": 754.7698974609375, "r": 267.0744, "b": 764.12158203125, "coord_origin": "TOPLEFT"}, "confidence": 0.950810968875885, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.4889907836914, "t": 70.36857604980469, "r": 270.48557, "b": 83.64260864257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9555448889732361, "cells": [{"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "list_item", "bbox": {"l": 135.56192016601562, "t": 96.5151596069336, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}, "confidence": 0.8996357917785645, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 150.71234130859375, "t": 114.1937255859375, "r": 391.07678, "b": 123.93498229980469, "coord_origin": "TOPLEFT"}, "confidence": 0.6805561184883118, "cells": [{"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.51414489746094, "t": 130.8223114013672, "r": 546.83832, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9532178640365601, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 150.69110107421875, "t": 159.39158630371094, "r": 451.35418701171875, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.676043689250946, "cells": [{"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.90457153320312, "t": 176.64987182617188, "r": 430.14783, "b": 187.12718200683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9175106287002563, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 150.6310272216797, "t": 193.73944091796875, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.7000716924667358, "cells": [{"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.23326110839844, "t": 754.4552612304688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9102703928947449, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27912139892578, "t": 754.7698974609375, "r": 267.0744, "b": 764.12158203125, "coord_origin": "TOPLEFT"}, "confidence": 0.950810968875885, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4889907836914, "t": 70.36857604980469, "r": 270.48557, "b": 83.64260864257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9555448889732361, "cells": [{"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.56192016601562, "t": 96.5151596069336, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}, "confidence": 0.8996357917785645, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on LinkedIn:"}, {"label": "text", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.71234130859375, "t": 114.1937255859375, "r": 391.07678, "b": 123.93498229980469, "coord_origin": "TOPLEFT"}, "confidence": 0.6805561184883118, "cells": [{"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51414489746094, "t": 130.8223114013672, "r": 546.83832, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9532178640365601, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "list_item", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 150.69110107421875, "t": 159.39158630371094, "r": 451.35418701171875, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.676043689250946, "cells": [{"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.90457153320312, "t": 176.64987182617188, "r": 430.14783, "b": 187.12718200683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9175106287002563, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.6310272216797, "t": 193.73944091796875, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.7000716924667358, "cells": [{"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "body": [{"label": "section_header", "id": 2, "page_no": 35, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.4889907836914, "t": 70.36857604980469, "r": 270.48557, "b": 83.64260864257812, "coord_origin": "TOPLEFT"}, "confidence": 0.9555448889732361, "cells": [{"id": 2, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 270.48557, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Stay connected to IBM Redbooks"}, {"label": "list_item", "id": 3, "page_no": 35, "cluster": {"id": 3, "label": "list_item", "bbox": {"l": 135.56192016601562, "t": 96.5151596069336, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}, "confidence": 0.8996357917785645, "cells": [{"id": 3, "text": "GLYPH", "bbox": {"l": 136.8, "t": 97.63812000000007, "r": 141.78, "b": 106.41289999999992, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Find us on LinkedIn:", "bbox": {"l": 151.20016, "t": 97.48870999999997, "r": 241.26647999999997, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Find us on LinkedIn:"}, {"label": "text", "id": 4, "page_no": 35, "cluster": {"id": 4, "label": "text", "bbox": {"l": 150.71234130859375, "t": 114.1937255859375, "r": 391.07678, "b": 123.93498229980469, "coord_origin": "TOPLEFT"}, "confidence": 0.6805561184883118, "cells": [{"id": 5, "text": "http://www.linkedin.com/groups?home=&gid=2130806", "bbox": {"l": 151.20016, "t": 114.67767000000003, "r": 391.07678, "b": 123.45245, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.linkedin.com/groups?home=&gid=2130806"}, {"label": "list_item", "id": 5, "page_no": 35, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.51414489746094, "t": 130.8223114013672, "r": 546.83832, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9532178640365601, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 131.65747, "r": 141.78, "b": 140.43224999999995, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks ", "bbox": {"l": 151.20016, "t": 131.50806, "r": 546.83832, "b": 140.72107000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "weekly newsletter:", "bbox": {"l": 151.20016, "t": 143.50787000000003, "r": 232.75266, "b": 152.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks weekly newsletter:"}, {"label": "list_item", "id": 6, "page_no": 35, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 150.69110107421875, "t": 159.39158630371094, "r": 451.35418701171875, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.676043689250946, "cells": [{"id": 9, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm", "bbox": {"l": 151.20016, "t": 160.63707999999997, "r": 451.01605, "b": 169.41187000000002, "coord_origin": "TOPLEFT"}}]}, "text": "https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm"}, {"label": "list_item", "id": 7, "page_no": 35, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.90457153320312, "t": 176.64987182617188, "r": 430.14783, "b": 187.12718200683594, "coord_origin": "TOPLEFT"}, "confidence": 0.9175106287002563, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 177.67664000000002, "r": 141.78, "b": 186.45141999999998, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Stay current on recent Redbooks publications with RSS Feeds:", "bbox": {"l": 151.20016, "t": 177.52722000000006, "r": 430.14783, "b": 186.74023, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Stay current on recent Redbooks publications with RSS Feeds:"}, {"label": "text", "id": 8, "page_no": 35, "cluster": {"id": 8, "label": "text", "bbox": {"l": 150.6310272216797, "t": 193.73944091796875, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.7000716924667358, "cells": [{"id": 12, "text": "http://www.redbooks.ibm.com/rss.html", "bbox": {"l": 151.20016, "t": 194.65643, "r": 331.07773, "b": 203.43120999999996, "coord_origin": "TOPLEFT"}}]}, "text": "http://www.redbooks.ibm.com/rss.html"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 35, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.23326110839844, "t": 754.4552612304688, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9102703928947449, "cells": [{"id": 0, "text": "34 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "34"}, {"label": "page_footer", "id": 1, "page_no": 35, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.27912139892578, "t": 754.7698974609375, "r": 267.0744, "b": 764.12158203125, "coord_origin": "TOPLEFT"}, "confidence": 0.950810968875885, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 755.538002, "r": 267.0744, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 36, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.60262680053711, "t": 754.6927490234375, "r": 180.32761, "b": 764.0509033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9509437084197998, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6251220703125, "t": 754.3717041015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9176149368286133, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.970703125, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9600573778152466, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.05133819580078, "t": 132.02426147460938, "r": 547.24548, "b": 162.26876831054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9850678443908691, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 64.02767944335938, "t": 172.017333984375, "r": 547.17969, "b": 232.43988037109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878805875778198, "cells": [{"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 64.14295196533203, "t": 241.84597778320312, "r": 547.35602, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9708325862884521, "cells": [{"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 64.09358215332031, "t": 271.9725036621094, "r": 535.31042, "b": 282.27099609375, "coord_origin": "TOPLEFT"}, "confidence": 0.90984046459198, "cells": [{"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 63.77083969116211, "t": 291.3708801269531, "r": 545.7674, "b": 342.25909423828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851772785186768, "cells": [{"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 63.76580810546875, "t": 352.0263977050781, "r": 547.24841, "b": 391.8179, "coord_origin": "TOPLEFT"}, "confidence": 0.9841977953910828, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 63.99868392944336, "t": 401.97637939453125, "r": 541.54132, "b": 431.9630432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9843890070915222, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 64.16744995117188, "t": 442.2430419921875, "r": 519.26678, "b": 462.4287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788233637809753, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 63.904296875, "t": 472.1893005371094, "r": 505.27103, "b": 492.3111572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9781931638717651, "cells": [{"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 64.10684204101562, "t": 502.1192626953125, "r": 547.24249, "b": 542.1983642578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9864881634712219, "cells": [{"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 64.23661041259766, "t": 552.1707153320312, "r": 544.68579, "b": 572.2598876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9780008792877197, "cells": [{"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 63.82798385620117, "t": 582.23291015625, "r": 547.01636, "b": 621.85406, "coord_origin": "TOPLEFT"}, "confidence": 0.981692910194397, "cells": [{"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.29706573486328, "t": 631.7528686523438, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}, "confidence": 0.8924005627632141, "cells": [{"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 63.95261001586914, "t": 651.9513549804688, "r": 547.35809, "b": 732.0111083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879701137542725, "cells": [{"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.60262680053711, "t": 754.6927490234375, "r": 180.32761, "b": 764.0509033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9509437084197998, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6251220703125, "t": 754.3717041015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9176149368286133, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}, {"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.970703125, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9600573778152466, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.05133819580078, "t": 132.02426147460938, "r": 547.24548, "b": 162.26876831054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9850678443908691, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.02767944335938, "t": 172.017333984375, "r": 547.17969, "b": 232.43988037109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878805875778198, "cells": [{"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.14295196533203, "t": 241.84597778320312, "r": 547.35602, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9708325862884521, "cells": [{"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.09358215332031, "t": 271.9725036621094, "r": 535.31042, "b": 282.27099609375, "coord_origin": "TOPLEFT"}, "confidence": 0.90984046459198, "cells": [{"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US"}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.77083969116211, "t": 291.3708801269531, "r": 545.7674, "b": 342.25909423828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851772785186768, "cells": [{"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.76580810546875, "t": 352.0263977050781, "r": 547.24841, "b": 391.8179, "coord_origin": "TOPLEFT"}, "confidence": 0.9841977953910828, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 63.99868392944336, "t": 401.97637939453125, "r": 541.54132, "b": 431.9630432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9843890070915222, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.16744995117188, "t": 442.2430419921875, "r": 519.26678, "b": 462.4287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788233637809753, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 63.904296875, "t": 472.1893005371094, "r": 505.27103, "b": 492.3111572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9781931638717651, "cells": [{"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}]}, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.10684204101562, "t": 502.1192626953125, "r": 547.24249, "b": 542.1983642578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9864881634712219, "cells": [{"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "text", "bbox": {"l": 64.23661041259766, "t": 552.1707153320312, "r": 544.68579, "b": 572.2598876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9780008792877197, "cells": [{"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}]}, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only."}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.82798385620117, "t": 582.23291015625, "r": 547.01636, "b": 621.85406, "coord_origin": "TOPLEFT"}, "confidence": 0.981692910194397, "cells": [{"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental."}, {"label": "section_header", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.29706573486328, "t": 631.7528686523438, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}, "confidence": 0.8924005627632141, "cells": [{"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 63.95261001586914, "t": 651.9513549804688, "r": 547.35809, "b": 732.0111083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879701137542725, "cells": [{"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs."}], "body": [{"label": "section_header", "id": 2, "page_no": 36, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 72.970703125, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9600573778152466, "cells": [{"id": 2, "text": "Notices", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.50481, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Notices"}, {"label": "text", "id": 3, "page_no": 36, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.05133819580078, "t": 132.02426147460938, "r": 547.24548, "b": 162.26876831054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9850678443908691, "cells": [{"id": 3, "text": "This information was developed for products and services offered in the US. This material might be available ", "bbox": {"l": 64.800003, "t": 132.64862000000005, "r": 546.33118, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "from IBM in other languages. However, you may be required to own a copy of the product or product version in ", "bbox": {"l": 64.800995, "t": 142.60864000000004, "r": 547.24548, "b": 151.82165999999995, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "that language in order to access it. ", "bbox": {"l": 64.800995, "t": 152.62842, "r": 220.36324000000002, "b": 161.84142999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This information was developed for products and services offered in the US. This material might be available from IBM in other languages. However, you may be required to own a copy of the product or product version in that language in order to access it."}, {"label": "text", "id": 4, "page_no": 36, "cluster": {"id": 4, "label": "text", "bbox": {"l": 64.02767944335938, "t": 172.017333984375, "r": 547.17969, "b": 232.43988037109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9878805875778198, "cells": [{"id": 6, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult ", "bbox": {"l": 64.800995, "t": 172.60815000000002, "r": 541.46075, "b": 181.82117000000005, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "your local IBM representative for information on the products and services currently available in your area. Any ", "bbox": {"l": 64.800995, "t": 182.62793, "r": 547.17969, "b": 191.84094000000005, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, ", "bbox": {"l": 64.800995, "t": 192.64770999999996, "r": 543.6261, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "program, or service may be used. Any functionally equivalent product, program, or service that does not ", "bbox": {"l": 64.800995, "t": 202.60772999999995, "r": 525.91608, "b": 211.82074, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to ", "bbox": {"l": 64.800995, "t": 212.62750000000005, "r": 529.85132, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "evaluate and verify the operation of any non-IBM product, program, or service. ", "bbox": {"l": 64.801971, "t": 222.64728000000002, "r": 413.73868, "b": 231.86028999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user\u2019s responsibility to evaluate and verify the operation of any non-IBM product, program, or service."}, {"label": "text", "id": 5, "page_no": 36, "cluster": {"id": 5, "label": "text", "bbox": {"l": 64.14295196533203, "t": 241.84597778320312, "r": 547.35602, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9708325862884521, "cells": [{"id": 12, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The ", "bbox": {"l": 64.801971, "t": 242.62701000000004, "r": 547.30017, "b": 251.84002999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "furnishing of this document does not grant you any license to these patents. You can send license inquiries, in ", "bbox": {"l": 64.801971, "t": 252.64679, "r": 547.35602, "b": 261.85979999999995, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "writing, to:", "bbox": {"l": 64.801971, "t": 262.60681, "r": 110.40483000000002, "b": 271.81982000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:"}, {"label": "text", "id": 6, "page_no": 36, "cluster": {"id": 6, "label": "text", "bbox": {"l": 64.09358215332031, "t": 271.9725036621094, "r": 535.31042, "b": 282.27099609375, "coord_origin": "TOPLEFT"}, "confidence": 0.90984046459198, "cells": [{"id": 15, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US ", "bbox": {"l": 64.801971, "t": 272.62658999999996, "r": 535.31042, "b": 281.8396, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US"}, {"label": "text", "id": 7, "page_no": 36, "cluster": {"id": 7, "label": "text", "bbox": {"l": 63.77083969116211, "t": 291.3708801269531, "r": 545.7674, "b": 342.25909423828125, "coord_origin": "TOPLEFT"}, "confidence": 0.9851772785186768, "cells": [{"id": 16, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d ", "bbox": {"l": 64.801971, "t": 292.60638, "r": 518.07764, "b": 301.81937, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED ", "bbox": {"l": 64.801971, "t": 302.62613, "r": 545.7674, "b": 311.83911, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A ", "bbox": {"l": 64.801971, "t": 312.6459, "r": 535.5415, "b": 321.85889, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in ", "bbox": {"l": 64.801971, "t": 322.6059, "r": 527.50079, "b": 331.81888, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "certain transactions, therefore, this statement may not apply to you. ", "bbox": {"l": 64.801971, "t": 332.62564, "r": 365.39774, "b": 341.83862, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION \u201cAS IS\u201d WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you."}, {"label": "text", "id": 8, "page_no": 36, "cluster": {"id": 8, "label": "text", "bbox": {"l": 63.76580810546875, "t": 352.0263977050781, "r": 547.24841, "b": 391.8179, "coord_origin": "TOPLEFT"}, "confidence": 0.9841977953910828, "cells": [{"id": 21, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made ", "bbox": {"l": 64.801971, "t": 352.60541, "r": 546.45966, "b": 361.81839, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "to the information herein; these changes will be incorporated in new editions of the publication. IBM may make ", "bbox": {"l": 64.801956, "t": 362.62515, "r": 547.13379, "b": 371.83813, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time ", "bbox": {"l": 64.800964, "t": 372.64493, "r": 547.24841, "b": 381.85791, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "without notice. ", "bbox": {"l": 64.800964, "t": 382.60492, "r": 131.4742, "b": 391.8179, "coord_origin": "TOPLEFT"}}]}, "text": "This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice."}, {"label": "text", "id": 9, "page_no": 36, "cluster": {"id": 9, "label": "text", "bbox": {"l": 63.99868392944336, "t": 401.97637939453125, "r": 541.54132, "b": 431.9630432128906, "coord_origin": "TOPLEFT"}, "confidence": 0.9843890070915222, "cells": [{"id": 25, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any ", "bbox": {"l": 64.800964, "t": 402.64444, "r": 541.54132, "b": 411.85742, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "manner serve as an endorsement of those websites. The materials at those websites are not part of the ", "bbox": {"l": 64.80098, "t": 412.60443, "r": 524.91406, "b": 421.81741, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "materials for this IBM product and use of those websites is at your own risk. ", "bbox": {"l": 64.80098, "t": 422.62417999999997, "r": 401.4938, "b": 431.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk."}, {"label": "text", "id": 10, "page_no": 36, "cluster": {"id": 10, "label": "text", "bbox": {"l": 64.16744995117188, "t": 442.2430419921875, "r": 519.26678, "b": 462.4287109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788233637809753, "cells": [{"id": 28, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without ", "bbox": {"l": 64.80098, "t": 442.60393999999997, "r": 519.26678, "b": 451.81692999999996, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "incurring any obligation to you. ", "bbox": {"l": 64.80098, "t": 452.62369, "r": 203.13445, "b": 461.83667, "coord_origin": "TOPLEFT"}}]}, "text": "IBM may use or distribute any of the information you provide in any way it believes appropriate without incurring any obligation to you."}, {"label": "text", "id": 11, "page_no": 36, "cluster": {"id": 11, "label": "text", "bbox": {"l": 63.904296875, "t": 472.1893005371094, "r": 505.27103, "b": 492.3111572265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9781931638717651, "cells": [{"id": 30, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual ", "bbox": {"l": 64.80098, "t": 472.60345, "r": 505.27103, "b": 481.81644, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "performance results may vary depending on specific configurations and operating conditions. ", "bbox": {"l": 64.800964, "t": 482.6232, "r": 478.22061, "b": 491.83618, "coord_origin": "TOPLEFT"}}]}, "text": "The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions."}, {"label": "text", "id": 12, "page_no": 36, "cluster": {"id": 12, "label": "text", "bbox": {"l": 64.10684204101562, "t": 502.1192626953125, "r": 547.24249, "b": 542.1983642578125, "coord_origin": "TOPLEFT"}, "confidence": 0.9864881634712219, "cells": [{"id": 32, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published ", "bbox": {"l": 64.800964, "t": 502.60297, "r": 544.94849, "b": 511.81595, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "announcements or other publicly available sources. IBM has not tested those products and cannot confirm the ", "bbox": {"l": 64.800964, "t": 512.62271, "r": 547.24249, "b": 521.83569, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the ", "bbox": {"l": 64.800964, "t": 522.64249, "r": 532.51556, "b": 531.85547, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "capabilities of non-IBM products should be addressed to the suppliers of those products. ", "bbox": {"l": 64.800995, "t": 532.66223, "r": 458.02179, "b": 541.87524, "coord_origin": "TOPLEFT"}}]}, "text": "Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products."}, {"label": "text", "id": 13, "page_no": 36, "cluster": {"id": 13, "label": "text", "bbox": {"l": 64.23661041259766, "t": 552.1707153320312, "r": 544.68579, "b": 572.2598876953125, "coord_origin": "TOPLEFT"}, "confidence": 0.9780008792877197, "cells": [{"id": 36, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and ", "bbox": {"l": 64.800995, "t": 552.64201, "r": 544.68579, "b": 561.85501, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "represent goals and objectives only. ", "bbox": {"l": 64.800995, "t": 562.6617699999999, "r": 226.96176, "b": 571.87477, "coord_origin": "TOPLEFT"}}]}, "text": "Statements regarding IBM\u2019s future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only."}, {"label": "text", "id": 14, "page_no": 36, "cluster": {"id": 14, "label": "text", "bbox": {"l": 63.82798385620117, "t": 582.23291015625, "r": 547.01636, "b": 621.85406, "coord_origin": "TOPLEFT"}, "confidence": 0.981692910194397, "cells": [{"id": 38, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them ", "bbox": {"l": 64.800995, "t": 582.64154, "r": 543.07227, "b": 591.85454, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "as completely as possible, the examples include the names of individuals, companies, brands, and products. ", "bbox": {"l": 64.800018, "t": 592.6613, "r": 547.01636, "b": 601.8743, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "All of these names are fictitious and any similarity to actual people or business enterprises is entirely ", "bbox": {"l": 64.801025, "t": 602.62131, "r": 510.27209, "b": 611.8343, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "coincidental. ", "bbox": {"l": 64.801025, "t": 612.64107, "r": 123.10986000000001, "b": 621.85406, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to actual people or business enterprises is entirely coincidental."}, {"label": "section_header", "id": 15, "page_no": 36, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.29706573486328, "t": 631.7528686523438, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}, "confidence": 0.8924005627632141, "cells": [{"id": 42, "text": "COPYRIGHT LICENSE:", "bbox": {"l": 64.801025, "t": 632.6208300000001, "r": 172.50049, "b": 641.83383, "coord_origin": "TOPLEFT"}}]}, "text": "COPYRIGHT LICENSE:"}, {"label": "text", "id": 16, "page_no": 36, "cluster": {"id": 16, "label": "text", "bbox": {"l": 63.95261001586914, "t": 651.9513549804688, "r": 547.35809, "b": 732.0111083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9879701137542725, "cells": [{"id": 43, "text": "This information contains sample application programs in source language, which illustrate programming ", "bbox": {"l": 64.801025, "t": 652.66035, "r": 529.14618, "b": 661.87335, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "techniques on various operating platforms. You may copy, modify, and distribute these sample programs in ", "bbox": {"l": 64.802032, "t": 662.62035, "r": 540.33325, "b": 671.83335, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "any form without payment to IBM, for the purposes of developing, using, marketing or distributing application ", "bbox": {"l": 64.802032, "t": 672.64011, "r": 546.02222, "b": 681.85311, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "programs conforming to the application programming interface for the operating platform for which the sample ", "bbox": {"l": 64.802032, "t": 682.65987, "r": 547.35809, "b": 691.87287, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, ", "bbox": {"l": 64.802032, "t": 692.619865, "r": 544.22968, "b": 701.83287, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are ", "bbox": {"l": 64.802048, "t": 702.639626, "r": 542.97467, "b": 711.852631, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use ", "bbox": {"l": 64.802032, "t": 712.659386, "r": 547.25946, "b": 721.872391, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "of the sample programs. ", "bbox": {"l": 64.802032, "t": 722.619385, "r": 175.33412, "b": 731.83239, "coord_origin": "TOPLEFT"}}]}, "text": "This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided \u201cAS IS\u201d, without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 36, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.60262680053711, "t": 754.6927490234375, "r": 180.32761, "b": 764.0509033203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9509437084197998, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2023.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 180.32761, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2023."}, {"label": "page_footer", "id": 1, "page_no": 36, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6251220703125, "t": 754.3717041015625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9176149368286133, "cells": [{"id": 1, "text": "35", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "35"}]}}, {"page_no": 37, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.26212310791016, "t": 755.4874267578125, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160765409469604, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35021209716797, "t": 755.8494262695312, "r": 267.0744, "b": 765.4060668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9523178339004517, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.03144836425781, "t": 70.1122817993164, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.954963743686676, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 64.0931396484375, "t": 102.72844696044922, "r": 547.23431, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9848971366882324, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 63.78811264038086, "t": 152.59286499023438, "r": 547.24146, "b": 172.8232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9603025913238525, "cells": [{"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 75.599998, "t": 181.60858154296875, "r": 99.15697479248047, "b": 190.86298, "coord_origin": "TOPLEFT"}, "confidence": 0.8173197507858276, "cells": [{"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 75.599998, "t": 203.4119110107422, "r": 144.71075439453125, "b": 212.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.8817703127861023, "cells": [{"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 75.599998, "t": 214.50650024414062, "r": 124.25857543945312, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8559992909431458, "cells": [{"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 75.47257232666016, "t": 224.76895141601562, "r": 142.73785400390625, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.874781608581543, "cells": [{"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 75.599998, "t": 235.86727905273438, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8794353008270264, "cells": [{"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 235.9648895263672, "t": 181.54017639160156, "r": 292.5691833496094, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8140993118286133, "cells": [{"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 235.9771270751953, "t": 191.93496704101562, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}, "confidence": 0.8634824752807617, "cells": [{"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 235.92138671875, "t": 203.60043334960938, "r": 272.8687744140625, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8542282581329346, "cells": [{"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 235.9377899169922, "t": 214.2160186767578, "r": 294.80047607421875, "b": 224.3423614501953, "coord_origin": "TOPLEFT"}, "confidence": 0.861255943775177, "cells": [{"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 235.86184692382812, "t": 225.51539611816406, "r": 290.5615539550781, "b": 234.899658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.8668359518051147, "cells": [{"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "text", "bbox": {"l": 236.06265258789062, "t": 236.30458068847656, "r": 283.79803466796875, "b": 245.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.8743909001350403, "cells": [{"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 396.7199401855469, "t": 181.80523681640625, "r": 464.44384765625, "b": 191.1903533935547, "coord_origin": "TOPLEFT"}, "confidence": 0.6504887342453003, "cells": [{"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "text", "bbox": {"l": 396.71099853515625, "t": 192.41983032226562, "r": 452.03265380859375, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7500287890434265, "cells": [{"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "text", "bbox": {"l": 396.258544921875, "t": 203.52040100097656, "r": 451.70428466796875, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7123883366584778, "cells": [{"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "text", "bbox": {"l": 396.62286376953125, "t": 214.1708984375, "r": 424.4446716308594, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.730349063873291, "cells": [{"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "text", "bbox": {"l": 396.6561584472656, "t": 225.23277282714844, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}, "confidence": 0.7374036312103271, "cells": [{"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "text", "bbox": {"l": 64.08106994628906, "t": 258.01312255859375, "r": 312.00525, "b": 268.16949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345569014549255, "cells": [{"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "text", "bbox": {"l": 64.17213439941406, "t": 277.27313232421875, "r": 528.68494, "b": 298.1844787597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9759830832481384, "cells": [{"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "text", "bbox": {"l": 63.988487243652344, "t": 307.5063171386719, "r": 541.68878, "b": 327.7742919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9722592234611511, "cells": [{"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "text", "bbox": {"l": 64.36927795410156, "t": 337.3686218261719, "r": 531.98065, "b": 357.74011, "coord_origin": "TOPLEFT"}, "confidence": 0.9669205546379089, "cells": [{"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "text", "bbox": {"l": 64.39899444580078, "t": 367.4486083984375, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}, "confidence": 0.9511570930480957, "cells": [{"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}]}, {"id": 26, "label": "text", "bbox": {"l": 64.1666259765625, "t": 387.39398193359375, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}, "confidence": 0.9543401598930359, "cells": [{"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.26212310791016, "t": 755.4874267578125, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160765409469604, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35021209716797, "t": 755.8494262695312, "r": 267.0744, "b": 765.4060668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9523178339004517, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}, {"label": "section_header", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03144836425781, "t": 70.1122817993164, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.954963743686676, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.0931396484375, "t": 102.72844696044922, "r": 547.23431, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9848971366882324, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.78811264038086, "t": 152.59286499023438, "r": 547.24146, "b": 172.8232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9603025913238525, "cells": [{"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.599998, "t": 181.60858154296875, "r": 99.15697479248047, "b": 190.86298, "coord_origin": "TOPLEFT"}, "confidence": 0.8173197507858276, "cells": [{"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Db2fi IBMfi"}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.599998, "t": 203.4119110107422, "r": 144.71075439453125, "b": 212.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.8817703127861023, "cells": [{"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Blockchainfi"}, {"label": "text", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.599998, "t": 214.50650024414062, "r": 124.25857543945312, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8559992909431458, "cells": [{"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloudfi IBM Clou"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 75.47257232666016, "t": 224.76895141601562, "r": 142.73785400390625, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.874781608581543, "cells": [{"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}]}, "text": "d Pakfi"}, {"label": "text", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "text", "bbox": {"l": 75.599998, "t": 235.86727905273438, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8794353008270264, "cells": [{"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Telum\u2122"}, {"label": "text", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "text", "bbox": {"l": 235.9648895263672, "t": 181.54017639160156, "r": 292.5691833496094, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8140993118286133, "cells": [{"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Watsonfi"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 235.9771270751953, "t": 191.93496704101562, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}, "confidence": 0.8634824752807617, "cells": [{"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16\u2122"}, {"label": "text", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "text", "bbox": {"l": 235.92138671875, "t": 203.60043334960938, "r": 272.8687744140625, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8542282581329346, "cells": [{"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Instanafi"}, {"label": "text", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "text", "bbox": {"l": 235.9377899169922, "t": 214.2160186767578, "r": 294.80047607421875, "b": 224.3423614501953, "coord_origin": "TOPLEFT"}, "confidence": 0.861255943775177, "cells": [{"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}]}, "text": "Open Libertyfi"}, {"label": "text", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "text", "bbox": {"l": 235.86184692382812, "t": 225.51539611816406, "r": 290.5615539550781, "b": 234.899658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.8668359518051147, "cells": [{"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}]}, "text": "OpenPagesfi"}, {"label": "text", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "text", "bbox": {"l": 236.06265258789062, "t": 236.30458068847656, "r": 283.79803466796875, "b": 245.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.8743909001350403, "cells": [{"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 396.7199401855469, "t": 181.80523681640625, "r": 464.44384765625, "b": 191.1903533935547, "coord_origin": "TOPLEFT"}, "confidence": 0.6504887342453003, "cells": [{"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi Turbon"}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 396.71099853515625, "t": 192.41983032226562, "r": 452.03265380859375, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7500287890434265, "cells": [{"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}]}, "text": "omicfi"}, {"label": "text", "id": 18, "page_no": 37, "cluster": {"id": 18, "label": "text", "bbox": {"l": 396.258544921875, "t": 203.52040100097656, "r": 451.70428466796875, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7123883366584778, "cells": [{"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}]}, "text": "WebSpherefi"}, {"label": "text", "id": 19, "page_no": 37, "cluster": {"id": 19, "label": "text", "bbox": {"l": 396.62286376953125, "t": 214.1708984375, "r": 424.4446716308594, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.730349063873291, "cells": [{"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}]}, "text": "z/OSfi"}, {"label": "text", "id": 20, "page_no": 37, "cluster": {"id": 20, "label": "text", "bbox": {"l": 396.6561584472656, "t": 225.23277282714844, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}, "confidence": 0.7374036312103271, "cells": [{"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}]}, "text": "z16\u2122"}, {"label": "text", "id": 21, "page_no": 37, "cluster": {"id": 21, "label": "text", "bbox": {"l": 64.08106994628906, "t": 258.01312255859375, "r": 312.00525, "b": 268.16949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345569014549255, "cells": [{"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 22, "page_no": 37, "cluster": {"id": 22, "label": "text", "bbox": {"l": 64.17213439941406, "t": 277.27313232421875, "r": 528.68494, "b": 298.1844787597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9759830832481384, "cells": [{"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}]}, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 23, "page_no": 37, "cluster": {"id": 23, "label": "text", "bbox": {"l": 63.988487243652344, "t": 307.5063171386719, "r": 541.68878, "b": 327.7742919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9722592234611511, "cells": [{"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis."}, {"label": "text", "id": 24, "page_no": 37, "cluster": {"id": 24, "label": "text", "bbox": {"l": 64.36927795410156, "t": 337.3686218261719, "r": 531.98065, "b": 357.74011, "coord_origin": "TOPLEFT"}, "confidence": 0.9669205546379089, "cells": [{"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}]}, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 25, "page_no": 37, "cluster": {"id": 25, "label": "text", "bbox": {"l": 64.39899444580078, "t": 367.4486083984375, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}, "confidence": 0.9511570930480957, "cells": [{"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}]}, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries."}, {"label": "text", "id": 26, "page_no": 37, "cluster": {"id": 26, "label": "text", "bbox": {"l": 64.1666259765625, "t": 387.39398193359375, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}, "confidence": 0.9543401598930359, "cells": [{"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}], "body": [{"label": "section_header", "id": 2, "page_no": 37, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.03144836425781, "t": 70.1122817993164, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}, "confidence": 0.954963743686676, "cells": [{"id": 2, "text": "Trademarks", "bbox": {"l": 64.800003, "t": 71.22069999999997, "r": 155.4895, "b": 85.9837, "coord_origin": "TOPLEFT"}}]}, "text": "Trademarks"}, {"label": "text", "id": 3, "page_no": 37, "cluster": {"id": 3, "label": "text", "bbox": {"l": 64.0931396484375, "t": 102.72844696044922, "r": 547.23431, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.9848971366882324, "cells": [{"id": 3, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines ", "bbox": {"l": 64.800003, "t": 103.48870999999997, "r": 547.23431, "b": 112.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Corporation, registered in many jurisdictions worldwide. Other product and service names might be ", "bbox": {"l": 64.800018, "t": 113.50847999999996, "r": 504.22832999999997, "b": 122.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright ", "bbox": {"l": 64.800018, "t": 123.52826000000005, "r": 546.94568, "b": 132.74127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "and trademark information\u201d at ", "bbox": {"l": 64.800018, "t": 133.48828000000003, "r": 198.67136, "b": 142.70128999999997, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "http://www.ibm.com/legal/copytrade.shtml", "bbox": {"l": 198.66043, "t": 133.6377, "r": 398.51779, "b": 142.41247999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at \u201cCopyright and trademark information\u201d at http://www.ibm.com/legal/copytrade.shtml"}, {"label": "text", "id": 4, "page_no": 37, "cluster": {"id": 4, "label": "text", "bbox": {"l": 63.78811264038086, "t": 152.59286499023438, "r": 547.24146, "b": 172.8232421875, "coord_origin": "TOPLEFT"}, "confidence": 0.9603025913238525, "cells": [{"id": 8, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, ", "bbox": {"l": 64.800995, "t": 153.52881000000002, "r": 547.24146, "b": 162.74181999999996, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "and might also be trademarks or registered trademarks in other countries. ", "bbox": {"l": 64.800995, "t": 163.48883, "r": 393.13339, "b": 172.70183999999995, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks or registered trademarks of International Business Machines Corporation, and might also be trademarks or registered trademarks in other countries."}, {"label": "text", "id": 5, "page_no": 37, "cluster": {"id": 5, "label": "text", "bbox": {"l": 75.599998, "t": 181.60858154296875, "r": 99.15697479248047, "b": 190.86298, "coord_origin": "TOPLEFT"}, "confidence": 0.8173197507858276, "cells": [{"id": 10, "text": "Db2fi IBMfi", "bbox": {"l": 75.599998, "t": 182.53801999999996, "r": 98.195404, "b": 190.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Db2fi IBMfi"}, {"label": "text", "id": 6, "page_no": 37, "cluster": {"id": 6, "label": "text", "bbox": {"l": 75.599998, "t": 203.4119110107422, "r": 144.71075439453125, "b": 212.88324, "coord_origin": "TOPLEFT"}, "confidence": 0.8817703127861023, "cells": [{"id": 11, "text": "IBM Blockchainfi", "bbox": {"l": 75.599998, "t": 204.55829000000006, "r": 144.13049, "b": 212.88324, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Blockchainfi"}, {"label": "text", "id": 7, "page_no": 37, "cluster": {"id": 7, "label": "text", "bbox": {"l": 75.599998, "t": 214.50650024414062, "r": 124.25857543945312, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8559992909431458, "cells": [{"id": 12, "text": "IBM Cloudfi IBM Clou", "bbox": {"l": 75.599998, "t": 215.53827, "r": 112.57558999999999, "b": 223.86321999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloudfi IBM Clou"}, {"label": "text", "id": 8, "page_no": 37, "cluster": {"id": 8, "label": "text", "bbox": {"l": 75.47257232666016, "t": 224.76895141601562, "r": 142.73785400390625, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.874781608581543, "cells": [{"id": 13, "text": "d Pakfi", "bbox": {"l": 112.60799, "t": 226.51824999999997, "r": 142.2117, "b": 234.84320000000002, "coord_origin": "TOPLEFT"}}]}, "text": "d Pakfi"}, {"label": "text", "id": 9, "page_no": 37, "cluster": {"id": 9, "label": "text", "bbox": {"l": 75.599998, "t": 235.86727905273438, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.8794353008270264, "cells": [{"id": 14, "text": "IBM Telum\u2122", "bbox": {"l": 75.599998, "t": 237.55853000000002, "r": 128.0511, "b": 245.88347999999996, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Telum\u2122"}, {"label": "text", "id": 10, "page_no": 37, "cluster": {"id": 10, "label": "text", "bbox": {"l": 235.9648895263672, "t": 181.54017639160156, "r": 292.5691833496094, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8140993118286133, "cells": [{"id": 15, "text": "IBM Watsonfi", "bbox": {"l": 236.40029999999996, "t": 182.53882, "r": 292.00497, "b": 190.86377000000005, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Watsonfi"}, {"label": "text", "id": 11, "page_no": 37, "cluster": {"id": 11, "label": "text", "bbox": {"l": 235.9771270751953, "t": 191.93496704101562, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}, "confidence": 0.8634824752807617, "cells": [{"id": 16, "text": "IBM z16\u2122", "bbox": {"l": 236.40029999999996, "t": 193.51880000000006, "r": 278.3295, "b": 201.84375, "coord_origin": "TOPLEFT"}}]}, "text": "IBM z16\u2122"}, {"label": "text", "id": 12, "page_no": 37, "cluster": {"id": 12, "label": "text", "bbox": {"l": 235.92138671875, "t": 203.60043334960938, "r": 272.8687744140625, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.8542282581329346, "cells": [{"id": 17, "text": "Instanafi", "bbox": {"l": 236.40029999999996, "t": 204.55908, "r": 272.4696, "b": 212.88403000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Instanafi"}, {"label": "text", "id": 13, "page_no": 37, "cluster": {"id": 13, "label": "text", "bbox": {"l": 235.9377899169922, "t": 214.2160186767578, "r": 294.80047607421875, "b": 224.3423614501953, "coord_origin": "TOPLEFT"}, "confidence": 0.861255943775177, "cells": [{"id": 18, "text": "Open Libertyfi", "bbox": {"l": 236.40029999999996, "t": 215.53905999999995, "r": 294.38095, "b": 223.86401, "coord_origin": "TOPLEFT"}}]}, "text": "Open Libertyfi"}, {"label": "text", "id": 14, "page_no": 37, "cluster": {"id": 14, "label": "text", "bbox": {"l": 235.86184692382812, "t": 225.51539611816406, "r": 290.5615539550781, "b": 234.899658203125, "coord_origin": "TOPLEFT"}, "confidence": 0.8668359518051147, "cells": [{"id": 19, "text": "OpenPagesfi", "bbox": {"l": 236.40029999999996, "t": 226.51904000000002, "r": 290.44708, "b": 234.84398999999996, "coord_origin": "TOPLEFT"}}]}, "text": "OpenPagesfi"}, {"label": "text", "id": 15, "page_no": 37, "cluster": {"id": 15, "label": "text", "bbox": {"l": 236.06265258789062, "t": 236.30458068847656, "r": 283.79803466796875, "b": 245.88428, "coord_origin": "TOPLEFT"}, "confidence": 0.8743909001350403, "cells": [{"id": 20, "text": "Redbooksfi", "bbox": {"l": 236.40029999999996, "t": 237.55933000000005, "r": 283.47211, "b": 245.88428, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooksfi"}, {"label": "text", "id": 16, "page_no": 37, "cluster": {"id": 16, "label": "text", "bbox": {"l": 396.7199401855469, "t": 181.80523681640625, "r": 464.44384765625, "b": 191.1903533935547, "coord_origin": "TOPLEFT"}, "confidence": 0.6504887342453003, "cells": [{"id": 21, "text": "Redbooks (log", "bbox": {"l": 397.20059, "t": 182.53961000000004, "r": 455.12460000000004, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "o)", "bbox": {"l": 450.04388, "t": 182.53961000000004, "r": 455.17949999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "fi Turbon", "bbox": {"l": 425.6424, "t": 182.53961000000004, "r": 448.43789999999996, "b": 190.86455999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Redbooks (log o) fi Turbon"}, {"label": "text", "id": 17, "page_no": 37, "cluster": {"id": 17, "label": "text", "bbox": {"l": 396.71099853515625, "t": 192.41983032226562, "r": 452.03265380859375, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7500287890434265, "cells": [{"id": 24, "text": "omicfi", "bbox": {"l": 425.69009, "t": 193.51959, "r": 451.26357999999993, "b": 201.84454000000005, "coord_origin": "TOPLEFT"}}]}, "text": "omicfi"}, {"label": "text", "id": 18, "page_no": 37, "cluster": {"id": 18, "label": "text", "bbox": {"l": 396.258544921875, "t": 203.52040100097656, "r": 451.70428466796875, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7123883366584778, "cells": [{"id": 25, "text": "WebSpherefi", "bbox": {"l": 397.20059, "t": 204.55988000000002, "r": 451.25278000000003, "b": 212.88482999999997, "coord_origin": "TOPLEFT"}}]}, "text": "WebSpherefi"}, {"label": "text", "id": 19, "page_no": 37, "cluster": {"id": 19, "label": "text", "bbox": {"l": 396.62286376953125, "t": 214.1708984375, "r": 424.4446716308594, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.730349063873291, "cells": [{"id": 26, "text": "z/OSfi", "bbox": {"l": 397.20059, "t": 215.53985999999998, "r": 423.8046, "b": 223.86481000000003, "coord_origin": "TOPLEFT"}}]}, "text": "z/OSfi"}, {"label": "text", "id": 20, "page_no": 37, "cluster": {"id": 20, "label": "text", "bbox": {"l": 396.6561584472656, "t": 225.23277282714844, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}, "confidence": 0.7374036312103271, "cells": [{"id": 27, "text": "z16\u2122", "bbox": {"l": 397.20059, "t": 226.51984000000004, "r": 420.6366, "b": 234.84479, "coord_origin": "TOPLEFT"}}]}, "text": "z16\u2122"}, {"label": "text", "id": 21, "page_no": 37, "cluster": {"id": 21, "label": "text", "bbox": {"l": 64.08106994628906, "t": 258.01312255859375, "r": 312.00525, "b": 268.16949462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9345569014549255, "cells": [{"id": 28, "text": "The following terms are trademarks of other companies:", "bbox": {"l": 64.800003, "t": 258.52855999999997, "r": 312.00525, "b": 267.74158, "coord_origin": "TOPLEFT"}}]}, "text": "The following terms are trademarks of other companies:"}, {"label": "text", "id": 22, "page_no": 37, "cluster": {"id": 22, "label": "text", "bbox": {"l": 64.17213439941406, "t": 277.27313232421875, "r": 528.68494, "b": 298.1844787597656, "coord_origin": "TOPLEFT"}, "confidence": 0.9759830832481384, "cells": [{"id": 29, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel ", "bbox": {"l": 64.800003, "t": 278.50836000000004, "r": 528.68494, "b": 287.72134, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Corporation or its subsidiaries in the United States and other countries.", "bbox": {"l": 64.800003, "t": 288.52811, "r": 378.13461, "b": 297.74109, "coord_origin": "TOPLEFT"}}]}, "text": "Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 23, "page_no": 37, "cluster": {"id": 23, "label": "text", "bbox": {"l": 63.988487243652344, "t": 307.5063171386719, "r": 541.68878, "b": 327.7742919921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9722592234611511, "cells": [{"id": 31, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive ", "bbox": {"l": 64.800003, "t": 308.50787, "r": 541.68878, "b": 317.72086, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "licensee of Linus Torvalds, owner of the mark on a worldwide basis.", "bbox": {"l": 64.800003, "t": 318.52762, "r": 364.17566, "b": 327.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The registered trademark Linuxfi is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a worldwide basis."}, {"label": "text", "id": 24, "page_no": 37, "cluster": {"id": 24, "label": "text", "bbox": {"l": 64.36927795410156, "t": 337.3686218261719, "r": 531.98065, "b": 357.74011, "coord_origin": "TOPLEFT"}, "confidence": 0.9669205546379089, "cells": [{"id": 33, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the ", "bbox": {"l": 64.800003, "t": 338.50738999999993, "r": 531.98065, "b": 347.72037, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "United States and other countries.", "bbox": {"l": 64.800003, "t": 348.52713, "r": 215.95392, "b": 357.74011, "coord_origin": "TOPLEFT"}}]}, "text": "Red Hat and OpenShift are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United States and other countries."}, {"label": "text", "id": 25, "page_no": 37, "cluster": {"id": 25, "label": "text", "bbox": {"l": 64.39899444580078, "t": 367.4486083984375, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}, "confidence": 0.9511570930480957, "cells": [{"id": 35, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries.", "bbox": {"l": 64.800003, "t": 368.5069, "r": 472.09439, "b": 377.71988, "coord_origin": "TOPLEFT"}}]}, "text": "UNIX is a registered trademark of The Open Group in the United States and other countries."}, {"label": "text", "id": 26, "page_no": 37, "cluster": {"id": 26, "label": "text", "bbox": {"l": 64.1666259765625, "t": 387.39398193359375, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}, "confidence": 0.9543401598930359, "cells": [{"id": 36, "text": "Other company, product, or service names may be trademarks or service marks of others. ", "bbox": {"l": 64.800003, "t": 388.48666, "r": 465.37216, "b": 397.69965, "coord_origin": "TOPLEFT"}}]}, "text": "Other company, product, or service names may be trademarks or service marks of others."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 37, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.26212310791016, "t": 755.4874267578125, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}, "confidence": 0.9160765409469604, "cells": [{"id": 0, "text": "36 ", "bbox": {"l": 64.800003, "t": 755.868721, "r": 78.402, "b": 765.08172, "coord_origin": "TOPLEFT"}}]}, "text": "36"}, {"label": "page_footer", "id": 1, "page_no": 37, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35021209716797, "t": 755.8494262695312, "r": 267.0744, "b": 765.4060668945312, "coord_origin": "TOPLEFT"}, "confidence": 0.9523178339004517, "cells": [{"id": 1, "text": "IBM Cloud Pak for Data on IBM zSystems", "bbox": {"l": 93.420303, "t": 756.557999, "r": 267.0744, "b": 764.883001, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Cloud Pak for Data on IBM zSystems"}]}}, {"page_no": 38, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 39, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 433.6951904296875, "t": 736.6339721679688, "r": 572.0396728515625, "b": 772.838566, "coord_origin": "TOPLEFT"}, "confidence": 0.9196886420249939, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 497.23223876953125, "t": 692.6136474609375, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}, "confidence": 0.7631505131721497, "cells": [{"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 482.8758239746094, "t": 132.7060089111328, "r": 564.6472778320312, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.6413159966468811, "cells": [{"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 495.9403076171875, "t": 111.2182388305664, "r": 564.1664428710938, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7024716138839722, "cells": [{"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "picture", "bbox": {"l": 475.4501647949219, "t": 44.3557243347168, "r": 565.7938232421875, "b": 79.389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9275028109550476, "cells": []}, {"id": 6, "label": "picture", "bbox": {"l": 42.63053512573242, "t": 749.2789306640625, "r": 68.95333862304688, "b": 776.0442504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.8069466352462769, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 433.6951904296875, "t": 736.6339721679688, "r": 572.0396728515625, "b": 772.838566, "coord_origin": "TOPLEFT"}, "confidence": 0.9196886420249939, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 497.23223876953125, "t": 692.6136474609375, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}, "confidence": 0.7631505131721497, "cells": [{"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}]}, "text": "Printed in U.S.A."}, {"label": "text", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}, {"label": "text", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "text", "bbox": {"l": 482.8758239746094, "t": 132.7060089111328, "r": 564.6472778320312, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.6413159966468811, "cells": [{"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ISBN 0738461067"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 495.9403076171875, "t": 111.2182388305664, "r": 564.1664428710938, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7024716138839722, "cells": [{"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5695-00"}, {"label": "picture", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 475.4501647949219, "t": 44.3557243347168, "r": 565.7938232421875, "b": 79.389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9275028109550476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 42.63053512573242, "t": 749.2789306640625, "r": 68.95333862304688, "b": 776.0442504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.8069466352462769, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "picture", "id": 0, "page_no": 39, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 433.6951904296875, "t": 736.6339721679688, "r": 572.0396728515625, "b": 772.838566, "coord_origin": "TOPLEFT"}, "confidence": 0.9196886420249939, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 475.14240000000007, "t": 765.638296, "r": 507.02359, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 507.02359, "t": 765.374287, "r": 542.70496, "b": 772.838566, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "fi", "bbox": {"l": 564.35974, "t": 757.369411, "r": 571.70026, "b": 766.582411, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 39, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 415.20721, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}, {"label": "text", "id": 3, "page_no": 39, "cluster": {"id": 3, "label": "text", "bbox": {"l": 482.8758239746094, "t": 132.7060089111328, "r": 564.6472778320312, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.6413159966468811, "cells": [{"id": 4, "text": "ISBN 0738461067", "bbox": {"l": 482.88, "t": 133.30872, "r": 564.59991, "b": 142.52173000000005, "coord_origin": "TOPLEFT"}}]}, "text": "ISBN 0738461067"}, {"label": "text", "id": 4, "page_no": 39, "cluster": {"id": 4, "label": "text", "bbox": {"l": 495.9403076171875, "t": 111.2182388305664, "r": 564.1664428710938, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.7024716138839722, "cells": [{"id": 5, "text": "REDP-5695-00", "bbox": {"l": 496.13974, "t": 112.30902000000003, "r": 563.94537, "b": 121.52202999999997, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5695-00"}, {"label": "picture", "id": 5, "page_no": 39, "cluster": {"id": 5, "label": "picture", "bbox": {"l": 475.4501647949219, "t": 44.3557243347168, "r": 565.7938232421875, "b": 79.389404296875, "coord_origin": "TOPLEFT"}, "confidence": 0.9275028109550476, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 6, "page_no": 39, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 42.63053512573242, "t": 749.2789306640625, "r": 68.95333862304688, "b": 776.0442504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.8069466352462769, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 1, "page_no": 39, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 497.23223876953125, "t": 692.6136474609375, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}, "confidence": 0.7631505131721497, "cells": [{"id": 2, "text": "Printed in U.S.A.", "bbox": {"l": 497.45998999999995, "t": 693.857903, "r": 564.18878, "b": 702.182899, "coord_origin": "TOPLEFT"}}]}, "text": "Printed in U.S.A."}]}}] \ No newline at end of file diff --git a/tests/data/redp5110.pdf b/tests/data/redp5110.pdf deleted file mode 100644 index f4ff9a5f..00000000 Binary files a/tests/data/redp5110.pdf and /dev/null differ diff --git a/tests/data/redp5110_sampled.pdf b/tests/data/redp5110_sampled.pdf new file mode 100644 index 00000000..fdfa5a78 Binary files /dev/null and b/tests/data/redp5110_sampled.pdf differ diff --git a/tests/data/redp5695.pdf b/tests/data/redp5695.pdf deleted file mode 100644 index 7ea94824..00000000 Binary files a/tests/data/redp5695.pdf and /dev/null differ diff --git a/tests/test_backend_docling_parse.py b/tests/test_backend_docling_parse.py index ef119ba9..66e7771d 100644 --- a/tests/test_backend_docling_parse.py +++ b/tests/test_backend_docling_parse.py @@ -28,7 +28,7 @@ def _get_backend(pdf_doc): def test_text_cell_counts(): - pdf_doc = Path("./tests/data/redp5695.pdf") + pdf_doc = Path("./tests/data/redp5110_sampled.pdf") doc_backend = _get_backend(pdf_doc) diff --git a/tests/test_backend_docling_parse_v2.py b/tests/test_backend_docling_parse_v2.py index f27ecb43..087272bf 100644 --- a/tests/test_backend_docling_parse_v2.py +++ b/tests/test_backend_docling_parse_v2.py @@ -27,7 +27,7 @@ def _get_backend(pdf_doc): def test_text_cell_counts(): - pdf_doc = Path("./tests/data/redp5695.pdf") + pdf_doc = Path("./tests/data/redp5110_sampled.pdf") doc_backend = _get_backend(pdf_doc) diff --git a/tests/test_backend_pdfium.py b/tests/test_backend_pdfium.py index 0a290185..b2a77dcd 100644 --- a/tests/test_backend_pdfium.py +++ b/tests/test_backend_pdfium.py @@ -28,7 +28,7 @@ def _get_backend(pdf_doc): def test_text_cell_counts(): - pdf_doc = Path("./tests/data/redp5695.pdf") + pdf_doc = Path("./tests/data/redp5110_sampled.pdf") doc_backend = _get_backend(pdf_doc)